添加项目文件。

This commit is contained in:
maqiao 2024-12-03 13:22:42 +08:00
parent 8bb5986650
commit 48e84f11c1
275 changed files with 61005 additions and 0 deletions

View File

@ -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>

View File

@ -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
}
}

51
DM_Weight.sln Normal file
View File

@ -0,0 +1,51 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}.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 = Release|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.Build.0 = Release|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.ActiveCfg = Release|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.Build.0 = Release|Any CPU
{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
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E50E8179-1102-41F1-92F5-2905C75898A6}
EndGlobalSection
EndGlobal

120
DM_Weight/App.config Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<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=xiangtan_mazuike_xx;userid=root;password=root" />
</connectionStrings>
<!--<runtime>
--><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
<legacyUnhandledExceptionPolicy enabled="1"/>
</runtime>-->
<appSettings>
<!-- 设备id -->
<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="159" />
<!-- 登录模式 1单人登录2双人登录 -->
<add key="loginMode" value="1" />
<!-- 登录顺序,指定先登录的人的名称有效值只有在登录模式等于2时才会生效 发药人【operator】审核人【reviewer】 -->
<add key="firstLogin" value="operator" />
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="1" />
<!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="0"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="180"/>
<add key="gridConnectionString" value="MYSQL; Database=xiangtan_mazuike; Password=root; Port=3306; Server=127.0.0.1; User=root;"/>
<!-- 查询处方是orderNo还是orderGroupNo -->
<add key="OrderNoName" value="orderNo" />
<!-- 后门耗材板地址 没有则填写0-->
<add key="DoorAddr" value="1" />
<!-- 是否有can总线串口-->
<add key="CanBusExsit" value="true" />
<!-- 单支抽屉储物箱有则写地址无则为0-->
<add key="StorageBoxAddr" value="1" />
<!-- 抽屉串口使用的协议232或者485 -->
<add key="DrawerProtocol" value="485" />
<!-- 抽屉串口的串口号 -->
<add key="DrawerPortPath" value="COM3" />
<!-- can总线串口的串口号 -->
<add key="CanBusPortPath" value="COM9" />
<!-- 条码枪串口的串口号 -->
<add key="ScanCodePortPath" value="COM8" />
<!--是否有冰箱抽屉0无1有一个2两个-->
<add key="hasFridge" value="0"/>
<!-- 冰箱的串口号 -->
<add key="FridgePortPath" value="COM7" />
<!--冰箱抽屉温度区间-->
<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="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总线串口的串口号 --><!--
<add key="CanBusPortPath" value="COM12" />
--><!-- 条码枪串口的串口号 --><!--
<add key="ScanPortPath" value="COM7" />-->
<!-- 指纹机类型 1无屏幕2有屏幕 -->
<add key="machineType" value="2"/>
<!-- 指纹机号码 -->
<add key="machineNumber" value="1"/>
<!-- 指纹机ip -->
<add key="fingerIp" value="192.168.50.201"/>
<!-- 多处方取药 0:不启用 1启用-->
<add key="MultiOrder" value="1"/>
<!-- 多批次抽屉加药 0:不启用 1启用
启用channel_list记录库位信息 -->
<add key="MultiBatch" value="0"/>
<!--海康威视IP-->
<add key="HIKIP" value="192.168.1.15"/>
<!--海康威视端口-->
<add key="HIKPort" value="8000"/>
<!--海康威视用户名-->
<add key="HIKUser" value="admin"/>
<!--海康威视密码-->
<add key="HIKPassword" value="HKC123456"/>
</appSettings>
</configuration>

19
DM_Weight/App.xaml Normal file
View File

@ -0,0 +1,19 @@
<prism:PrismApplication x:Class="DM_Weight.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
d1p1:Ignorable="d"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:local="clr-namespace:DM_Weight"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<materialDesign:BundledTheme BaseTheme="Light" PrimaryColor="Indigo" SecondaryColor="Cyan" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</prism:PrismApplication>

259
DM_Weight/App.xaml.cs Normal file
View File

@ -0,0 +1,259 @@
using DM_Weight.Finger;
using DM_Weight.Port;
using DM_Weight.util.TabTip;
using DM_Weight.util;
using DM_Weight.ViewModels;
using DM_Weight.Views.Dialog;
using DM_Weight.Views;
using log4net.Config;
using Prism.Ioc;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using Prism.Unity;
using log4net;
using System.Windows.Interop;
using System.Windows.Threading;
using System.Timers;
using DM_Weight.HIKVISION;
namespace DM_Weight
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{
private readonly ILog logger = LogManager.GetLogger(typeof(App));
public App()
{
TabTipAutomation.IgnoreHardwareKeyboard = HardwareKeyboardIgnoreOptions.IgnoreAll;
TabTipAutomation.BindTo<TextBox>();
TabTipAutomation.BindTo<PasswordBox>();
}
protected override Window CreateShell()
{
//UI线程未捕获异常处理事件
this.DispatcherUnhandledException += OnDispatcherUnhandledException;
//Task线程内未捕获异常处理事件
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
//多线程异常
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
return Container.Resolve<MainWindow>();
}
void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
logger.Error($"发生错误:{e.Exception.Message}");
e.Handled = true;
}
void OnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
foreach (Exception item in e.Exception.InnerExceptions)
{
logger.Error($"异常类型:{item.GetType()}{Environment.NewLine}来自:{item.Source}{Environment.NewLine}异常内容:{item.Message}");
}
//将异常标识为已经观察到
e.SetObserved();
}
void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
logger.Error($"Unhandled exception.{e.ToString()}");
}
protected override void InitializeShell(Window shell)
{
base.InitializeShell(shell);
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// 注入日志
XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
//containerRegistry.RegisterInstance<ILog>(LogManager.GetLogger(""));
// 串口工具
containerRegistry.RegisterSingleton<PortUtil>();
// 指纹机工具
containerRegistry.RegisterSingleton<FingerprintUtil>();
// 组态屏工具
containerRegistry.RegisterSingleton<ScreenUtil>();
// 录像机
//containerRegistry.RegisterSingleton<CHKFunction>();
containerRegistry.Register<IDialogService, MaterialDialogService>();
// 主窗口
containerRegistry.Register<MainWindow>();
containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>();
// 分页
//containerRegistry.Register<Pagination>();
//containerRegistry.Register<PaginationViewModel>();
// 登录页面
containerRegistry.RegisterForNavigation<LoginWindow, LoginWindowViewModel>();
// 布局页面
containerRegistry.RegisterForNavigation<HomeWindow, HomeWindowViewModel>();
// 录入指纹模态框
containerRegistry.RegisterDialog<FingerprintDialog>();
containerRegistry.RegisterForNavigation<FingerprintDialog, FingerprintDialogViewModel>();
#region
//交接柜补药
containerRegistry.RegisterForNavigation<AddToJiaoJieWindow, AddToJiaoJieWindowViewModel>();
//交接柜补药页面弹窗
containerRegistry.RegisterDialog<AddToJiaoJieDialog>();
containerRegistry.RegisterForNavigation<AddToJiaoJieDialog, AddToJiaoJieDialogViewModel>();
// 处方取药页面
containerRegistry.RegisterForNavigation<OrderTakeDrugWindow, OrderTakeDrugWindowViewModel>();
// 处方取药模态框
containerRegistry.RegisterDialog<OrderTakeDialog>();
containerRegistry.RegisterForNavigation<OrderTakeDialog, OrderTakeDialogViewModel>();
// 调拨取药页面
containerRegistry.RegisterForNavigation<InvoiceOutWindow, InvoiceOutWindowViewModel>();
// 调拨取药模态框
containerRegistry.RegisterDialog<InvoiceTakeDialog>();
containerRegistry.RegisterForNavigation<InvoiceTakeDialog, InvoiceTakeDialogViewModel>();
// 抽屉取药页面
containerRegistry.RegisterForNavigation<DrawerTakeDrugWindow, DrawerTakeDrugWindowViewModel>();
// 自选取药模态框
containerRegistry.RegisterDialog<SelfTakeDialog>();
containerRegistry.RegisterForNavigation<SelfTakeDialog, SelfTakeDialogViewModel>();
// 自选取药页面
containerRegistry.RegisterForNavigation<SelfTakeDrugWindow, SelfTakeDrugWindowViewModel>();
//多处方取药
containerRegistry.RegisterForNavigation<MultiOrderTakeDrugWindow, MultiOrderTakeDrugWindowViewModel>();
containerRegistry.RegisterDialog<MultiOrderTakeDialog>();
containerRegistry.RegisterForNavigation<MultiOrderTakeDialog,MultiOrderTakeDialogViewModel>();
#endregion
#region
// 自选加药页面
containerRegistry.RegisterForNavigation<SelfAddWindow, SelfAddWindowViewModel>();
// 调拨加药页面
containerRegistry.RegisterForNavigation<InvoiceInWindow, InvoiceInWindowViewModel>();
// 调拨取药模态框
containerRegistry.RegisterDialog<InvoiceAddDialog>();
containerRegistry.RegisterForNavigation<InvoiceAddDialog, InvoiceAddDialogViewModel>();
// 抽屉加药页面
containerRegistry.RegisterForNavigation<DrawerAddDrugWindow, DrawerAddDrugWindowViewModel>();
// 自选加药模态框
containerRegistry.RegisterDialog<SelfAddDialog>();
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
// 还药页面
containerRegistry.RegisterForNavigation<ReturnDrugWindow, ReturnDrugWindowViewModel>();
// 按记录归还药品模态框
containerRegistry.RegisterDialog<ReturnDrugDialog>();
containerRegistry.RegisterForNavigation<ReturnDrugDialog, ReturnDrugDialogViewModel>();
// 还药页面2
containerRegistry.RegisterForNavigation<ReturnDrugWindow2, ReturnDrugWindow2ViewModel>();
// 按处方归还药品模态框
containerRegistry.RegisterDialog<OrderReturnDialog>();
containerRegistry.RegisterForNavigation<OrderReturnDialog, OrderReturnDialogViewModel>();
// 还空瓶页面
containerRegistry.RegisterForNavigation<ReturnEmptyWindow, ReturnEmptyWindowViewModel>();
// 归还空瓶模态框
containerRegistry.RegisterDialog<ReturnEmptyDialog>();
containerRegistry.RegisterForNavigation<ReturnEmptyDialog, ReturnEmptyDialogViewModel>();
// 空瓶销毁模态框
containerRegistry.RegisterDialog<DestoryEmptyDialog>();
containerRegistry.RegisterForNavigation<DestoryEmptyDialog, DestoryEmptyDialogViewModel>();
#endregion
#region
// 库存列表页面
containerRegistry.RegisterForNavigation<StockListWindow, StockListWindowViewModel>();
// 库位绑定模态框
containerRegistry.RegisterDialog<BindingChannelDialog>();
containerRegistry.RegisterForNavigation<BindingChannelDialog, BindingChannelDialogViewModel>();
//同一药品多批次库位绑定
containerRegistry.RegisterForNavigation<BindingChannelNewDialog, BindingChannelNewDialogViewModel>();
// 库存盘点页面
containerRegistry.RegisterForNavigation<CheckStockWindow, CheckStockWindowViewModel>();
// 药品列表页面
containerRegistry.RegisterForNavigation<DrugListWindow, DrugListWindowViewModel>();
//交接班记录
containerRegistry.RegisterForNavigation<ChangeShiftsListWindow, ChangeShiftsListWindowViewModel>();
//交接班弹窗
containerRegistry.RegisterDialog<ChangeShiftsDialog>();
containerRegistry.RegisterForNavigation<ChangeShiftsDialog, ChangeShiftsDialogViewModel>();
containerRegistry.RegisterForNavigation<AccountWindow,AccountWindowViewModel>();
#endregion
#region
// 用户管理页面
containerRegistry.RegisterForNavigation<UserManagerWindow, UserManagerWindowViewModel>();
// 编辑用户模态框
containerRegistry.RegisterDialog<EditUserDialog>();
containerRegistry.RegisterForNavigation<EditUserDialog, EditUserDialogViewModel>();
// 角色管理页面
containerRegistry.RegisterForNavigation<RoleManagerWindow, RoleManagerWindowViewModel>();
// 系统设置
containerRegistry.RegisterForNavigation<SettingWindow, SettingWindowViewModel>();
// 调试页面
containerRegistry.RegisterForNavigation<DebugWindow, DebugWindowViewModel>();
//主设置页面
containerRegistry.RegisterForNavigation<SettingMainWindow, SettingMainWindowViewModel>();
//两个冰箱抽屉设置页面
containerRegistry.RegisterForNavigation<FridgeWindow, FridgeWindowViewModel>();
//只有一个冰箱抽屉设置页面
containerRegistry.RegisterForNavigation<FridgeOnlyWindow, FridgeOnlyWindowViewModel>();
#endregion
// 设备记录页面
containerRegistry.RegisterForNavigation<MachineRecordWindow, MachineRecordWindowViewModel>();
containerRegistry.RegisterForNavigation<ShowMessageDialog, ShowMessageDialogViewModel>();
}
}
}

10
DM_Weight/AssemblyInfo.cs Normal file
View File

@ -0,0 +1,10 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

View File

@ -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;
}
}
}

View File

@ -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);
}
}
}

View File

@ -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";
}
}

View File

@ -0,0 +1,61 @@
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 = int.TryParse(rang[0], out int sRange);
bool bERange = int.TryParse(rang[1], out int eRange);
if (bSRange && bERange)
{
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);
}
}
}
}

View File

@ -0,0 +1,43 @@
<UserControl x:Class="DM_Weight.Components.pagination.Pagination"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DM_Weight.Components.pagination"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
<Grid>
<StackPanel Margin="0 6 20 6" HorizontalAlignment="Right" Orientation="Horizontal">
<TextBlock x:Name="InfoBlock" Padding="0 0 6 0" VerticalAlignment="Center" />
<Button
ToolTip="首页"
Style="{StaticResource MaterialDesignIconForegroundButton}"
Command="{x:Static local:Pagination.FirstCommand}"
Name="First"
Content="{materialDesign:PackIcon PageFirst}" />
<Button
ToolTip="上一页"
Style="{StaticResource MaterialDesignIconForegroundButton}"
Command="{x:Static local:Pagination.PrevCommand}"
Name="Prve"
Content="{materialDesign:PackIcon ChevronLeft}"/>
<TextBlock x:Name="CurrentPageText" Padding="6 0 6 0" VerticalAlignment="Center" />
<Button
ToolTip="下一页"
Style="{StaticResource MaterialDesignIconForegroundButton}"
Command="{x:Static local:Pagination.NextCommand}"
Name="Next"
Content="{materialDesign:PackIcon ChevronRight}"/>
<Button
ToolTip="末页"
Style="{StaticResource MaterialDesignIconForegroundButton}"
Command="{x:Static local:Pagination.EndCommand}"
Name="End"
Content="{materialDesign:PackIcon PageLast}" />
</StackPanel>
</Grid>
</UserControl>

View File

@ -0,0 +1,265 @@
using NetTaste;
using Prism.Commands;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace DM_Weight.Components.pagination
{
/// <summary>
/// Pagination.xaml 的交互逻辑
/// </summary>
public partial class Pagination : UserControl
{
public Pagination()
{
InitializeComponent();
ResetInfoText();
ResetCurrentPageText();
}
static Pagination()
{
InitializeCommands();
}
private static readonly Type _typeofSelf = typeof(Pagination);
private static void InitializeCommands()
{
FirstCommand = new RoutedCommand("First", _typeofSelf);
PrevCommand = new RoutedCommand("Prev", _typeofSelf);
NextCommand = new RoutedCommand("Next", _typeofSelf);
EndCommand = new RoutedCommand("End", _typeofSelf);
CommandManager.RegisterClassCommandBinding(_typeofSelf,
new CommandBinding(FirstCommand, OnFirstComman, OnCanFirstComman));
CommandManager.RegisterClassCommandBinding(_typeofSelf,
new CommandBinding(PrevCommand, OnPrevCommand, OnCanPrevCommand));
CommandManager.RegisterClassCommandBinding(_typeofSelf,
new CommandBinding(NextCommand, OnNextCommand, OnCanNextCommand));
CommandManager.RegisterClassCommandBinding(_typeofSelf,
new CommandBinding(EndCommand, OnEndCommand, OnCanEndCommand));
}
public static RoutedCommand FirstCommand { get; private set; }
private static void OnFirstComman(object sender, RoutedEventArgs e)
{
var ctrl = sender as Pagination;
ctrl.CurrentPage = 1;
}
private static void OnCanFirstComman(object sender, CanExecuteRoutedEventArgs e)
{
var ctrl = sender as Pagination;
e.CanExecute = ctrl.CurrentPage > 1;
}
public static RoutedCommand PrevCommand { get; private set; }
private static void OnPrevCommand(object sender, RoutedEventArgs e)
{
var ctrl = sender as Pagination;
ctrl.CurrentPage--;
}
private static void OnCanPrevCommand(object sender, CanExecuteRoutedEventArgs e)
{
var ctrl = sender as Pagination;
e.CanExecute = ctrl.CurrentPage > 1;
}
public static RoutedCommand NextCommand { get; private set; }
private static void OnNextCommand(object sender, RoutedEventArgs e)
{
var ctrl = sender as Pagination;
ctrl.CurrentPage++;
}
private static void OnCanNextCommand(object sender, CanExecuteRoutedEventArgs e)
{
var ctrl = sender as Pagination;
e.CanExecute = ctrl.CurrentPage < ctrl.PageCount;
}
public static RoutedCommand EndCommand { get; private set; }
private static void OnEndCommand(object sender, RoutedEventArgs e)
{
var ctrl = sender as Pagination;
ctrl.CurrentPage = ctrl.PageCount;
}
private static void OnCanEndCommand(object sender, CanExecuteRoutedEventArgs e)
{
var ctrl = sender as Pagination;
e.CanExecute = ctrl.CurrentPage < ctrl.PageCount;
}
// 默认当前页码
public static int DefaultCurrentPage = 1;
// 默认总条数
public static int DefaultTotalPages = 0;
// 默认每页条数列表
public static List<int> DefaultPageSizeList = new List<int> { 10, 20, 50, 100 };
// 是否显示页码条数信息
public static bool DefaultInfoTextIsEnabel = true;
// 默认每页条数
public static int DefaultPageSize = 10;
public static readonly DependencyProperty CurrentPageProperty = DependencyProperty
.Register("CurrentPage",
typeof(int),
typeof(Pagination),
new FrameworkPropertyMetadata(DefaultCurrentPage, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static readonly DependencyProperty PageSizeProperty = DependencyProperty
.Register("PageSize",
typeof(int),
typeof(Pagination),
new FrameworkPropertyMetadata(DefaultPageSize, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static readonly DependencyProperty TotalPagesProperty = DependencyProperty
.Register("TotalPages",
typeof(int),
typeof(Pagination),
new FrameworkPropertyMetadata(DefaultTotalPages, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnItemsSourceChanged)));
public static readonly DependencyProperty InfoTextIsEnabelProperty = DependencyProperty
.Register("InfoTextIsEnabel",
typeof(bool),
typeof(Pagination),
new FrameworkPropertyMetadata(DefaultInfoTextIsEnabel, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Pagination p = (Pagination)d;
p.ResetInfoText();
}
[Bindable(true)]
[Category("Appearance")]
public int CurrentPage
{
get { return (int)GetValue(CurrentPageProperty); }
set
{
SetValue(CurrentPageProperty, value);
if (InfoTextIsEnabel)
{
ResetInfoText();
}
ResetCurrentPageText();
}
}
//private static void OnCurrentPageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
//{
// Pagination p = d as Pagination;
// if (p != null)
// {
// Console.WriteLine(e.NewValue);
// }
//}
[Bindable(true)]
[Category("Appearance")]
public int PageSize
{
get { return (int)GetValue(PageSizeProperty); }
set
{
SetValue(PageSizeProperty, value);
if (InfoTextIsEnabel)
{
ResetInfoText();
}
ResetCurrentPageText();
}
}
[Bindable(true)]
[Category("Appearance")]
public int TotalPages
{
get { return (int)GetValue(TotalPagesProperty); }
set
{
SetValue(TotalPagesProperty, value);
if (InfoTextIsEnabel)
{
ResetInfoText();
}
ResetCurrentPageText();
}
}
public bool InfoTextIsEnabel
{
get { return (bool)GetValue(InfoTextIsEnabelProperty); }
set { SetValue(InfoTextIsEnabelProperty, value); }
}
public int PageCount
{
get => (int)Math.Ceiling((double)TotalPages / PageSize);
}
public void ResetInfoText()
{
this.Dispatcher.BeginInvoke(() =>
{
if (InfoTextIsEnabel)
{
if (TotalPages <= PageSize)
{
this.InfoBlock.Text = $"1-{TotalPages}/{TotalPages}";
if (TotalPages == 0)
{
this.InfoBlock.Text = $"0-{TotalPages}/{TotalPages}";
}
} else
{
this.InfoBlock.Text = ((CurrentPage - 1) * PageSize + 1) + "-" + (CurrentPage * PageSize > TotalPages ? TotalPages : CurrentPage * PageSize) + "/" + TotalPages;
}
} else
{
this.InfoBlock.Visibility = Visibility.Visible;
}
});
}
public void ResetCurrentPageText()
{
this.Dispatcher.BeginInvoke(() =>
{
this.CurrentPageText.Text = CurrentPage + "";
});
}
}
}

View File

@ -0,0 +1,81 @@
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace DM_Weight.Components.pagination
{
public class PaginationViewModel: BindableBase, IRegionMemberLifetime
{
public static readonly DependencyProperty PageSizeProperty = DependencyProperty
.Register("CurrentPage",
typeof(int),
typeof(Pagination),
new FrameworkPropertyMetadata(10));
// 每页条数
private int _pageSize = 10;
// 当前页码
private int _currentPage = 1;
// 总条数
private int _totalPages = 0;
public int PageSize { get=> _pageSize; set => SetProperty(ref _pageSize, value); }
public int CurrentPage { get => _currentPage; set => SetProperty(ref _currentPage, value); }
public int TotalPages { get => _totalPages; set => SetProperty(ref _totalPages, value); }
// 总页数
public int PageCount
{
get => (int)Math.Ceiling((double)TotalPages/ PageSize);
}
public string InfoText
{
get => ((CurrentPage - 1) * PageSize + 1) + "-" + (CurrentPage * PageSize > TotalPages ? TotalPages : CurrentPage * PageSize) + "/" + TotalPages;
}
public bool KeepAlive => false;
public DelegateCommand ToFirst
{
get => new(() =>
{
CurrentPage = 1;
});
}
public DelegateCommand ToPrve
{
get => new(() =>
{
CurrentPage -= 1;
});
}
public DelegateCommand ToNext
{
get => new(() =>
{
CurrentPage += 1;
});
}
public DelegateCommand ToEnd
{
get => new(() =>
{
CurrentPage = PageCount;
});
}
}
}

View File

@ -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();
}
}
}

View File

@ -0,0 +1,119 @@
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 BoardTypeConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
int BoardType = int.Parse(value[0].ToString());
int DrawerType = int.Parse(value[1].ToString());
switch (BoardType)
{
case 1:
if (DrawerType == 1)
{
return "物理隔断";
}
else if(DrawerType == 2)
{
return "内置回收";
}
else
{
return "外置回收";
}
case 2:
if (DrawerType == 1)
{
return "单支计数";
}
else if (DrawerType == 2)
{
return "计数回收(内置)";
}
else
{
return "计数回收(外置)";
}
case 3:
if (DrawerType == 1)
{
return "管控药盒";
}
else if (DrawerType == 2)
{
return "药盒回收(内置)";
}
else
{
return "外置回收";
}
case 35:
if (DrawerType == 1)
{
return "管控药盒带屏幕";
}
else if (DrawerType == 2)
{
return "药盒带屏幕回收(内置)";
}
else
{
return "外置回收";
}
case 4:
if (DrawerType == 1)
{
return "储物箱";
}
else if (DrawerType == 2)
{
return "内置回收";
}
else
{
return "外置回收";
}
case 5:
if (DrawerType == 1)
{
return "智能显示";
}
else if (DrawerType == 2)
{
return "内置回收";
}
else
{
return "外置回收";
}
case 6:
if (DrawerType == 1)
{
return "称重计数";
}
else if (DrawerType == 2)
{
return "称重回收(内置)";
}
else
{
return "计数回收(外置)";
}
}
return "";
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,26 @@
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 DrawerSelectConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
int ButtonDrawerNo = int.Parse(value[0].ToString());
int SelectedDrawerNo = int.Parse(value[1].ToString());
return ButtonDrawerNo == SelectedDrawerNo;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -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();
}
}
}

View File

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using DM_Weight.Models;
namespace DM_Weight.Converter
{
public class GroupSumConverter : IValueConverter
{
#region
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var total = 0;
// DataGrid分组后对应的组及组内元素CollectionViewGroup.Items 类型是ReadOnlyObservableCollection<object>
if (value is ReadOnlyObservableCollection<object> items)
{
foreach (var item in items)
{
var de = item as ChannelStock;
total += de.Quantity;
}
}
return "总库存:" + total;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}

View File

@ -0,0 +1,26 @@
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 InputQuantityConverter : IValueConverter
{
public bool ReadOnlyValue { get; set; } = true;
public bool NotReadOnlyValue { get; set; } = false;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return int.Parse(value.ToString()) == 2 || int.Parse(value.ToString()) == 6 ? ReadOnlyValue : NotReadOnlyValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows;
namespace DM_Weight.Converter
{
public class NullableToEnabelConverter : IValueConverter
{
public bool NullValue { get; set; } = false;
public bool NotNullValue { get; set; } = true;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == null ? NullValue : NotNullValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
}

View File

@ -0,0 +1,32 @@
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 OpenBoxConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool status = bool.Parse(value.ToString());
if(status)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,38 @@
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 OrderStatusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string strRet = string.Empty;
switch (value.ToString())
{
case "0":
strRet = "待取药";
break;
case "1":
strRet = "已取药";
break;
case "2":
strRet = "已退回";
break;
default:
break;
}
return strRet;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,56 @@
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 PaginationConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string type = values[0].ToString();
if (!string.IsNullOrEmpty(type) && "First".Equals(type))
{
int CurrentPage = int.Parse(values[1].ToString());
return CurrentPage > 1;
}
if (!string.IsNullOrEmpty(type) && "Prve".Equals(type))
{
int CurrentPage = int.Parse(values[1].ToString());
return CurrentPage > 1;
}
if (!string.IsNullOrEmpty(type) && "Next".Equals(type))
{
int CurrentPage = int.Parse(values[1].ToString());
int PageCount = int.Parse(values[2].ToString());
return PageCount > CurrentPage;
}
if (!string.IsNullOrEmpty(type) && "End".Equals(type))
{
int CurrentPage = int.Parse(values[1].ToString());
int PageCount = int.Parse(values[2].ToString());
return PageCount > CurrentPage;
}
if (!string.IsNullOrEmpty(type) && "InfoText".Equals(type))
{
int CurrentPage = int.Parse(values[1].ToString());
int PageCount = int.Parse(values[2].ToString());
int PageSize = int.Parse(values[3].ToString());
int TotalPages = int.Parse(values[4].ToString());
return ((CurrentPage - 1) * PageSize + 1) + "-" + (CurrentPage * PageSize > TotalPages ? TotalPages : CurrentPage * PageSize) + "/" + TotalPages; ;
}
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,25 @@
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 QuantityCountConverter : IValueConverter
{
public bool IsEnabled { get; set; } = true;
public bool NotIsEnabled { get; set; } = false;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return int.Parse(value.ToString()) <= 0 ? IsEnabled : NotIsEnabled;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -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();
}
}
}

View File

@ -0,0 +1,85 @@
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 StatusConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int status = int.Parse(value.ToString());
//完成
if (parameter.ToString().Equals("CompleteBtn"))
{
if (status == 3)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
//关闭
if (parameter.ToString().Equals("CloseBtn"))
{
if (status > 0 && status < 3)
{
return false;
}
else
{
return true;
}
}
if (parameter.ToString().Equals("opearBtnLoading"))
{
if (status > 0 && status < 3)
{
return true;
}
else
{
return false;
}
}
//取药
if (parameter.ToString().Equals("opearBtnVisible"))
{
if (status < 3)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
//取消
if (parameter.ToString().Equals("CancelBtn"))
{
if (status ==3)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,47 @@
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
{
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();
}
}
}

View File

@ -0,0 +1,35 @@
using DM_Weight.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace DM_Weight.Converter
{
public class TotalCountConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var total = 0;
// DataGrid分组后对应的组及组内元素CollectionViewGroup.Items 类型是ReadOnlyObservableCollection<object>
if (value is List<ChannelStock> items)
{
foreach (var item in items)
{
var de = item as ChannelStock;
total += de.Quantity;
}
}
return total;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight
{
public sealed class MessageAttribute : Attribute
{
public MessageAttribute()
{
}
public MessageAttribute(int value)
{
}
}
}

140
DM_Weight/DM_Weight.csproj Normal file
View File

@ -0,0 +1,140 @@
<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>
<Platforms>AnyCPU;x86;x64</Platforms>
</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="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\changeShifts_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\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>
</ItemGroup>
<ItemGroup>
<Page Update="Views\Dialog\InvoiceTakeDialog.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
</Page>
</ItemGroup>
<ItemGroup>
<Folder Include="HIKVISION\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DM_Weight.Commons\DM_Weight.Commons.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,183 @@

using log4net;
using log4net.Repository.Hierarchy;
using Microsoft.Data.SqlClient.Server;
using Newtonsoft.Json;
using Prism.Events;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.util;
using zkemkeeper;
namespace DM_Weight.Finger
{
public class FingerprintUtil
{
private readonly ILog logger = LogManager.GetLogger(typeof(FingerprintUtil));
public zkemkeeper.CZKEMClass axCZKEM1; //= new zkemkeeper.CZKEMClass();
public bool bIsConnected = false;
private string fingerIp = ConfigurationManager.AppSettings["fingerIp"].ToString();
private int fingerPort = 4370;
private int machineNumber = Convert.ToInt32(ConfigurationManager.AppSettings["machineNumber"].ToString());
private int machineType = Convert.ToInt32(ConfigurationManager.AppSettings["machineType"].ToString());
private readonly IEventAggregator _eventAggregator;
public FingerprintUtil(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
logger.Info($"进入构造器,开始连接指纹机");
// Task.Run(() =>
//{
ConnectionMain();
//});
}
public void ConnectionMain()
{
try
{
axCZKEM1 = new CZKEMClass();
bIsConnected = axCZKEM1.Connect_Net(fingerIp, fingerPort);
logger.Info($"连接指纹机,IP:{fingerIp},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
if (bIsConnected)
{
if (axCZKEM1.RegEvent(machineNumber, 9))
{
this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx);
//this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger);
this.axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx);
}
}
_eventAggregator.GetEvent<FingerprintEvent>().Publish(new FingerprintMsg()
{
Message = "CONNECT",
Result = bIsConnected,
});
}
catch (Exception ex)
{
logger.Info($"连接指纹机异常{ex.Message.ToString()}");
}
}
//If your fingerprint(or your card) passes the verification,this event will be triggered
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "LOGIN",
Id = Convert.ToInt32(sEnrollNumber),
VerifyMethod = iVerifyMethod
};
logger.Info($"触发用户验证通过事件用户id:{sEnrollNumber}验证方式:{iVerifyMethod}");
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
//When you are enrolling your finger,this event will be triggered.
private void axCZKEM1_OnEnrollFinger(int iEnrollNumber, int iFingerIndex, int iActionResult, int iTemplateLength)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "INS_FINGER",
Id = iEnrollNumber,
FingerIndex = iFingerIndex
};
axCZKEM1.StartIdentify();
axCZKEM1.RefreshData(1);
logger.Info($"触发用户登记指纹事件用户id:{iEnrollNumber}指纹索引:{iFingerIndex}登记结果:{(iActionResult == 0)}");
message.Result = (iActionResult == 0);
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
private void axCZKEM1_OnEnrollFingerEx(string iEnrollNumber, int iFingerIndex, int iActionResult, int iTemplateLength)
{
FingerprintMsg message = new FingerprintMsg()
{
Message = "INS_FINGER",
Id = Convert.ToInt32(iEnrollNumber),
FingerIndex = iFingerIndex
};
axCZKEM1.StartIdentify();
axCZKEM1.RefreshData(1);
logger.Info($"触发用户登记指纹事件1用户id:{iEnrollNumber}指纹索引:{iFingerIndex}登记结果:{(iActionResult == 0)}");
message.Result = (iActionResult == 0);
_eventAggregator.GetEvent<FingerprintEvent>().Publish(message);
}
/**
*
*/
public bool DelUser(int Id)
{
bool result = false;
axCZKEM1.EnableDevice(machineNumber, false);
if (machineType == 1)
{
result = axCZKEM1.DeleteEnrollData(machineNumber, Id, machineNumber, 12);
}
else
{
result = axCZKEM1.SSR_DeleteEnrollData(machineNumber, Id.ToString(), 12);
}
axCZKEM1.RefreshData(machineNumber);
axCZKEM1.EnableDevice(machineNumber, true);
return result;
}
/**
*
*/
public bool SaveUser(UserList User)
{
bool result = false;
axCZKEM1.SetStrCardNumber(User.UserBarcode);
if (machineType == 1)
{
result = axCZKEM1.SetUserInfo(machineNumber, User.Id, User.Nickname, "123456", 0, true);
}
else
{
result = axCZKEM1.SSR_SetUserInfo(machineNumber, User.Id.ToString(), User.Nickname, "123456", 0, true);
}
return result;
}
/**
*
*/
public bool SaveFingerprint(int Id, int FingerIndex)
{
bool result = false;
// 取消其他操作
bool res2 = axCZKEM1.CancelOperation();
if (machineType == 1)
{
// 删除源指纹
bool res = axCZKEM1.DelUserTmp(machineNumber, Id, FingerIndex);
}
else
{
// 删除源指纹
bool res = axCZKEM1.SSR_DelUserTmp(machineNumber, Id.ToString(), FingerIndex);
}
// 添加新指纹
result = axCZKEM1.StartEnrollEx(Id.ToString(), FingerIndex, 3);
return result;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,192 @@
using DM_Weight.util;
using PreviewDemo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows;
using DM_Weight.Port;
using log4net;
using System.Runtime.InteropServices;
namespace DM_Weight.HIKVISION
{
public class CHKFunction
{
private readonly ILog logger = LogManager.GetLogger(typeof(CHKFunction));
private bool m_bInitSDK = false;
private Int32 m_lRealHandle = -1;
public static int HKUserId = -1;
private uint iLastErr = 0;
private string str;
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()
{
HIKInit();
HIKLogin();
}
public bool HIKInit()
{
m_bInitSDK = CHCNetSDK.NET_DVR_Init();
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);
}
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)
{
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
{
//注销登录 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;
}
return HKUserId;
}
public void HIKLoginOut()
{
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}");
}
}
public bool HIKStartDVRRecord()
{
bool isStart = CHCNetSDK.NET_DVR_StartDVRRecord(HKUserId, 0xffff, 0);
logger.Info($"录像机NET_DVR_StartDVRRecord接口返回{isStart}");
return isStart;
}
public bool HIKStopDVRRecord()
{
bool isStop = CHCNetSDK.NET_DVR_StopDVRRecord(HKUserId, 0xffff);
logger.Info($"录像机NET_DVR_StopDVRRecord接口返回{isStop}");
return isStop;
}
public void HIK_DVR_TIME()
{
UInt32 dwReturn = 0;
Int32 nSize = Marshal.SizeOf(m_struTimeCfg);
IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
if (CHCNetSDK.NET_DVR_GetDVRConfig(HKUserId, CHCNetSDK.NET_DVR_GET_TIMECFG, -1, ptrTimeCfg, (UInt32)nSize, ref dwReturn))
{
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)}");
}
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
//public void Dispose()
//{
// if (m_lRealHandle >= 0)
// {
// bool stopRealPlay= CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
// }
// if (HKUserId >= 0)
// {
// CHCNetSDK.NET_DVR_Logout(HKUserId);
// }
// if (m_bInitSDK == true)
// {
// CHCNetSDK.NET_DVR_Cleanup();
// }
//}
}
}

BIN
DM_Weight/Images/TbExit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
DM_Weight/Images/TbJiay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
DM_Weight/Images/TbKuc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
DM_Weight/Images/TbQyao.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
DM_Weight/Images/TbSet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
DM_Weight/Images/TbTuiy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
DM_Weight/Images/box-16.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
DM_Weight/Images/box.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
DM_Weight/Images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -0,0 +1,206 @@
using Prism.Commands;
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("channel_list")]
public class ChannelList : BindableBase
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "chnguid", IsPrimaryKey = true)]
//[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "row_no")]
public int DrawerNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "col_no")]
public int ColNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "pos_no")]
public int PosNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
///// <summary>
/////
///// 默认值: NULL
/////</summary>
//[SugarColumn(ColumnName = "manu_no")]
//public string ManuNo { get; set; }
///// <summary>
/////
///// 默认值: NULL
/////</summary>
//[SugarColumn(ColumnName = "eff_date")]
//public string EffDate { get; set; }
///// <summary>
/////
///// 默认值: NULL
/////</summary>
//[SugarColumn(ColumnName = "quantity")]
//public int Quantity { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "drawer_type")]
public int DrawerType { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "board_type")]
public int BoardType { get; set; }
/// <summary>
/// 用于标识是否给交接柜补药0未补1已补
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "state")]
public int? State { get; set; }=0;
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
[SugarColumn(IsIgnore = true)]
public InOutInvoice Invoice { get; set; }
[SugarColumn(IsIgnore = true)]
public string Location
{
get => DrawerNo + "-" + ColNo;
}
//private int _addQuantity = 0;
//[SugarColumn(IsIgnore = true)]
//public int AddQuantity
//{
// get => _addQuantity;
// set
// {
// SetProperty(ref _addQuantity, value);
// }
//}
//private int _takeQuantity = 0;
//[SugarColumn(IsIgnore = true)]
//public int TakeQuantity
//{
// get => _takeQuantity;
// set
// {
// if (value > Quantity)
// {
// throw new ArgumentException("取药数量不能大于库存");
// }
// SetProperty(ref _takeQuantity, value);
// }
//}
//private int _returnQuantity = 0;
//[SugarColumn(IsIgnore = true)]
//public int ReturnQuantity
//{
// get => _returnQuantity;
// set
// {
// SetProperty(ref _returnQuantity, value);
// }
//}
//private int _checkQuantity = 0;
//[SugarColumn(IsIgnore = true)]
//public int CheckQuantity
//{
// get => _checkQuantity;
// set
// {
// if (value < 0)
// {
// throw new ArgumentException("盘点数量不能是负数");
// }
// SetProperty(ref _checkQuantity, value);
// }
//}
//[SugarColumn(IsIgnore = true)]
//public int? CanReturnQuantity { get; set; }
private DrugInfo? _DrugInfo;
[Navigate(NavigateType.ManyToOne, nameof(DrugId))]
public DrugInfo Drug { get => _DrugInfo; set => SetProperty(ref _DrugInfo, value); }
//[SugarColumn(IsIgnore = true)]
//public int process { get; set; } = 0;
private DrugManuNo? _drugManuNo;
[SugarColumn(IsIgnore = true)]
public DrugManuNo? drugManuNo { get => _drugManuNo; set => SetProperty(ref _drugManuNo, value); }
private List<ChannelStock>? _channelStocks;
[Navigate(NavigateType.OneToMany, nameof(ChannelStock.Chnguid))]
public List<ChannelStock> channelStocks { get => _channelStocks; set => SetProperty(ref _channelStocks, value); }
//private DelegateCommand<ChannelList> _addManunoCommand;
//[SugarColumn(IsIgnore = true)]
//public DelegateCommand<ChannelList> AddManunoCommand
//{
// get
// {
// if (_addManunoCommand == null)
// _addManunoCommand = new DelegateCommand<ChannelList>(o => DoDelete(o));
// return _addManunoCommand;
// }
//}
//private void DoDelete(ChannelList parameter)
//{
//}
//药品规格
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;
}
}
}

View File

@ -0,0 +1,210 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Prism.Mvvm;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("channel_stock")]
public class ChannelStock : BindableBase
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "chsguid", IsPrimaryKey = true)]
//[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public string Id { get; set; }
[SugarColumn(ColumnName = "chnguid")]
public string Chnguid { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "row_no")]
public int DrawerNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "col_no")]
public int ColNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "pos_no")]
public int PosNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "manu_no")]
public string ManuNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "eff_date")]
public string EffDate { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "quantity")]
public int Quantity { get; set; }
/// <summary>
///
/// 交接柜中库存基数
///</summary>
[SugarColumn(ColumnName = "check_quantity")]
public int BaseQuantity { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "drawer_type")]
public int DrawerType { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "board_type")]
public int BoardType { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "state")]
public int? State { get; set; }
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
[SugarColumn(IsIgnore = true)]
public InOutInvoice Invoice { get; set; }
//[SugarColumn(IsIgnore = true)]
//public string Location
//{
// get => DrawerNo + "-" + ColNo;
//}
[SugarColumn(IsIgnore = true)]
public string Location
{
get => ColNo == 0 ? DrawerNo + "号交接柜" : DrawerNo + "-" + ColNo;
}
private int _addQuantity = 0;
[SugarColumn(IsIgnore = true)]
public int AddQuantity
{
get => _addQuantity;
set
{
SetProperty(ref _addQuantity, value);
}
}
private int _takeQuantity = 0;
[SugarColumn(IsIgnore = true)]
public int TakeQuantity
{
get => _takeQuantity;
set
{
if (value > Quantity)
{
throw new ArgumentException("取药数量不能大于库存");
}
SetProperty(ref _takeQuantity, value);
}
}
//private string _tipMessage=string.Empty;
//[SugarColumn(IsIgnore = true)]
//public string TipMessage
//{
// get => _tipMessage;
// set
// {
// SetProperty(ref _tipMessage, value);
// }
//}
private int _returnQuantity = 0;
[SugarColumn(IsIgnore = true)]
public int ReturnQuantity
{
get => _returnQuantity;
set
{
SetProperty(ref _returnQuantity, value);
}
}
private int _checkQuantity = 0;
[SugarColumn(IsIgnore = true)]
public int CheckQuantity
{
get => _checkQuantity;
set
{
if (value < 0)
{
throw new ArgumentException("盘点数量不能是负数");
}
SetProperty(ref _checkQuantity, value);
}
}
[SugarColumn(IsIgnore = true)]
public int? CanReturnQuantity { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(DrugId))]
public DrugInfo DrugInfo { get; set; }
[SugarColumn(IsIgnore = true)]
public int process { get; set; } = 0;
[SugarColumn(IsIgnore = true)]
public DrugManuNo? drugManuNo { get; set; }
private ChannelList? _channelList;
[Navigate(NavigateType.ManyToOne, nameof(Chnguid))]
public ChannelList ChannelLst { get => _channelList; set => SetProperty(ref _channelList, value); }
[SugarColumn(IsIgnore = true)]
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; }
}
}

View File

@ -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 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; }
}
}

View File

@ -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; }
}
}

View File

@ -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 = "id", IsPrimaryKey = true)]
public int BaseId { get=> _baseId; set { SetProperty(ref _baseId, value); } }
private string _drugId = "0";
[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 = "base_quantity")]
public int BaseQuantity { get=>_baseQuantity; set{ SetProperty(ref _baseQuantity, value); } }
}
}

View File

@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Prism.Mvvm;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("drug_info")]
public class DrugInfo:BindableBase
{
/// <summary>
///
///</summary>
//[SugarColumn(ColumnName = "pharmacy")]
//public string Pharmacy { get; set; }
/// <summary>
/// ҩƷID
///</summary>
[SugarColumn(ColumnName = "drug_id", IsPrimaryKey = true)]
public string DrugId { get; set; }
/// <summary>
/// ƴ
///</summary>
[SugarColumn(ColumnName = "py_code")]
public string PyCode { get; set; }
/// <summary>
///
///</summary>
//[SugarColumn(ColumnName = "BD_code")]
//public string BdCode { get; set; }
/// <summary>
/// ҩƷ
///</summary>
[SugarColumn(ColumnName = "drug_barcode")]
public string DrugBarcode { get; set; }
/// <summary>
/// ҩƷ<D2A9><C6B7><EFBFBD><EFBFBD>
///</summary>
[SugarColumn(ColumnName = "drug_name")]
public string DrugName { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "drug_brand_name")]
public string DrugBrandname { get; set; }
/// <summary>
/// ҩƷ<D2A9><C6B7><EFBFBD>
///</summary>
[SugarColumn(ColumnName = "drug_spec")]
public string DrugSpec { get; set; }
/// <summary>
/// <20><><EFBFBD><EFBFBD>
///</summary>
[SugarColumn(ColumnName = "dosage")]
public string Dosage { get; set; }
/// <summary>
/// <20><>װ<EFBFBD><D7B0>λ
///</summary>
[SugarColumn(ColumnName = "pack_unit")]
public string PackUnit { get; set; }
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///</summary>
[SugarColumn(ColumnName = "manufactory")]
public string Manufactory { get; set; }
/// <summary>
/// <20><><EFBFBD>ҩ<EFBFBD><D2A9>
///</summary>
[SugarColumn(ColumnName = "max_stock")]
public int? MaxStock { get; set; }
//[SugarColumn(IsIgnore=true)]
[Navigate(NavigateType.OneToMany, nameof(ChannelStock.DrugId), nameof(DrugId))]//BookA表中的studenId
public List<ChannelStock> channelStocks { get; set; }
[Navigate(NavigateType.OneToMany, nameof(DrugManuNo.DrugId))]//BookA表中的studenId
public List<DrugManuNo>? DrugManuNos { get; set; }
[SugarColumn(IsIgnore = true)]
public int? StockQuantity { get; set; }
private DrugBase _base;
[Navigate(NavigateType.OneToOne, nameof(DrugBase.DrugId), nameof(DrugId))]
public DrugBase drugBase
{
get=> _base;
set { SetProperty(ref _base, value); }
}
}
}

View File

@ -0,0 +1,35 @@
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("drug_manu_no")]
public class DrugManuNo : BindableBase
{
private string _id;
[SugarColumn(ColumnName = "dmnguid", IsPrimaryKey = true)]
public string Id { get => _id; set => SetProperty(ref _id, value); }
private string _drugId;
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get => _drugId; set => SetProperty(ref _drugId, value); }
private string _manuNo;
[SugarColumn(ColumnName = "manu_no")]
public string ManuNo { get => _manuNo; set => SetProperty(ref _manuNo, value); }
private string _manuDate;
[SugarColumn(ColumnName = "manu_date")]
public string ManuDate { get => _manuDate; set => SetProperty(ref _manuDate, value); }
private string _effDate;
[SugarColumn(ColumnName = "eff_date")]
public string EffDate { get => _effDate; set => SetProperty(ref _effDate, value); }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -0,0 +1,149 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
[SugarTable("in_out_invoice")]
public class InOutInvoice
{
/// <summary>
/// 主键(序号)
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity =true)]
public int Id { get; set; }
[SugarColumn(ColumnName = "in_pharmacy_id")]
public string InPharmacyId { get; set; }
[SugarColumn(ColumnName = "out_pharmacy_id")]
public string OutPharmacyId { get; set; }
/// <summary>
/// 库存管理单位(入库单位代码)
/// </summary>
[SugarColumn(ColumnName = "storage")]
public string storage { get; set; }
/// <summary>
/// 单据号
/// </summary>
[SugarColumn(ColumnName = "invoice_no")]
public string InvoiceNo { get; set; }
[SugarColumn(ColumnName = "invoice_date")]
public string InvoiceDate { get; set; }
/// <summary>
/// 药品id
/// </summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(DrugId))]
public DrugInfo DrugInfo { get; set; }
/// <summary>
/// 药品规格
/// </summary>
[SugarColumn(ColumnName = "drug_spec")]
public string DrugSpec { get; set; }
/// <summary>
/// 计算单位
/// </summary>
[SugarColumn(ColumnName = "units")]
public string Units { get; set; }
/// <summary>
/// 厂商标识
/// </summary>
[SugarColumn(ColumnName = "firm_id")]
public string FirmId { get; set; }
/// <summary>
/// 包装规格反映药品含量及包装信息如0.25g*30
/// </summary>
[SugarColumn(ColumnName = "package_spec")]
public string PackageSpec { get; set; }
/// <summary>
/// 数量(以包装单位所计的数量)
/// </summary>
[SugarColumn(ColumnName = "quantity")]
public int quantity { get; set; }
/// <summary>
/// 计量单位,可使用任一级管理上方便的包装
/// </summary>
[SugarColumn(ColumnName = "package_units")]
public string PackageUnits { get; set; }
/// <summary>
/// 药品批次
/// </summary>
[SugarColumn(ColumnName = "drug_manu_no")]
public string DrugManuNo { get; set; }
/// <summary>
/// 创建时间(入库日期)
/// </summary>
[SugarColumn(ColumnName = "create_time")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 1.请领入库 0.其它
/// </summary>
[SugarColumn(ColumnName = "type")]
public int Type { get; set; }
/// <summary>
/// 类型描述
/// </summary>
[SugarColumn(ColumnName = "type_describe")]
public string TypeDescribe { get; set; }
/// <summary>
/// 供货方
/// </summary>
[SugarColumn(ColumnName = "supplier")]
public string Supplier { get; set; }
/// <summary>
/// 操作人
/// </summary>
[SugarColumn(ColumnName = "operator")]
public string Operator { get; set; }
/// <summary>
/// 存放库房
/// </summary>
[SugarColumn(ColumnName = "sub_storage")]
public string SubStorage { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnName = "memos")]
public string Memos { get; set; }
[SugarColumn(ColumnName = "status")]
public int Status { get; set; }
[SugarColumn(ColumnName = "drug_eff_date")]
public string DrugEffDate { get; set; }
[SugarColumn(ColumnName = "his_id")]
public string HisId { get; set; }
[SugarColumn(ColumnName = "cancel_flag")]
public int CancelFlag { get; set; }
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
[Serializable]
public class Invoice
{
public string InvoiceNo { get; set; }
public string InvoiceDate { get; set; }
public int Count { get; set; }
public int Quantity { get; set; }
public int Status { get; set; }
public string PharmacyName1 { get; set; }
public string PharmacyName2 { get; set; }
}
}

View File

@ -0,0 +1,154 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
[SugarTable("dm_machine_record")]
public class MachineRecord
{
/// <summary>
/// 主键
///</summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 设备id
///</summary>
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get; set; }
/// <summary>
/// 药品id
///</summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(DrugId))]
public DrugInfo DrugInfo { get; set; }
/// <summary>
/// 数量
///</summary>
[SugarColumn(ColumnName = "quantity")]
public int Quantity { get; set; }
//[SugarColumn(ColumnName = "stock_quantity")]
//public int? StockQuantity { get; set; }
//[SugarColumn(ColumnName = "check_quantity")]
//public int? CheckQuantity { get; set; }
/// <summary>
/// 批号
///</summary>
[SugarColumn(ColumnName = "manu_no")]
public string ManuNo { get; set; }
/// <summary>
/// 操作人id
///</summary>
[SugarColumn(ColumnName = "operator")]
public int? Operator { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(Operator))]
public UserList User { get; set; }
/// <summary>
/// 审核人id
///</summary>
[SugarColumn(ColumnName = "reviewer")]
public int? Reviewer { get; set; }
/// <summary>
/// 操作时间
/// 默认值: CURRENT_TIMESTAMP
///</summary>
[SugarColumn(ColumnName = "operation_time")]
public DateTime OperationTime { get; set; }
/// <summary>
/// 效期
///</summary>
[SugarColumn(ColumnName = "eff_date")]
public DateTime? EffDate { get; set; }
/// <summary>
/// 出库入库类型(1入库2出库31还药32还空瓶)
///</summary>
[SugarColumn(ColumnName = "type")]
public int Type { get; set; }
/// <summary>
/// 出入库调拨单id
///</summary>
[SugarColumn(ColumnName = "invoice_id")]
public string InvoiceId { get; set; }
/// <summary>
/// 列号
///</summary>
[SugarColumn(ColumnName = "col_no")]
public int ColNo { get; set; }
/// <summary>
/// 抽屉号
///</summary>
[SugarColumn(ColumnName = "drawer_no")]
public int DrawerNo { get; set; }
/// <summary>
/// 取药科室
///</summary>
[SugarColumn(ColumnName = "department_id")]
public string DepartmentId { get; set; }
/// <summary>
/// 是否已经退药(0:没有1:还了部分2:完成)
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "status", IsOnlyIgnoreInsert = true)]
public int Status { get; set; }
/// <summary>
/// 退药量
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "return_quantity1", IsOnlyIgnoreInsert = true)]
public int ReturnQuantity1 { get; set; }
/// <summary>
/// 退空瓶量
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "return_quantity2", IsOnlyIgnoreInsert = true)]
public int ReturnQuantity2 { get; set; }
/// <summary>
/// 取药记录id
///</summary>
[SugarColumn(ColumnName = "get_id")]
public int? GetId { get; set; }
/// <summary>
/// 是否已经销毁
/// 默认值: 0
///</summary>
[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)]
public int CanReturnQuantity
{
get => Quantity - ReturnQuantity1 - ReturnQuantity2;
}
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -0,0 +1,16 @@
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
public class OrderDepartment : BindableBase
{
//科室
public string _deptName="全部";
public string DeptName { get=>_deptName; set { SetProperty(ref _deptName, value); } }
}
}

View File

@ -0,0 +1,131 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("order_detail")]
public class OrderDetail
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "order_id")]
//public int? OrderId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "patient_id")]
public string PatientId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "order_no")]
public string OrderNo { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "charge_date")]
public DateTime ChargeDate { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "serial_no")]
//public int? SerialNo { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(DrugId))]
public DrugInfo DrugInfo { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "quantity")]
public int Quantity { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "order_unit")]
public string OrderUnit { get; set; }
/// <summary>
///
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "unit_convercoef")]
public int? UnitConvercoef { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "set_manu_no")]
public string SetManuNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "set_eff_date")]
public string SetEffDate { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "price")]
//public string Price { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "total_price")]
//public string TotalPrice { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "use_discrip")]
public string UseDiscrip { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "use_frequ")]
public string UseFrequ { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "use_once")]
public string UseOnce { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "use_by")]
public string UseBy { get; set; }
/// <summary>
///
/// 默认值: '0'
///</summary>
[SugarColumn(ColumnName = "use_self")]
public string UseSelf { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "use_dosage")]
public string UseDosage { get; set; }
}
}

View File

@ -0,0 +1,32 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
[SugarTable("hkc_order_finish")]
public class OrderFinish
{
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public int Id { get; set; }
[SugarColumn(ColumnName = "pharmacy")]
public string Pharmacy { get; set; }
[SugarColumn(ColumnName = "patient_id")]
public string PatientId { get; set; }
[SugarColumn(ColumnName = "order_no")]
public string OrderNo { get; set; }
[SugarColumn(ColumnName = "state")]
public int State { get; set; }
[SugarColumn(ColumnName = "operator")]
public string Operator { get; set; }
}
}

View File

@ -0,0 +1,211 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("order_info")]
public class OrderInfo
{
/// <summary>
/// 是否选中
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool ItemIsChecked { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "order_id", IsPrimaryKey = true, IsIdentity = true)]
public int OrderId { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "pharmacy")]
public string Pharmacy { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "order_no")]
public string OrderNo { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "patient_id")]
public string PatientId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "p_name")]
public string PName { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "sex")]
public string Sex { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "age")]
public string Age { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "id_number")]
public string IdNumber { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "patient_card")]
public string PatientCard { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "invoice_no")]
public string InvoiceNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "patient_no")]
public string PatientNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "doctor_name")]
public string DoctorName { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "order_date")]
public DateTime OrderDate { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "charge_date")]
public DateTime ChargeDate { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "recv_date")]
public DateTime RecvDate { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "dept_name")]
public string DeptName { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "disease")]
public string Disease { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "order_type")]
public string OrderType { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "charge_type")]
public string ChargeType { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "state")]
public int State { get; set; }
/// <summary>
///
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "his_disp_flag")]
public int? HisDispFlag { get; set; }
/// <summary>
///
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "cancel_flag")]
public int? CancelFlag { get; set; }
/// <summary>
///
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "dm_status")]
public int? DmStatus { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "agent_name")]
//public string AgentName { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "agent_id_no")]
//public string AgentIdNo { get; set; }
/// <summary>
///
/// 默认值: NULL
///</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 = "payments")]
//public decimal? Payments { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "dispensary")]
//public string Dispensary { get; set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
//[SugarColumn(ColumnName = "identity")]
//public string Identity { get; set; }
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get; set; }
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[Serializable]
public class PremissionDm
{
/// <summary>
/// 主键
///</summary>
public int Id { get; set; }
/// <summary>
/// 菜单名
///</summary>
public string PremissionName { get; set; }
/// <summary>
/// 菜单路径
///</summary>
public string PremissionPath { get; set; }
/// <summary>
/// 图片source
///</summary>
public string PremissionImage { get; set; }
public ObservableCollection<PremissionDm>? Children { get; set; }
}
}

View File

@ -0,0 +1,104 @@
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; }
}
}

View File

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("role")]
public class RoleDm
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )]
public int? Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="role_name" )]
public string RoleName { get; set; }
/// <summary>
///
///</summary>
//[SugarColumn(ColumnName="role_des" )]
//public string RoleDes { get; set; }
/// <summary>
///
///</summary>
///[SugarColumn(ColumnName="permissions" )]
[SugarColumn(ColumnName = "permissions", ColumnDataType = "varchar(4000)" /*可以设置类型*/, IsJson = true)]//必填
public List<PremissionDm> Permissions { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="machine_id" )]
public string MachineId { get; set; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
///
///</summary>
[SugarTable("user_list")]
public class UserList
{
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="id" ,IsPrimaryKey = true ,IsIdentity = true )]
public int Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="user_id" )]
public string UserName { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="user_name" )]
public string Nickname { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="pass_word" )]
public string PassWord { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="user_barcode" )]
public string UserBarcode { get; set; }
/// <summary>
///
///</summary>
//[SugarColumn(ColumnName="status" )]
//public int? Status { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="machine_role_id" )]
public int? RoleId { get; set; }
[Navigate(NavigateType.ManyToOne, nameof(RoleId))]
public RoleDm? Role { get; set; }
/// <summary>
///
///</summary>
//[SugarColumn(ColumnName="user_card" )]
// public string UserCard { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="machine_id" )]
public string MachineId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName="sign" )]
public byte[] Sign { get; set; }
public override string ToString()
{
return "userList = [UserName:" + Nickname + ", UserId:" + UserName + "]";
}
}
}

1931
DM_Weight/Port/PortUtil.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,171 @@
using DM_Weight.Models;
using log4net;
using SuperSimpleTcp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Windows.Markup;
namespace DM_Weight.Port
{
public class ScreenUtil
{
private readonly ILog logger = LogManager.GetLogger(typeof(ScreenUtil));
SimpleTcpServer server = new SimpleTcpServer("0.0.0.0:8888");
string ipport { get; set; } = "";
public ScreenUtil()
{
server.Events.ClientConnected += (object sender, ConnectionEventArgs e) =>
{
ipport = e.IpPort;
logger.Info($"[{e.IpPort}] client connected");
};
server.Events.ClientDisconnected += (object sender, ConnectionEventArgs e) =>
{
logger.Info($"[{e.IpPort}] client disconnected: {e.Reason}");
};
server.Events.DataReceived += (object sender, DataReceivedEventArgs e) =>
{
logger.Info($"[{e.IpPort}]: {e.Data.Array}");
};
// let's go!
server.Start();
}
private byte[] head = new byte[] { 0xee, 0xb1, 0x12 };
private byte[] end = new byte[] { 0xFF, 0xFC, 0xFF, 0xFF };
public void SetStockInfo(ChannelStock channel, int screenId)
{
// 添加画面id
byte[] a = Copy2NewArr(head, HighLow(screenId));
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
//if (channel.DrugInfo.DrugName != null)
//{
byte[] content = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.DrugName??"");
a = WriteInfo(a, content, channel.ColNo * 10 + 1);
//}
//if (channel.DrugInfo.Manufactory != null)
//{
byte[] content1 = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.Manufactory?? "");
a = WriteInfo(a, content1, channel.ColNo * 10 + 2);
//}
//if (channel.DrugInfo.DrugSpec != null)
//{
byte[] content2 = Encoding.GetEncoding("gb2312").GetBytes(channel.DrugInfo?.DrugSpec ?? "");
a = WriteInfo(a, content2, channel.ColNo * 10 + 3);
//}
//if (channel.ManuNo != null)
//{
byte[] content3 = Encoding.GetEncoding("gb2312").GetBytes(channel.ManuNo);
a = WriteInfo(a, content3, channel.ColNo * 10 + 4);
//}
//if (channel.EffDate != null)
//{
byte[] content4 = Encoding.GetEncoding("gb2312").GetBytes(channel.EffDate);
a = WriteInfo(a, content4, channel.ColNo * 10 + 5);
//}
//if (channel.Quantity != null)
//{
byte[] content5 = Encoding.GetEncoding("gb2312").GetBytes(channel.Quantity.ToString());
a = WriteInfo(a, content5, channel.ColNo * 10 + 6);
//}
// 添加结束块
byte[] b = Copy2NewArr(a, end);
server.Send(ipport, b);
}
public void TellChange(int d)
{
byte[] buffer = new byte[] { 0xee, 0xb5, 0x01, 0x00, 0xFF, 0xFC, 0xFF, 0xFF };
}
public void SetStockInfo(List<ChannelStock> channels, int screenId)
{
// 添加画面id
byte[] a = Copy2NewArr(head, HighLow(screenId));
for (int i = 0; i < channels.Count; i++)
{
ChannelStock channel = channels[i];
if (channel.DrugInfo.DrugName != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.DrugName);
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 1);
}
if (channel.DrugInfo.Manufactory != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.Manufactory);
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 2);
}
if (channel.DrugInfo.DrugSpec != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.DrugInfo.DrugSpec);
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 3);
}
if (channel.ManuNo != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.ManuNo);
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 4);
}
if (channel.EffDate != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.EffDate);
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 5);
}
if (channel.Quantity != null)
{
byte[] content = Encoding.ASCII.GetBytes(channel.Quantity.ToString());
a = WriteInfo(a, content, channels[0].DrawerNo * 10 + 6);
}
}
// 添加结束块
byte[] b = Copy2NewArr(a, end);
server.Send(ipport, b);
}
public byte[] WriteInfo(byte[] a, byte[] content, int id)
{
// 添加控件id
byte[] b = Copy2NewArr(a, HighLow(id));
// 添加需要向控件内写入的字节长度
byte[] c = Copy2NewArr(b, HighLow(content.Length));
// 写入内容
return Copy2NewArr(c, content);
}
public byte[] HighLow(int data)
{
byte high = Convert.ToByte((data >> 8) & 0x00ff); //位运算右移8位
byte low = Convert.ToByte(data & 0x00ff); //去掉高位
return new byte[] {high, low};
}
public byte[] Copy2NewArr(byte[] source1, byte[] source2)
{
byte[] target = new byte[source1.Length + source2.Length];
Buffer.BlockCopy(source1, 0, target, 0, source1.Length);
Buffer.BlockCopy(source2, 0, target, source1.Length, source2.Length);
return target;
}
}
}

View File

@ -0,0 +1,369 @@
using gregn6Lib;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DM_Weight.Models;
using System.Configuration;
using DM_Weight.util;
using System.Diagnostics;
namespace DM_Weight.Report
{
public class GridReportUtil
{
// 定义Grid++Report报表主对象
public static GridppReport Report = new GridppReport();
public static string gridConnectionString = ConfigurationManager.AppSettings["gridConnectionString"];
/**
*
* tempname:
* data:
*/
public static void PrintReport(string tempname, object data)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
// 加载模板文件
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + tempname);
string s = JsonConvert.SerializeObject(data);
// 加载数据
Report.LoadDataFromXML(JsonConvert.SerializeObject(data));
Report.PrintPreview(true);
}
public static void PrintReportStock()
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
//Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() =>
//{
// Report.ParameterByName("machine_id").Value = (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`";
// 加载模板文件
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "stock_template.grf");
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
}
public static void PrintReportAccountBook(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//" + "account_book_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);
//});
//Report.DetailGrid.Recordset.QuerySQL = SQL;
SQL = $@"SELECT mr.`stock_quantity` AS `stockQuantity`, IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, 0))
AS `inQuantity`, IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), 0)) AS `outQuantity`,
mr.`operation_time` AS `operationTime`, mr.`invoice_id` AS `invoiceId`, di.`drug_name` AS `drugName`, di.`drug_id` AS `drugId`,
di.`drug_spec` AS `drugSpec`, di.`pack_unit` AS `packUnit`, di.`dosage` AS `dosage`, di.`manufactory` AS `manufactory`,
mr.`manu_no` AS `manuNo`, mr.`eff_date` AS `effDate`, u1.`user_name` AS `operatorName`, u2.`user_name` AS `reviewerName` FROM
dm_machine_record mr LEFT JOIN drug_info di ON mr.`drug_id` = di.`drug_id` LEFT JOIN user_list u1 ON mr.`operator` = u1.`id`
LEFT JOIN user_list u2 ON mr.`reviewer` = u2.`id` WHERE mr.`machine_id` = '{p_machine_id}' AND mr.`operation_time` > '{p_startDate}'
AND mr.`operation_time` < '{p_endDate}' ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`";
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"] ?? "DM1");
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报表主对象
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.Initialize += new _IGridppReportEvents_InitializeEventHandler(() =>
//{
// Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
// Report.ParameterByName("startDate").Value = startDate??DateTime.Now.AddYears(-10);
// Report.ParameterByName("endDate").Value = endDate??DateTime.Now.AddDays(1);
//});
// 加载模板文件
if (type == 1)
{
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_add.grf");
SQL = $@"SELECT 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 FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`
LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` = 1 AND dmr.`machine_id` = '{p_machine_id}'
AND dmr.`operation_time` > '{p_startDate}' AND dmr.`operation_time` < '{p_endDate}'";
}
else if (type == 2)
{
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_take.grf");
SQL = $@" SELECT 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 FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`
LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` = 2
AND dmr.`machine_id` ='{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}'
AND dmr.`operation_time` < '{p_endDate}'";
}
else if (type == 3)
{
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_return.grf");
SQL = $@" SELECT dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,
CONCAT(dmr.`quantity`,IF(dmr.`type`=32,""()"","""")) 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 FROM dm_machine_record dmr
LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id` LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator`
WHERE dmr.`type` in (31, 32) AND dmr.`machine_id` = '{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}'
AND dmr.`operation_time` < '{p_endDate}'";
}
else
{
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "machine_log_check.grf");
SQL = $@" SELECT 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 FROM dm_machine_record dmr LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`
LEFT JOIN user_list ul ON ul.`id` = dmr.`Operator` WHERE dmr.`type` = 4
AND dmr.`machine_id` = '{p_machine_id}' AND dmr.`operation_time` > '{p_startDate}'
AND dmr.`operation_time` < '{p_endDate}'";
}
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
}
/**
*
* tempname:
* data:
*/
public static void PrintMachineRecordReport(List<MachineRecord> data)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
// 加载模板文件
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//machine_log.grf");
// 加载数据
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);
}
}
}

View File

@ -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":"DM1"
}
],
"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
}
]
}

View File

@ -0,0 +1,618 @@
{
"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,
"AppendBlankRow":true,
"Recordset":{
"Field":[
{
"Name":"日期",
"Type":"DateTime",
"Format":"M/d",
"DBFieldName":"operationTime"
},
{
"Name":"操作类型",
"DBFieldName":"type"
},
{
"Name":"批号",
"DBFieldName":"manuNo"
},
{
"Name":"上次批次结存",
"Type":"Integer",
"DBFieldName":"beforeManuQuan"
},
{
"Name":"入库数量",
"Type":"Integer",
"DBFieldName":"inQuantity"
},
{
"Name":"出库数量",
"Type":"Integer",
"DBFieldName":"outQuantity"
},
{
"Name":"批号结存",
"Type":"Integer",
"DBFieldName":"manuQuantity"
},
{
"Name":"总结存",
"Type":"Integer",
"DBFieldName":"stockQuantity"
},
{
"Name":"收/发药人",
"DBFieldName":"operatorName"
},
{
"Name":"复核人",
"DBFieldName":"reviewerName"
},
{
"Name":"药品名称",
"DBFieldName":"drugName"
},
{
"Name":"规格",
"DBFieldName":"drugSpec"
},
{
"Name":"单位",
"DBFieldName":"bigUnit"
},
{
"Name":"剂型",
"DBFieldName":"dosage"
},
{
"Name":"厂家",
"DBFieldName":"manuFactory"
},
{
"Name":"有效期",
"Type":"DateTime",
"Format":"yy/M/d",
"DBFieldName":"effDate"
},
{
"Name":"sign1",
"Type":"Binary"
},
{
"Name":"sign2",
"Type":"Binary"
},
{
"Name":"drugId",
"DBFieldName":"drug_Id"
},
{
"Name":"凭证号",
"DBFieldName":"invoiceId"
},
{
"Name":"供应单位",
"DBFieldName":"supplierDept"
},
{
"Name":"领用部门",
"DBFieldName":"receiveDept"
}
]
},
"Column":[
{
"Name":"日期",
"Width":1.77271
},
{
"Name":"凭证号",
"Width":2.19604
},
{
"Name":"批号",
"Width":3.99521
},
{
"Name":"有效期",
"Width":2.43417
},
{
"Name":"入库数量",
"Width":1.79917
},
{
"Name":"出库数量",
"Width":1.79917
},
{
"Name":"Column4",
"Width":1.98438
},
{
"Name":"收/发药人",
"Width":2.80458
},
{
"Name":"复核人",
"Width":2.80458
},
{
"Name":"Column2",
"Width":2.35479
},
{
"Name":"Column3",
"Width":2.38125
}
],
"ColumnContent":{
"Height":0.85,
"ColumnContentCell":[
{
"Column":"日期",
"WordWrap":true,
"TextAlign":"MiddleCenter",
"ShrinkFontToFit":true,
"DataField":"日期"
},
{
"Column":"凭证号",
"DataField":"凭证号"
},
{
"Column":"批号",
"TextAlign":"MiddleCenter",
"DataField":"批号"
},
{
"Column":"有效期",
"TextAlign":"MiddleCenter",
"DataField":"有效期"
},
{
"Column":"入库数量",
"TextAlign":"MiddleCenter",
"DataField":"入库数量"
},
{
"Column":"出库数量",
"TextAlign":"MiddleCenter",
"DataField":"出库数量"
},
{
"Column":"Column4",
"TextAlign":"MiddleCenter",
"DataField":"总结存"
},
{
"Column":"收/发药人",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox12",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"DataField":"收/发药人"
}
]
},
{
"Column":"复核人",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox13",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"DataField":"复核人"
}
]
},
{
"Column":"Column2",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox14",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"DataField":"供应单位"
}
]
},
{
"Column":"Column3",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox15",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"DataField":"领用部门"
}
]
}
]
},
"ColumnTitle":{
"Height":1.19063,
"RepeatStyle":"OnGroupHeaderPage",
"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
},
"TextAlign":"MiddleCenter",
"Text":"有效\r\n期"
},
{
"GroupTitle":false,
"Column":"入库数量",
"Font":{
"Name":"宋体",
"Size":105000,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"借入\r\n数量"
},
{
"GroupTitle":false,
"Column":"出库数量",
"Font":{
"Name":"宋体",
"Size":105000,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"发出\r\n数量"
},
{
"GroupTitle":false,
"Column":"Column4",
"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":"Column2",
"Font":{
"Name":"宋体",
"Size":105000,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"供应单位"
},
{
"GroupTitle":false,
"Column":"Column3",
"Font":{
"Name":"宋体",
"Size":105000,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"领用部门"
}
]
},
"Group":[
{
"Name":"Group1",
"ByFields":"drugId",
"GroupHeader":{
"NewPage":"Before",
"PrintGridBorder":false,
"RepeatOnPage":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox15",
"Left":28.3898,
"Top":0.238125,
"Width":2.01083,
"Height":0.79375,
"Text":"生产厂家:"
},
{
"Type":"MemoBox",
"Name":"MemoBox11",
"Left":30.3742,
"Top":0.211667,
"Width":5.3975,
"Height":0.79375,
"Text":"[#manuFactory#]"
},
{
"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":"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":"FieldBox9",
"Left":12.7794,
"Top":0.0529167,
"Width":1.87854,
"Height":0.978958,
"Font":{
"Name":"宋体",
"Size":105000,
"Bold":true,
"Charset":134
},
"DataField":"单位"
},
{
"Type":"StaticBox",
"Name":"StaticBox19",
"Left":15.3988,
"Top":0.0529167,
"Width":1.16417,
"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":"剂型"
},
{
"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":"厂家"
}
],
"NewPageColumn":"Before"
},
"GroupFooter":{
"Visible":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
}
]
}

View File

@ -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
}
]
}

View File

@ -0,0 +1,283 @@
{
"Version":"6.3.0.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"LeftMargin":0.3175,
"TopMargin":0.899583,
"RightMargin":0.396875
},
"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` = 1 \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":"Nickname"
},
{
"Name":"时间",
"Type":"DateTime",
"Format":"yyyy/MM/dd HH:mm:ss",
"DBFieldName":"operationTime"
},
{
"Name":"药品名称",
"DBFieldName":"DrugName"
},
{
"Name":"数量",
"DBFieldName":"quantity"
},
{
"Name":"批次",
"DBFieldName":"manuNo"
},
{
"Name":"效期",
"Type":"DateTime",
"Format":"yyyy/MM/dd",
"DBFieldName":"effDate"
},
{
"Name":"库位",
"DBFieldName":"drawerNo"
},
{
"Name":"colNo"
},
{
"Name":"type2",
"Type":"Integer",
"DBFieldName":"type"
}
]
},
"Column":[
{
"Name":"操作人",
"Width":2.38125
},
{
"Name":"时间",
"Width":3.78354
},
{
"Name":"药品名称",
"Width":4.63021
},
{
"Name":"数量",
"Width":1.98438
},
{
"Name":"批次",
"Width":2.61938
},
{
"Name":"效期",
"Width":2.38125
},
{
"Name":"库位",
"Width":2.59292
}
],
"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":"库位",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox1",
"Left":9.60438,
"Top":-2.16958,
"Width":2.80458,
"Height":0.661458
},
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"TextAlign":"MiddleCenter",
"Text":"[#库位#] - [#colNo#]"
}
]
}
]
},
"ColumnTitle":{
"Height":1.40229,
"RepeatStyle":"OnPage",
"ColumnTitleCell":[
{
"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":"库位"
}
]
}
},
"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":"DM1"
}
],
"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
}
]
}

View File

@ -0,0 +1,283 @@
{
"Version":"6.3.0.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"LeftMargin":0.3175,
"TopMargin":0.899583,
"RightMargin":0.396875
},
"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` = 4 \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":"Nickname"
},
{
"Name":"时间",
"Type":"DateTime",
"Format":"yyyy/MM/dd HH:mm:ss",
"DBFieldName":"operationTime"
},
{
"Name":"药品名称",
"DBFieldName":"DrugName"
},
{
"Name":"数量",
"DBFieldName":"quantity"
},
{
"Name":"批次",
"DBFieldName":"manuNo"
},
{
"Name":"效期",
"Type":"DateTime",
"Format":"yyyy/MM/dd",
"DBFieldName":"effDate"
},
{
"Name":"库位",
"DBFieldName":"drawerNo"
},
{
"Name":"colNo"
},
{
"Name":"type2",
"Type":"Integer",
"DBFieldName":"type"
}
]
},
"Column":[
{
"Name":"操作人",
"Width":2.38125
},
{
"Name":"时间",
"Width":3.78354
},
{
"Name":"药品名称",
"Width":4.63021
},
{
"Name":"数量",
"Width":1.98438
},
{
"Name":"批次",
"Width":2.61938
},
{
"Name":"效期",
"Width":2.38125
},
{
"Name":"库位",
"Width":2.59292
}
],
"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":"库位",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox1",
"Left":9.60438,
"Top":-2.16958,
"Width":2.80458,
"Height":0.661458
},
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"TextAlign":"MiddleCenter",
"Text":"[#库位#] - [#colNo#]"
}
]
}
]
},
"ColumnTitle":{
"Height":1.40229,
"RepeatStyle":"OnPage",
"ColumnTitleCell":[
{
"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":"库位"
}
]
}
},
"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":"DM1"
}
],
"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
}
]
}

View File

@ -0,0 +1,283 @@
{
"Version":"6.3.0.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"LeftMargin":0.3175,
"TopMargin":0.899583,
"RightMargin":0.396875
},
"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 CONCAT(dmr.`quantity`,IF(dmr.`type`=32,\"(空瓶)\",\"\")) 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` in (31, 32)\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":"Nickname"
},
{
"Name":"时间",
"Type":"DateTime",
"Format":"yyyy/MM/dd HH:mm:ss",
"DBFieldName":"operationTime"
},
{
"Name":"药品名称",
"DBFieldName":"DrugName"
},
{
"Name":"数量",
"DBFieldName":"quantity"
},
{
"Name":"批次",
"DBFieldName":"manuNo"
},
{
"Name":"效期",
"Type":"DateTime",
"Format":"yyyy/MM/dd",
"DBFieldName":"effDate"
},
{
"Name":"库位",
"DBFieldName":"drawerNo"
},
{
"Name":"colNo"
},
{
"Name":"type2",
"Type":"Integer",
"DBFieldName":"type"
}
]
},
"Column":[
{
"Name":"操作人",
"Width":2.38125
},
{
"Name":"时间",
"Width":3.78354
},
{
"Name":"药品名称",
"Width":4.63021
},
{
"Name":"数量",
"Width":1.98438
},
{
"Name":"批次",
"Width":2.61938
},
{
"Name":"效期",
"Width":2.38125
},
{
"Name":"库位",
"Width":2.59292
}
],
"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":"库位",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox1",
"Left":9.60438,
"Top":-2.16958,
"Width":2.80458,
"Height":0.661458
},
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"TextAlign":"MiddleCenter",
"Text":"[#库位#] - [#colNo#]"
}
]
}
]
},
"ColumnTitle":{
"Height":1.40229,
"RepeatStyle":"OnPage",
"ColumnTitleCell":[
{
"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":"库位"
}
]
}
},
"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":"DM1"
}
],
"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
}
]
}

View File

@ -0,0 +1,283 @@
{
"Version":"6.3.0.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"LeftMargin":0.3175,
"TopMargin":0.899583,
"RightMargin":0.396875
},
"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":"Nickname"
},
{
"Name":"时间",
"Type":"DateTime",
"Format":"yyyy/MM/dd HH:mm:ss",
"DBFieldName":"operationTime"
},
{
"Name":"药品名称",
"DBFieldName":"DrugName"
},
{
"Name":"数量",
"DBFieldName":"quantity"
},
{
"Name":"批次",
"DBFieldName":"manuNo"
},
{
"Name":"效期",
"Type":"DateTime",
"Format":"yyyy/MM/dd",
"DBFieldName":"effDate"
},
{
"Name":"库位",
"DBFieldName":"drawerNo"
},
{
"Name":"colNo"
},
{
"Name":"type2",
"Type":"Integer",
"DBFieldName":"type"
}
]
},
"Column":[
{
"Name":"操作人",
"Width":2.38125
},
{
"Name":"时间",
"Width":3.78354
},
{
"Name":"药品名称",
"Width":4.63021
},
{
"Name":"数量",
"Width":1.98438
},
{
"Name":"批次",
"Width":2.61938
},
{
"Name":"效期",
"Width":2.38125
},
{
"Name":"库位",
"Width":2.59292
}
],
"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":"库位",
"FreeCell":true,
"Control":[
{
"Type":"FieldBox",
"Name":"FieldBox1",
"Left":9.60438,
"Top":-2.16958,
"Width":2.80458,
"Height":0.661458
},
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"TextAlign":"MiddleCenter",
"Text":"[#库位#] - [#colNo#]"
}
]
}
]
},
"ColumnTitle":{
"Height":1.40229,
"RepeatStyle":"OnPage",
"ColumnTitleCell":[
{
"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":"库位"
}
]
}
},
"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":"DM1"
}
],
"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
}
]
}

View File

@ -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":"DM1"
}
],
"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
}
]
}

View File

@ -0,0 +1,346 @@
{
"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":"drugName"
},
{
"Name":"drugSpec"
},
{
"Name":"manuFactory"
},
{
"Name":"quantityCount"
},
{
"Name":"manuNo"
},
{
"Name":"effDate"
},
{
"Name":"quantity",
"Type":"Integer",
"Format":"0"
},
{
"Name":"drawerNo"
},
{
"Name":"drugId"
},
{
"Name":"baseQuantity",
"Type":"Integer"
}
]
},
"Column":[
{
"Name":"drugName",
"Width":5.37104
},
{
"Name":"drugSpec"
},
{
"Name":"manuFactory",
"Width":4.60375
},
{
"Name":"Column1"
},
{
"Name":"quantityCount",
"Width":2.59292
},
{
"Name":"manuNo"
},
{
"Name":"effDate"
},
{
"Name":"quantity",
"Width":2.43417
}
],
"ColumnContent":{
"Height":0.79375,
"ColumnContentCell":[
{
"Column":"drugName",
"TextAlign":"MiddleCenter",
"DataField":"drugName"
},
{
"Column":"drugSpec",
"TextAlign":"MiddleCenter",
"DataField":"drugSpec"
},
{
"Column":"manuFactory",
"TextAlign":"MiddleCenter",
"DataField":"manuFactory"
},
{
"Column":"Column1",
"FreeCell":true
},
{
"Column":"quantityCount",
"FreeCell":true
},
{
"Column":"manuNo",
"TextAlign":"MiddleCenter",
"DataField":"manuNo"
},
{
"Column":"effDate",
"TextAlign":"MiddleCenter",
"DataField":"effDate"
},
{
"Column":"quantity",
"TextAlign":"MiddleCenter",
"DataField":"quantity"
}
]
},
"ColumnTitle":{
"Height":1.19063,
"RepeatStyle":"OnPage",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"drugName",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"药品名称"
},
{
"GroupTitle":false,
"Column":"drugSpec",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"规格"
},
{
"GroupTitle":false,
"Column":"manuFactory",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"厂家"
},
{
"GroupTitle":false,
"Column":"Column1",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"基数"
},
{
"GroupTitle":false,
"Column":"quantityCount",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"总库存"
},
{
"GroupTitle":false,
"Column":"manuNo",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"批次"
},
{
"GroupTitle":false,
"Column":"effDate",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"效期"
},
{
"GroupTitle":false,
"Column":"quantity",
"Font":{
"Name":"宋体",
"Size":142500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"数量"
}
]
},
"Group":[
{
"Name":"drugId",
"ByFields":"drugId",
"GroupHeader":{
"Visible":false,
"Height":0.79375,
"RepeatOnPage":true,
"OccupyColumn":true,
"IncludeFooter":true,
"OccupiedColumns":"drugName;drugSpec;manuFactory;quantityCount;Column1",
"VAlign":"Middle"
},
"GroupFooter":{
"Visible":false,
"Height":0.396875
}
},
{
"Name":"Group1",
"ByFields":"drugId",
"GroupHeader":{
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox3",
"AlignColumn":"drugName",
"Width":5.3975,
"Height":1.19063,
"TextAlign":"MiddleCenter",
"Text":"[#drugName#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox4",
"AlignColumn":"drugSpec",
"Left":5.37104,
"Width":3.01625,
"Height":1.19063,
"TextAlign":"MiddleCenter",
"Text":"[#drugSpec#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox5",
"AlignColumn":"manuFactory",
"Left":8.36083,
"Width":4.63021,
"Height":1.19063,
"TextAlign":"MiddleCenter",
"Text":"[#manuFactory#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox6",
"AlignColumn":"Column1",
"Left":12.9646,
"Width":3.01625,
"Height":1.19063,
"TextAlign":"MiddleCenter",
"Text":"[#baseQuantity#]"
},
{
"Type":"SummaryBox",
"Name":"SummaryBox1",
"AlignColumn":"quantityCount",
"Left":15.9544,
"Width":2.61938,
"Height":1.19063,
"TextAlign":"MiddleCenter",
"DataField":"quantity",
"Format":"0"
}
],
"OccupyColumn":true,
"SameAsColumn":false,
"OccupiedColumns":"Column1;drugName;drugSpec;manuFactory;quantityCount",
"VAlign":"Middle"
},
"GroupFooter":{
"Visible":false
}
}
]
},
"Parameter":[
{
"Name":"machine_id",
"Value":"DM1"
}
],
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":2.40771,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox1",
"Center":"Horizontal",
"Left":8.89,
"Top":0.608542,
"Width":9.18104,
"Height":1.21708,
"Font":{
"Name":"宋体",
"Size":217500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"毒麻药品库存信息"
}
],
"RepeatOnPage":true
}
]
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace DM_Weight.Validation
{
public class NotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return string.IsNullOrWhiteSpace((value ?? "").ToString())
? new ValidationResult(false, "字段不能为空")
: ValidationResult.ValidResult;
}
}
}

View File

@ -0,0 +1,378 @@
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, 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, 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 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 ";
}
}
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;
}
}
}

View File

@ -0,0 +1,534 @@
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 SqlSugar;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Drawing.Printing;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace DM_Weight.ViewModels
{
public class AddDrugControlViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(DrawerAddDrugWindowViewModel));
private List<int> _drawerNoList = new List<int>();
public static AddDrugControlViewModel vm;
//凭证号
//private string _pzh;
//public string PZH { get => _pzh; set { SetProperty(ref _pzh, value); } }
private List<ChannelList>? _channelLsts;
public List<ChannelList>? ChannelLsts
{
get => _channelLsts;
set => SetProperty(ref _channelLsts, value);
}
private List<ChannelStock> __channelStocks = new List<ChannelStock>();
public List<ChannelStock> ChannelStocks
{
get => __channelStocks;
set => SetProperty(ref __channelStocks, value);
}
private ChannelStock? _channelStock;
public ChannelStock? CStock
{
get => _channelStock;
set => SetProperty(ref _channelStock, value);
}
//private ChannelList? _channelList;
//public ChannelList? ChannelLst
//{
// get => _channelList;
// set => SetProperty(ref _channelList, value);
//}
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddDrugControlViewModel(IDialogService DialogService, PortUtil portUtil, IEventAggregator eventAggregator)
{
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
vm = this;
}
public DelegateCommand SelectionChangedCommand => new DelegateCommand(selectionAction);
private async void selectionAction()
{
if (CStock != null)
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("addManuno", CStock);
DialogServiceExtensions.ShowDialogHost(_dialogService, "AddManunoDialog", dialogParameters, DoDialogResult, "RootDialog");
}
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
CStock = null;
RequestData();
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "DrawerAddDrugWindow")
{
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)
{
//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;
break;
}
}
if (msg.WindowName == "AddDrugControl")
{
}
}
private int _status;
public int Status { get => _status; set => SetProperty(ref _status, value); }
private int _drawerNo = 1;
public int DrawerNo
{
get => _drawerNo;
set => SetProperty(ref _drawerNo, value);
}
private bool _is8Drawer = true;
public bool Is8Drawer { get => _is8Drawer; set => SetProperty(ref _is8Drawer, value); }
private bool _is16Drawer = false;
public bool Is16Drawer { get => _is16Drawer; set => SetProperty(ref _is16Drawer, value); }
private bool _is17Drawer = false;
public bool Is17Drawer { get => _is17Drawer; set => SetProperty(ref _is17Drawer, value); }
public DelegateCommand<string> UpdateDrawerNo
{
get => new DelegateCommand<string>((DrawerNo) =>
{
this.DrawerNo = Convert.ToInt32(DrawerNo);
RequestData();
}, (DrawerNo) => Status == 0
);
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(() =>
{
Status = 1;
_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.Operate = true;
_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;
_portUtil.Start();
}
catch (Exception ex)
{
logger.Info($"OpenDrawer异常{ex.Message}");
}
}, () => Status == 0).ObservesProperty(() => Status);
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
{
get => new DelegateCommand(() =>
{
if (!_isFinishClick)
{
_isFinishClick = true;
foreach (ChannelList lst in ChannelLsts)
{
ChannelStocks.AddRange(lst.channelStocks);
}
List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
if (record.Count > 0)
{
string InvoiceId = "DRAWER_" + CurrentTimeMillis();
//string InvoiceId = PZH;
//List<string> repeatList = new List<string>();
List<ChannelStock> stockRepeats = new List<ChannelStock>();
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.Length>=10?it.drugManuNo.EffDate.Substring(0,10):it.drugManuNo.EffDate;
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.ManuNo == it.ManuNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).ToList();
if (csCount.Count > 0)
{
//repeatList.Add(it.ManuNo);
stockRepeats.Add(it);
continue;
}
// 更新数据 库存信息
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)
}).ExecuteCommand();
}
return true;
});
ChannelStocks.Clear();
//if (record.Count == repeatList.Count)
if (stockRepeats.Count == record.Count)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"该抽屉已存在此药品批次{string.Join(',', stockRepeats.Select(r=>r.ManuNo).ToArray())},请选择其他批次",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
//if (repeatList.Count > 0)
//{
// AlertMsg alertMsg = new AlertMsg
// {
// Message = $"该抽屉已存在此药品批次{string.Join(',', repeatList)},请选择其他批次",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
//}
if (f.Data)
{
string msg = string.Empty;
MsgType type = MsgType.SUCCESS;
//if (repeatList.Count > 0)
if (stockRepeats.Count > 0)
{
msg = $"该抽屉下批次{string.Join(',', stockRepeats.Select(r => r.ManuNo).ToArray())}已存在,不可重复添加,其他批次加药完成,库存已更新";
foreach(var stockRpt in stockRepeats)
{
//移除重复的信息,以免更新屏显库存时更新了重复数据
record.Remove(stockRpt);
}
type = MsgType.WARING;
}
else
{
msg = "抽屉加药完成,库存已更新";
}
// 更新屏显库存
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
{
singleChannels.ForEach(it =>
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + it.AddQuantity);
});
}
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = msg,
Type = type,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "更新库存失败",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
Status = 0;
_isFinishClick = false;
//PZH = string.Empty;
}
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 void AddAction(ChannelList channelLS)
{
if (channelLS != null)
{
ChannelStock cls = new ChannelStock();
DrugManuNo drugManu = new DrugManuNo();
cls.DrugInfo = channelLS.Drug;
if (channelLS.channelStocks.Count > 0)
{
//drugManu = channelLS.channelStocks[0].DrugInfo.DrugManuNos[0];
cls.drugManuNo = channelLS.channelStocks[0].drugManuNo;
}
else
{
//drugManu= cls.DrugInfo.DrugManuNos[0];
if (cls.DrugInfo.DrugManuNos.Count > 0)
{
cls.drugManuNo = cls.DrugInfo.DrugManuNos[0];
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "该药品下没有批次,请先添加批次",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
}
//cls.Id = "";
cls.Chnguid = channelLS.Id;
cls.MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1";
cls.DrawerNo = channelLS.DrawerNo;
cls.BoardType = channelLS.BoardType;
cls.DrawerType = channelLS.DrawerType;
cls.ColNo = channelLS.ColNo;
cls.DrugId = channelLS.DrugId;
cls.AddQuantity = 0;
//string sqlStr = @"select drug_id,manu_no,manu_date,eff_date from drug_manu_no where drug_id=@drugId
// and manu_no not in(select manu_no from channel_stock where drug_id=@drugId) ";
//cls.DrugInfo.DrugManuNos=SqlSugarHelper.Db.SqlQueryable<dynamic>(sqlStr).AddParameters(new
//{
// drugId = channelLS.DrugId
//})
//.Select(it => new DrugManuNo()).ToList();
List<ChannelStock> stockList = new List<ChannelStock>();
stockList.AddRange(channelLS.channelStocks);
stockList.Add(cls);
channelLS.channelStocks = stockList;
}
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
public bool KeepAlive => false;
public void FindDrawerCount()
{
int 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();
Is8Drawer = count < 9;
Is16Drawer = count >= 16;
Is17Drawer = count > 16;
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
public void RequestData()
{
List<ChannelList> queryData = SqlSugarHelper.Db.Queryable<ChannelList>()
.Includes(cl => cl.Drug, di => di.DrugManuNos)
.Includes(cl => cl.channelStocks, dr => dr.DrugInfo, d => d.DrugManuNos)
.Where(cl => cl.DrawerNo == DrawerNo)
.Where(cl => cl.DrawerType == 1)
.Where(cl => cl.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(cl => cl.DrugId != null)
.OrderBy(cl => cl.ColNo)
.ToList();
ChannelLsts = queryData.Select(cl =>
{
cl.channelStocks = cl.channelStocks.Select(cs =>
{
cs.drugManuNo = cl.Drug.DrugManuNos.Find(it => it.ManuNo.Equals(cs.ManuNo));
return cs;
}).ToList();
return cl;
}).ToList();
//ChannelLsts = new ObservableCollection<ChannelList>(queryData);
ChannelLsts.ForEach(cl => cl.channelStocks.ForEach(cs => cs.DrugInfo = cl.Drug));
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<AddDrugEvent>().Subscribe(AddAction);
FindDrawerCount();
RequestData();
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<AddDrugEvent>().Unsubscribe(AddAction);
}
}
}

View File

@ -0,0 +1,569 @@
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();
}
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 > 2).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;
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> jiaojieStock = Jiaojie_ChannelStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
//交接柜中有该药品及批次的数据则更新;没有则插入一条
if (jiaojieStock != null)
{
for (int j = 0; j < jiaojieStock.Count; j++)
{
List<ChannelStock> searchStock = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.DrawerNo == jiaojieStock[j].DrawerNo
&& cs.DrugId == jiaojieStock[j].DrugId
&& cs.DrugId == it.DrugId
&& cs.ManuNo == it.ManuNo
&&cs.MachineId==(ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5"))
.ToList();
//List<ChannelStock> stockManuList = jiaojieStock.Where(cs => cs.ManuNo == it.ManuNo).ToList();
if (searchStock == null || searchStock.Count <= 0)
{
SqlSugarHelper.Db.Deleteable<ChannelStock>().Where(cs=>cs.DrawerNo== jiaojieStock[j].DrawerNo&&cs.DrugId== jiaojieStock[j].DrugId&&cs.Quantity<=0).ExecuteCommand();
jiaojieStock[j].ManuNo = it.ManuNo;
jiaojieStock[j].Id = Guid.NewGuid().ToString();
SqlSugarHelper.Db.Insertable(jiaojieStock).ExecuteCommand();
}
}
}
//if (jiaojieStock != null && jiaojieStock.Count > 0)
//{
// for (int j = 0; j < jiaojieStock.Count; j++)
// {
// // 更新数据 交接柜 库存信息
// ChannelStock jiaojie_it = jiaojieStock[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.ManuNo }).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));
});
}
}
}

View File

@ -0,0 +1,505 @@
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 SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Channels;
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 = ChannelStocks.GroupBy(it => new { it.DrawerNo, it.DrugId })
.Select(it =>
{
var ret = it.First();
ret.Quantity = it.Sum(itx => itx.Quantity);
return ret;
})
.ToList();
ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity - cs.Quantity);
ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
}
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)
{
//channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
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"));
}
}
}
}

View File

@ -0,0 +1,844 @@
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);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
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 i.do_date = @CreateTime ");
}
if (!String.IsNullOrEmpty(SearchValue))
{
sb.Append(" and i.please_no = @please_no ");
}
if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["department"]))
{
sb.Append(" and i.department = @department ");
}
sb.Append(" GROUP BY i.please_no");
sb.Append(" order by i.do_date ");
_DrugPleaseClaimList = SqlSugarHelper.Db.SqlQueryable<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 (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 async 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);
//将库位多批次的总库存数更新标签
await _portUtil.WriteQuantity(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo, totalQuantity);
Thread.Sleep(200);
await _portUtil.WriteChannelInfo(6, channelStockEffDate[0].EffDate == null ? "" : channelStockEffDate[0].EffDate, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
Thread.Sleep(200);
await _portUtil.WriteChannelInfo(5, channelStockEffDate[0].ManuNo, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
Thread.Sleep(200);
_portUtil.ShowContent(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
//}
}
}
List<ChannelStock> singleChannelsBoxSmart = record.Where(it => it.BoardType == 35)
.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 (singleChannelsBoxSmart != null && singleChannelsBoxSmart.Count > 0)
{
for (int i = 0; i < singleChannelsBoxSmart.Count; i++)
{
List<ChannelStock> channelStockEffDate = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId == singleChannelsBoxSmart[i].MachineId)
.Where(cs => cs.DrawerNo == singleChannelsBoxSmart[i].DrawerNo)
.Where(cs => cs.ColNo == singleChannelsBoxSmart[i].ColNo)
.Where(cs => cs.Quantity > 0)
.OrderBy(cs => cs.EffDate).ToList();
int totalQuantity = channelStockEffDate.Sum(it => it.Quantity);
//将库位多批次的总库存数更新标签
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(2, totalQuantity.ToString(), channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(5, channelStockEffDate[0].EffDate, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(6, channelStockEffDate[0].ManuNo, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
await Task.Delay(200);
await _portUtil.ShowContentMethod(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;
}
}
}

View File

@ -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)
{
}
}
}

View File

@ -0,0 +1,453 @@
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.Tasks;
using System.Windows.Media;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
namespace DM_Weight.ViewModels
{
public class BindingChannelDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
public static BindingChannelDialogViewModel vm;
public string Title => "库位绑定";
public event Action<IDialogResult> RequestClose;
private int _drawerNo = 0;
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);
}
IEventAggregator _eventAggregator;
PortUtil _portUtil;
//ScreenUtil _screenUtil;
public BindingChannelDialogViewModel(IEventAggregator eventAggregator, PortUtil portUtil//, ScreenUtil screenUtil
)
{
_eventAggregator = eventAggregator;
_portUtil = portUtil;
//_screenUtil = screenUtil;
vm = this;
}
public int DrawerNo
{
get => _drawerNo;
set
{
SetProperty(ref _drawerNo, value);
GetChannelsByDrawerNo();
}
}
private DrugInfo? _drugInfo;
public DrugInfo? DrugInfo
{
get => _drugInfo;
set
{
SetProperty(ref _drugInfo, value);
if (_drugInfo != null)
{
//DrugManuNos = _drugInfo.DrugManuNos;
DrugManuNos = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(m => m.DrugId == _drugInfo.DrugId.ToString()).ToList();
}
}
}
private List<DrugInfo>? _drugInfos;
public List<DrugInfo>? DrugInfos
{
get => _drugInfos;
set => SetProperty(ref _drugInfos, value);
}
private DrugManuNo? _drugManuNo;
public DrugManuNo? DrugManuNo
{
get => _drugManuNo;
set => SetProperty(ref _drugManuNo, value);
}
private List<DrugManuNo>? _drugManuNos;
public List<DrugManuNo>? DrugManuNos
{
get => _drugManuNos;
set => SetProperty(ref _drugManuNos, value);
}
private List<ChannelStock>? _channels;
public List<ChannelStock>? Channels
{
get => _channels;
set => SetProperty(ref _channels, 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);
GetChannelsByDrawerNo();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 9;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
}
private void GetChannelsByDrawerNo()
{
Channels?.Clear();
int totalCount = 0;
var list = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.WhereIF(DrawerNo > 0, cs => cs.DrawerNo == DrawerNo)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.OrderBy(cs => cs.DrawerNo)
.OrderBy(cs => cs.ColNo)
.ToPageList(PageNum, PageSize, ref totalCount);
Channels = list;
TotalCount = totalCount;
}
public void OnDialogOpened(IDialogParameters parameters)
{
if (parameters.ContainsKey("DrawerNo"))
{
DrawerNo = parameters.GetValue<int>("DrawerNo");
}
GetAllDrugInfos();
GetChannelsByDrawerNo();
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
}
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
GetChannelsByDrawerNo();
});
}
public DelegateCommand BindingDrug
{
get => new DelegateCommand(async () =>
{
var SelectChannels = Channels.FindAll(item => item.IsSelected && item.Quantity == 0);
if(SelectChannels is null || SelectChannels.Count <= 0)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("未选中库位或库位还存在药品无法绑定");
return;
}
if (SelectChannels.All(it => it.DrawerType != 1))
{
if (SelectChannels.Count == 1)
{
if (DrugInfo != null)
{
int count = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrugId.Equals(DrugInfo.DrugId.ToString())).Where(cs => cs.DrawerType != 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Count();
if (count == 0)
{
var item = SelectChannels[0];
if (item.DrugId == null || !DrugInfo.DrugId.ToString().Equals(item.DrugId))
{
item.PosNo = 0;
}
item.DrugId = DrugInfo.DrugId.ToString();
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId, it.PosNo }).ExecuteCommand();
GetChannelsByDrawerNo();
if (item.BoardType == 5)
{
_portUtil.WindowName = "BindingChannelDialog";
// 向显示屏写入库位信息
_portUtil.WriteChannelInfo(1, DrugInfo.DrugName, item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.WriteChannelInfo(2, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.WriteChannelInfo(8, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
//_screenUtil.SetStockInfo(item, 1);
if(item.BoardType == 35)
{
_portUtil.WindowName = "BindingChannelDialog";
await _portUtil.WriteChannelInfoMethod(1,DrugInfo.DrugName, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(3, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(4, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(5, item.EffDate, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(6, item.ManuNo, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.ShowContentMethod(item.DrawerNo, item.ColNo);
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue($"药品【{DrugInfo.DrugName}】已经绑定了回收库位不可再次绑定");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("请选择库位需要绑定的药品信息");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("每种药品只能绑定一个回收库位");
}
}
else
{
if (DrugInfo != null && DrugManuNo != null)
{
var c = SelectChannels.Count;
if (c > 0)
{
SelectChannels.ForEach(async (item) =>
{
if (item.DrugId == null || !DrugInfo.DrugId.ToString().Equals(item.DrugId))
{
item.PosNo = 0;
}
if(DrugManuNo.EffDate!=null&& DrugManuNo.EffDate.Length>=10)
{
DrugManuNo.EffDate= DrugManuNo.EffDate.Substring(0,10);
}
item.DrugId = DrugInfo.DrugId.ToString();
item.ManuNo = DrugManuNo.ManuNo;
item.DrugInfo = DrugInfo;
item.EffDate = String.Format("{0:yyyy-MM-dd}", DrugManuNo.EffDate.Length>=10? DrugManuNo.EffDate.Substring(0,10): DrugManuNo.EffDate);
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId, it.ManuNo, it.EffDate, it.PosNo }).ExecuteCommand();
if (item.BoardType == 5)
{
_portUtil.WindowName = "BindingChannelDialog";
// 向显示屏写入库位信息
await _portUtil.WriteChannelInfo(1, DrugInfo.DrugName, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfo(2, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfo(8, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfo(6, DrugManuNo.ManuNo, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfo(5, String.Format("{0:yyyy-MM-dd}", DrugManuNo.EffDate.Length>=10? DrugManuNo.EffDate.Substring(0,10): DrugManuNo.EffDate), item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
if (item.BoardType == 35)
{
_portUtil.WindowName = "BindingChannelDialog";
await _portUtil.WriteChannelInfoMethod(1, DrugInfo.DrugName, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(3, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(4, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(5, item.EffDate, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(6, item.ManuNo, item.DrawerNo, item.ColNo);
await Task.Delay(200);
await _portUtil.ShowContentMethod(item.DrawerNo, item.ColNo);
}
//_screenUtil.SetStockInfo(item, 1);
});
GetChannelsByDrawerNo();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选库位中无可绑定库位【库位还存在药品】");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("请选择库位需要绑定的药品及批次信息");
}
}
});
}
public DelegateCommand RemoveBinding
{
get => new DelegateCommand(async () =>
{
var SelectChannels = Channels.FindAll(item => item.IsSelected && item.Quantity == 0);
var c = SelectChannels.Count;
if (c > 0)
{
SelectChannels.ForEach(async item =>
{
item.DrugId = null;
item.ManuNo = null;
item.EffDate = null;
item.DrugInfo = null;
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId, it.ManuNo, it.EffDate }).ExecuteCommand();
if (item.BoardType == 5)
{
// 清除显示屏库位信息
_portUtil.ClearContent(item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
if(item.BoardType == 35)
{
_portUtil.ClearContentMethod(item.DrawerNo, item.ColNo);
await Task.Delay(300);
_portUtil.ShowContentMethod(item.DrawerNo,item.ColNo);
}
//_screenUtil.SetStockInfo(item, 1);
});
GetChannelsByDrawerNo();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选库位中无可解绑库位【库位还存在药品】");
}
});
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public bool KeepAlive => false;
string message = string.Empty;
private void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "BindingChannelDialog")
{
switch (msg.EventType)
{
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
if (message != msg.Message)
{
message = msg.Message;
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
break;
}
}
}
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";
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();
}
}
}

View File

@ -0,0 +1,494 @@
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.Tasks;
using System.Windows.Media;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using System.Threading;
using System.Reflection.Metadata.Ecma335;
namespace DM_Weight.ViewModels
{
public class BindingChannelNewDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
public static BindingChannelNewDialogViewModel vm;
public string Title => "库位绑定";
public event Action<IDialogResult> RequestClose;
private int _drawerNo = 0;
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);
}
IEventAggregator _eventAggregator;
PortUtil _portUtil;
//ScreenUtil _screenUtil;
public BindingChannelNewDialogViewModel(IEventAggregator eventAggregator, PortUtil portUtil//, ScreenUtil screenUtil
)
{
_eventAggregator = eventAggregator;
_portUtil = portUtil;
//_screenUtil = screenUtil;
vm = this;
}
public int DrawerNo
{
get => _drawerNo;
set
{
SetProperty(ref _drawerNo, value);
GetChannelsByDrawerNo();
}
}
private DrugInfo? _drugInfo;
public DrugInfo? DrugInfo
{
get => _drugInfo;
set
{
SetProperty(ref _drugInfo, value);
//if (_drugInfo != null)
//{
// DrugManuNos = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
//}
}
}
//拼音码对应药品实体
//private DrugInfo? _durgInfo_for_py;
//public DrugInfo? DrugInfo_Py
//{
// get => _durgInfo_for_py;
// set
// {
// SetProperty(ref _durgInfo_for_py, value);
// if (_durgInfo_for_py != null)
// {
// DrugInfos = GetDrugByDrugPY(_durgInfo_for_py.PyCode);
// }
// else
// {
// DrugInfos = GetDrugByDrugPY("");
// }
// }
//}
//#region 根据药品拼音码查询药品名称
//private List<DrugInfo> GetDrugByDrugPY(string pycode)
//{
// List<DrugInfo> DrugList = null;
// if (!string.IsNullOrEmpty(pycode))
// {
// DrugList = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).Where(di => di.PyCode.Contains(pycode)).OrderBy(di => di.DrugId).ToList();
// }
// else
// {
// DrugList = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
// }
// return DrugList;
//}
//private List<DrugInfo>? _drugInfos_py;
//public List<DrugInfo>? DrugInfos_PY
//{
// get => _drugInfos_py;
// set => SetProperty(ref _drugInfos_py, value);
//}
//#endregion 根据药品拼音码查询药品名称
private List<DrugInfo>? _drugInfos;
public List<DrugInfo>? DrugInfos
{
get => _drugInfos;
set => SetProperty(ref _drugInfos, value);
}
//private DrugManuNo? _drugManuNo;
//public DrugManuNo? DrugManuNo
//{
// get => _drugManuNo;
// set => SetProperty(ref _drugManuNo, value);
//}
//private List<DrugManuNo>? _drugManuNos;
//public List<DrugManuNo>? DrugManuNos
//{
// get => _drugManuNos;
// set => SetProperty(ref _drugManuNos, value);
//}
private List<ChannelList>? _channels;
public List<ChannelList>? Channels
{
get => _channels;
set => SetProperty(ref _channels, 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);
GetChannelsByDrawerNo();
}
}
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);
}
}
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
//DrugInfos_PY = list;
}
private void GetChannelsByDrawerNo()
{
Channels?.Clear();
int totalCount = 0;
var list = SqlSugarHelper.Db.Queryable<ChannelList>()
.Includes<DrugInfo>(cl => cl.Drug)
//.Includes<ChannelStock>(cs => cs.channelStock)
.WhereIF(DrawerNo > 0, cl => cl.DrawerNo == DrawerNo)
.Where(cl => cl.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.OrderBy(cl => cl.DrawerNo)
.OrderBy(cl => cl.ColNo)
.ToPageList(PageNum, PageSize, ref totalCount);
Channels = list;
TotalCount = totalCount;
}
public void OnDialogOpened(IDialogParameters parameters)
{
if (parameters.ContainsKey("DrawerNo"))
{
DrawerNo = parameters.GetValue<int>("DrawerNo");
}
GetAllDrugInfos();
GetChannelsByDrawerNo();
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
}
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
GetChannelsByDrawerNo();
});
}
public DelegateCommand BindingDrug
{
get => new DelegateCommand(async () =>
{
var SelectChannels = Channels.FindAll(item => item.IsSelected);
if (SelectChannels.All(it => it.DrawerType != 1))
{
if (SelectChannels.Count == 1)
{
if (DrugInfo != null)
{
int count = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cs => cs.DrugId.Equals(DrugInfo.DrugId.ToString())).Where(cs => cs.DrawerType != 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Count();
if (count == 0)
{
var item = SelectChannels[0];
if (item.DrugId == null || !DrugInfo.DrugId.ToString().Equals(item.DrugId))
{
item.PosNo = 0;
}
item.DrugId = DrugInfo.DrugId.ToString();
item.DrugSpec= DrugInfo.DrugSpec.ToString();
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId, it.PosNo,it.DrugSpec }).ExecuteCommand();
GetChannelsByDrawerNo();
if (item.BoardType == 5)
{
_portUtil.WindowName = "BindingChannelDialog";
// 向显示屏写入库位信息
_portUtil.WriteChannelInfo(1, DrugInfo.DrugName, item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.WriteChannelInfo(2, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.WriteChannelInfo(8, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
await Task.Delay(200);
//_portUtil.WriteChannelInfo(6, DrugManuNo.EffDate==null?"": DrugManuNo.EffDate, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
//_portUtil.WriteChannelInfo(5, DrugManuNo.ManuNo, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
if(item.BoardType==35)
{
_portUtil.ClearContentMethod(item.DrawerNo,item.ColNo);
}
//_screenUtil.SetStockInfo(item, 1);
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue($"药品【{DrugInfo.DrugName}】已经绑定了回收库位不可再次绑定");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("请选择库位需要绑定的药品信息");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("每种药品只能绑定一个回收库位");
}
}
else
{
//if (DrugInfo != null && DrugManuNo != null)
//{
var c = SelectChannels.Count;
if (c > 0)
{
for (int i = 0; i < SelectChannels.Count; i++)
{
var item = SelectChannels[i];
var channelStock = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.Chnguid == item.Id&&cs.Quantity>0).ToList();
if(channelStock.Count>0)
{
//有库存,不能解绑
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue($"库位{item.DrawerNo}-{item.ColNo}中还存在药品,不能绑定其他药品");
continue;
}
if (item.DrugId == null || !DrugInfo.DrugId.ToString().Equals(item.DrugId))
{
item.PosNo = 0;
}
item.DrugId = DrugInfo.DrugId.ToString();
//item.ManuNo = DrugManuNo.ManuNo;
item.Drug = DrugInfo;
item.DrugSpec = DrugInfo.DrugSpec.ToString();
//item.EffDate = String.Format("{0:yyyy-MM-dd}", DrugManuNo.EffDate);
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId, it.PosNo,it.DrugSpec }).ExecuteCommand();
if (item.BoardType == 5)
{
_portUtil.WindowName = "BindingChannelDialog";
// 向显示屏写入库位信息
_portUtil.WriteChannelInfo(1, DrugInfo.DrugName, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
Thread.Sleep(200);
_portUtil.WriteChannelInfo(2, DrugInfo.DrugSpec, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
Thread.Sleep(200);
_portUtil.WriteChannelInfo(8, DrugInfo.Manufactory, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
Thread.Sleep(200);
//_portUtil.WriteChannelInfo(6, DrugManuNo.ManuNo, item.DrawerNo, item.ColNo);
//await Task.Delay(200);
//Thread.Sleep(200);
//_portUtil.WriteChannelInfo(5, String.Format("{0:yyyy-MM-dd}", DrugManuNo.EffDate), item.DrawerNo, item.ColNo);
////await Task.Delay(200);
//Thread.Sleep(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
if (item.BoardType == 35)
{
_portUtil.WindowName = "BindingChannelDialog";
_portUtil.ClearContentMethod(item.DrawerNo,item.ColNo);
}
}
GetChannelsByDrawerNo();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选库位中无可绑定库位【库位还存在药品】");
}
//}
//else
//{
// SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
// SnackbarMessageQueue.Enqueue("请选择库位需要绑定的药品及批次信息");
//}
}
});
}
public DelegateCommand RemoveBinding
{
get => new DelegateCommand(async () =>
{
var SelectChannels = Channels.FindAll(item => item.IsSelected && item.DrugId != null);
var c = SelectChannels.Count;
if (c > 0)
{
SelectChannels.ForEach(async item =>
{
var channelStock = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.Chnguid == item.Id && cs.Quantity > 0).ToList();
if (channelStock.Count > 0)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选库位中无可解绑药品【库位还存在药品】");
//该药品下的批次还有库存则不能解绑
return;
}
item.DrugId = null;
//item.ManuNo = null;
//item.EffDate = null;
item.Drug = null;
item.DrugSpec = null;
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId,it.DrugSpec }).ExecuteCommand();
if (item.BoardType == 5)
{
// 清除显示屏库位信息
_portUtil.ClearContent(item.DrawerNo, item.ColNo);
await Task.Delay(200);
_portUtil.ShowContent(item.DrawerNo, item.ColNo);
}
//_screenUtil.SetStockInfo(item, 1);
});
GetChannelsByDrawerNo();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选库位中无可解绑药品");
}
});
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public bool KeepAlive => false;
string message = string.Empty;
private void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "BindingChannelDialog")
{
switch (msg.EventType)
{
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
if (message != msg.Message)
{
message = msg.Message;
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
break;
}
}
}
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";
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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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)
{
}
}
}

View File

@ -0,0 +1,336 @@
using log4net;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Speech.Synthesis;
using System.Text;
using System.Threading.Tasks;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
namespace DM_Weight.ViewModels
{
public class CheckStockWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(CheckStockWindowViewModel));
private List<ChannelStock> _channelStocks = new();
public List<ChannelStock> ChannelStocks
{
get => _channelStocks;
set => SetProperty(ref _channelStocks, value);
}
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public CheckStockWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "CheckStockWindow")
{
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)
{
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;
public int Status { get => _status; set => SetProperty(ref _status, value); }
private int _drawerNo = 1;
public int DrawerNo
{
get => _drawerNo;
set => SetProperty(ref _drawerNo, value);
}
private bool _is8Drawer = true;
public bool Is8Drawer { get => _is8Drawer; set => SetProperty(ref _is8Drawer, value); }
private bool _is16Drawer = false;
public bool Is16Drawer { get => _is16Drawer; set => SetProperty(ref _is16Drawer, value); }
private bool _is17Drawer = false;
public bool Is17Drawer { get => _is17Drawer; set => SetProperty(ref _is17Drawer, value); }
public DelegateCommand<string> UpdateDrawerNo
{
get => new DelegateCommand<string>((DrawerNo) =>
{
this.DrawerNo = Convert.ToInt32(DrawerNo);
RequestData();
}, (DrawerNo) => Status == 0
);
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(() =>
{
Status = 1;
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
_portUtil.WindowName = "CheckStockWindow";
_portUtil.Operate = true;
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}, () => Status == 0).ObservesProperty(() => Status);
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
{
get => new DelegateCommand(async() =>
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.FindAll(it => it.Quantity != it.CheckQuantity).ToList();
if (record.Count > 0)
{
string InvoiceId = "CHECK_" + 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.CheckQuantity,
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.CheckQuantity - it.Quantity,
Type = 4,
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity),
//CheckQuantity = it.CheckQuantity
}).ExecuteCommand();
logger.Info($"库存盘点->库位【{it.DrawerNo}-{it.ColNo}】药品【{it.DrugInfo.DrugName}】盘点前库存【{it.Quantity}】,更改后【{it.CheckQuantity}】");
}
return true;
});
if (f.Data)
{
// 更新屏显库存
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
{
singleChannels.ForEach(async it =>
{
await Task.Delay(200);
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.CheckQuantity);
});
}
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 35)
{
for (int i = 0; i < singleChannels.Count; i++)
{
await Task.Delay(200);
await _portUtil.WriteChannelInfoMethod(2, (singleChannels[i].Quantity + singleChannels[i].AddQuantity).ToString(), singleChannels[i].DrawerNo, singleChannels[i].ColNo);
await Task.Delay(200);
await _portUtil.ShowContentMethod(singleChannels[i].DrawerNo, singleChannels[i].ColNo);
}
}
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);
Status = 0;
_isFinishClick = false;
}
}, () => Status == 3 && !_isFinishClick).ObservesProperty(() => Status);
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
public bool KeepAlive => false;
public void FindDrawerCount()
{
int count = 0;
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();
}
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();
}
Is8Drawer = count < 9;
Is16Drawer = count >= 16;
Is17Drawer = count > 16;
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
public void RequestData()
{
List<ChannelStock> queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes(cs => cs.DrugInfo)
.Where(cs => cs.DrawerNo == DrawerNo)
.Where(cs => cs.DrugId != null)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.OrderBy(cs => cs.ColNo)
.ToList();
ChannelStocks = queryData.Select(it => { it.CheckQuantity = it.Quantity; return it; }).ToList();
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
FindDrawerCount();
RequestData();
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
}
}

View File

@ -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));
});
}
}
}

View File

@ -0,0 +1,291 @@
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()
{
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)
{
}
}
}

View File

@ -0,0 +1,6 @@
namespace DM_Weight.ViewModels
{
internal class CollectionViewGroupInternal
{
}
}

Some files were not shown because too many files have changed in this diff Show More