Compare commits

...

77 Commits

Author SHA1 Message Date
马巧 ed6c98aa3b 更改数据库连接 2025-07-16 11:17:05 +08:00
马巧 3fdbb790ba 手动录入报表信息时修改药品弹窗添加药品查询 2025-07-04 16:48:43 +08:00
马巧 9dfb1a4363 报表数据录入页面添加修改药品功能,页面录入实发、实物、空安瓿三个值一样,要求写一个即可避免他们重复输入。 2025-07-02 16:15:16 +08:00
maqiao fb23c500fc 调整录入报表信息中行高度 2025-05-30 15:03:49 +08:00
maqiao f4de7f9529 添加报表信息录入及报表导出 2025-05-27 10:27:47 +08:00
maqiao 9c3da430ce 修改配置文件中冰箱串口号 2025-05-12 11:33:22 +08:00
maqiao 8aaee587fa 冰箱设置页面读配置文件信息修改 2025-03-14 09:45:33 +08:00
maqiao 30c807ecd5 冰箱超温度报警 2025-03-13 11:13:12 +08:00
maqiao 5708dc0675 冰箱报警由提示改为弹窗,修改冰箱设置页面打开冰箱则调用Home中定时查温度 2025-03-13 10:14:36 +08:00
maqiao 34c6cbb69c 冰箱超温度范围报警提示 2025-03-12 17:47:00 +08:00
maqiao 29723e1054 每隔1分钟自动获取冰箱温度,添加冰箱设置页面,温度可设置小数,保留一位小数 2025-01-14 15:37:05 +08:00
maqiao 83bbf8c453 设置中根据角色权限选择可操作的抽屉 2025-01-08 09:28:06 +08:00
maqiao 98e770854e 关抽屉后去掉完成与取消按钮。自动退出通过promise方法 2024-12-31 14:48:57 +08:00
maqiao 8478ac3626 抽屉加药、抽屉取药去掉完成与取消按钮 2024-12-28 12:56:13 +08:00
maqiao 1059dc01b0 去掉录像机相关 2024-12-22 11:23:57 +08:00
maqiao c7a3ef80ad 未关闭抽屉添加提示音,退出时未关闭抽屉菜单显示不对修改 2024-12-22 09:22:37 +08:00
maqiao 5793c1ffcf 1-3层所有人能开 2024-11-27 11:02:52 +08:00
maqiao 2368979203 修改湘张毒麻柜machine_id为DM3 2024-11-19 13:56:06 +08:00
maqiao 27ee4df946 交接柜加药完成更新交接柜补药数据状态为已取药未入库 2024-11-19 11:48:27 +08:00
maqiao 6edd7871dc 交接柜加药完成更新交接柜补药数据状态为已取药未入库 2024-11-19 11:47:23 +08:00
maqiao 684c522075 交接柜加药添加状态标识:已取药未入库、未取药 2024-11-18 12:59:31 +08:00
maqiao 770e82829c 角色页面取”多处方取药“配置文件值有误,修改错误 2024-11-15 10:18:55 +08:00
maqiao 991d1c27d3 添加多次启动程序日志,修改指纹机ip为50 2024-11-15 08:41:29 +08:00
maqiao a5994c85a4 添加不可重复启动软件限制 2024-11-14 14:27:39 +08:00
maqiao 619794a192 修改多批次加药页面及多批次药品绑定页面 2024-11-14 14:01:06 +08:00
maqiao e14bb8f767 点退出按钮页面跳转修改 2024-11-05 15:52:25 +08:00
maqiao 10c3fc4b6e 优化菜单 2024-11-05 15:37:54 +08:00
maqiao 9e07f293a0 多批次页面添加药品厂家信息 2024-11-05 11:21:04 +08:00
maqiao 65d425b66c 绑定药品查询药品时添加厂家信息 2024-11-05 11:01:59 +08:00
maqiao df015e2bf8 修改app.config连接数据库 2024-11-02 16:33:21 +08:00
maqiao 289a26f341 绑定库位页面中药品下拉添加批号及厂家信息 2024-11-02 15:32:50 +08:00
maqiao f477287bc7 修改app.config连接数据库 2024-10-31 17:15:40 +08:00
maqiao c23428f5b8 交接柜加药页面添加选中药箱号行则选中反选复选框 2024-10-31 15:33:28 +08:00
maqiao dda2c23a45 app.config中设置“启用channel_list记录库位信息”值为1 2024-10-28 11:27:53 +08:00
maqiao 1547b03914 去掉冰箱设备页面功能 2024-09-26 10:34:28 +08:00
maqiao a94eaeed2e 添加账册报表 2024-09-26 08:45:20 +08:00
maqiao 66c93b7d22 添加注射剂使用报表,去掉盘点时修改数量功能 2024-09-24 16:43:17 +08:00
maqiao 748e5667c1 修改报表字段及报表中returntime类型为string 2024-09-20 15:45:48 +08:00
maqiao a07091ea83 报表中发药时间精确到分钟 2024-09-20 14:32:47 +08:00
maqiao 0fedeb7f47 添加RejectionReport实体,并在完成补药时写表数据 2024-09-20 13:57:14 +08:00
maqiao 44e12e8873 添加 注射剂报表 2024-09-20 09:28:41 +08:00
maqiao 991e353990 湘乡报表 2024-09-18 08:48:01 +08:00
maqiao fa7f9cc2ea 添加权限:2、管理员能开所有抽屉,留1-2层所有人能开,其他6层管理员才能开 2024-09-12 18:11:28 +08:00
maqiao 7bb4fb8fcc 修改“导出回收销毁记录”为“导出回收取出记录” 2024-08-15 15:36:34 +08:00
maqiao 367923e19f 给交接柜补药时出库记录dm_machine_record表status设为2,等交接柜做处方核销时再修改 2024-08-14 09:41:20 +08:00
maqiao c20686d2c3 修改还空瓶 2024-08-14 09:13:03 +08:00
maqiao 427b249429 修改销毁空瓶为取出空瓶 2024-08-13 15:50:29 +08:00
maqiao 61079319ea 账册查询的account_book_g2表无而查DM5的数据 2024-08-12 18:06:50 +08:00
maqiao 12953fa528 账册查询添加DM5查询条件 2024-08-12 17:41:21 +08:00
maqiao 386befcade drug_id类型修改为string 添加交接柜补药 2024-08-08 16:54:03 +08:00
maqiao 44fc240bd4 交接柜补药 2024-08-08 08:47:17 +08:00
maqiao ac3a1f53c4 添加修改用户时同步用户到交接柜数据 2024-08-07 13:10:32 +08:00
maqiao d05787f2c7 添加用户时添加交接柜DM5用户 2024-08-07 10:31:25 +08:00
maqiao 469b8aebe1 添加交接柜补药页面 2024-08-01 13:42:50 +08:00
maqiao 0bc3542281 修改空瓶销毁为空瓶取出,加开抽屉操作
加根据处方取药品,取出待取处方下的所有药品
2024-07-31 14:28:22 +08:00
maqiao 5f990b7fa4 药品信息页面添加校验及药品基数信息 2024-07-25 15:58:04 +08:00
maqiao eed6d5d0e9 账册添加精一、精二药品类型查询 2024-07-18 09:46:01 +08:00
maqiao f1d784a099 修改连接数据库为xiangxiang 2024-07-17 10:28:24 +08:00
maqiao f9fd4f4dd9 CollectDrug去掉Applyid的IsPrimaryKey=true 2024-07-17 10:09:31 +08:00
maqiao 0d2d10deab 状态转换添加 //确认核销、刷新
录像机添加监测日志
channel_stock添加dm_machine_record表id值
drug_info表添加药品类型字段
machinerecord添加已核销数量、核销数量
orderinfo添加machineId
添加SurgicalSchedule实体
添加SurgicalScheduleDetail实体
添加手术核销、还空瓶销毁页面
2024-07-17 10:02:57 +08:00
maqiao 17a6ddd0da 冰箱设置根据配置文件显示 2024-07-08 11:44:31 +08:00
maqiao 6fd35e569f Merge branch 'XiangTan_MaZuiKe' of http://27.128.204.251:9999/maqiao/HKC into XiangTan_MaZuiKe 2024-07-06 15:17:29 +08:00
maqiao ad5f4d86bb 配置文件添加是否有冰箱抽屉,home页面根据该值显示与隐藏 查看冰箱温度按钮 2024-07-06 15:17:15 +08:00
maqiao 702ef1d0ce revert 07db386649
revert 添加35药盒智能标签类型并添加相关类型写标签信息
2024-07-06 15:15:44 +08:00
maqiao 07db386649 添加35药盒智能标签类型并添加相关类型写标签信息 2024-07-06 13:21:51 +08:00
maqiao 8fe17f7517 修改凌晨生成的总结存数据时,如果没有数据则写入一条。(凌晨生成数据时没有绑定库位的则不会生成,当天绑定库位且做库位操作时需要手动写入一条日结存、总结存数据) 2024-07-06 10:25:01 +08:00
maqiao 3a279d73a0 冰箱指令根据地址选择发送指令信息 2024-07-02 16:29:00 +08:00
maqiao cb09e98cbd 请领入库页面选择请领单后没有药品id,添加选中行的药品id 2024-07-02 15:46:27 +08:00
maqiao 3a12e3bfee 修改请领列表状态查询条件 2024-07-02 11:18:18 +08:00
maqiao 1a33934c45 修改请领列表根据machine_id条件查询 2024-06-27 17:28:33 +08:00
maqiao 33dbcb9b6f 添加请领入库 2024-06-27 17:15:09 +08:00
maqiao 4654266085 导出账册中查询修改sql修改;请领列表页面查询条件修改(不根据machin_id,要根据部门名称,请领列表里的machin_id不是申请方的) 2024-06-27 16:56:02 +08:00
maqiao e5f3877af5 修改页面中点击按钮显示冰箱温度,添加两个冰箱设置 2024-06-27 16:49:04 +08:00
maqiao 6252aca09a 修改导出报表连接数据库 2024-06-25 16:07:30 +08:00
maqiao 9eeae56e0e 湘谭-麻醉科-8层都是物理隔断其中一层需要冷藏功能 2024-06-25 12:53:55 +08:00
maqiao 46c767b3d0 湘潭-手术麻醉科-8层都是物理隔断,其中一层需要冷藏功能 2024-06-24 17:30:26 +08:00
maqiao 65cd5f2460 添加药品请领菜单 2024-05-29 08:37:19 +08:00
174 changed files with 23974 additions and 704 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
}
}

View File

@ -5,16 +5,42 @@ VisualStudioVersion = 17.3.32922.545
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DM_Weight", "DM_Weight\DM_Weight.csproj", "{439FA76B-F874-40DB-BAF2-E3647CD55B10}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DM_Weight.Commons", "DM_Weight.Commons\DM_Weight.Commons.csproj", "{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.Build.0 = Release|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x64.ActiveCfg = Debug|x64
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x64.Build.0 = Debug|x64
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x86.ActiveCfg = Debug|x86
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x86.Build.0 = Debug|x86
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.Build.0 = Debug|Any CPU
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.ActiveCfg = Release|x64
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.Build.0 = Release|x64
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x86.ActiveCfg = Debug|x86
{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x86.Build.0 = Debug|x86
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x64.ActiveCfg = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x64.Build.0 = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x86.ActiveCfg = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x86.Build.0 = Debug|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|Any CPU.Build.0 = Release|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x64.ActiveCfg = Release|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x64.Build.0 = Release|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x86.ActiveCfg = Release|Any CPU
{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -3,7 +3,7 @@
<connectionStrings>
<!-- 数据库连接字符串 -->
<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
<add name="database" connectionString="server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=root" />
<add name="database" connectionString="server=192.168.50.84;port=3306;database=xiangtanTest;userid=root;password=root" />
</connectionStrings>
<!--<runtime>
--><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
@ -12,19 +12,37 @@
<appSettings>
<!-- 设备id -->
<add key="machineId" value="DM1" />
<add key="machineId" value="DM3" />
<!--交接柜设备id-->
<add key="jj_machineId" value="DM5" />
<!--请领药库-->
<add key="colloctedId" value="住院,DM2,门诊,DM22" />
<!-- 供应单位 -->
<add key="supplierDept" value="药库" />
<!-- 领用部门 -->
<add key="receiveDept" value="麻精药房" />
<!--部门-->
<add key="department" value="急诊药房"/>
<!--登录人 0全部用户可登录1仅当班人、审核人可登录-->
<add key="loginUser" value="0"/>
<!--2023/7/13 药房代码 有则写无则空 -->
<add key="storage" value="" />
<add key="storage" value="159" />
<!-- 登录模式 1单人登录2双人登录 -->
<add key="loginMode" value="1" />
<!-- 登录顺序,指定先登录的人的名称有效值只有在登录模式等于2时才会生效 发药人【operator】审核人【reviewer】 -->
<add key="firstLogin" value="operator" />
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="1" />
<add key="returnDrugMode" value="2" />
<!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="0"/>
<add key="gridConnectionString" value="MYSQL; Database=hkcdb; Password=root; Port=3306; Server=127.0.0.1; User=root;"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="0"/>
<add key="gridConnectionString" value="MYSQL; Database=xiangtanTest; Password=root; Port=3306; Server=192.168.50.84; User=root;"/>
<!-- 查询处方是orderNo还是orderGroupNo -->
<add key="OrderNoName" value="orderNo" />
<!-- 后门耗材板地址 没有则填写0-->
@ -41,6 +59,37 @@
<add key="CanBusPortPath" value="COM3" />
<!-- 条码枪串口的串口号 -->
<add key="ScanCodePortPath" value="COM8" />
<!--是否有冰箱抽屉0无1有一个2两个-->
<add key="hasFridge" value="1"/>
<!-- 冰箱的串口号 -->
<add key="FridgePortPath" value="COM12" />
<!--冰箱抽屉温度区间-->
<add key="temperatureRange" value="2-8"/>
<!--冰箱抽屉温度-->
<add key="temperatureValue" value="3.2"/>
<!--温度查询定时执行时间-->
<add key="Interval" value="60000"/>
<!--冰箱状态1关闭0打开-->
<add key="FridgeState" value="1"/>
<!--报警状态1关闭0打开-->
<add key="AlarmState" value="1"/>
<!--冰箱不在区间超时时间(超过指定的时间仍不在区间则提示)单位分-->
<add key="OutRangeTime" value="20"/>
<!--冰箱是否异常状态0正常1异常--><!--
<add key="FridgeworkingState" value="0"/>-->
<!--冰箱2抽屉温度区间-->
<add key="temperatureRange2" value="2-8"/>
<!--冰箱2状态1关闭0打开-->
<add key="FridgeState2" value="0"/>
<!--冰箱2报警状态1关闭0打开-->
<add key="AlarmState2" value="0"/>
<!-- 抽屉串口的串口号 --><!--
<add key="DrawerPortPath" value="COM11" />
--><!-- can总线串口的串口号 --><!--
@ -54,7 +103,7 @@
<!-- 指纹机号码 -->
<add key="machineNumber" value="1"/>
<!-- 指纹机ip -->
<add key="fingerIp" value="192.168.1.201"/>
<add key="fingerIp" value="192.168.50.201"/>
<!-- 多处方取药 0:不启用 1启用-->
<add key="MultiOrder" value="1"/>
@ -71,5 +120,8 @@
<!--海康威视密码-->
<add key="HIKPassword" value="HKC123456"/>
<!--报表药品9种(写全称,与数据库中完全一致,单引号引起来,逗号分隔)-->
<add key="DrugNames" value="'9437_487','1472_262','1564_487','6874_2534','8353_487'"/>
</appSettings>
</configuration>

View File

@ -6,7 +6,7 @@
d1p1:Ignorable="d"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:local="clr-namespace:DM_Weight"
xmlns:prism="http://prismlibrary.com/">
xmlns:prism="http://prismlibrary.com/" Startup="PrismApplication_Startup">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View File

@ -23,7 +23,9 @@ using log4net;
using System.Windows.Interop;
using System.Windows.Threading;
using System.Timers;
using DM_Weight.HIKVISION;
using System.Diagnostics;
using System.Runtime.InteropServices;
using log4net.Repository.Hierarchy;
namespace DM_Weight
{
@ -44,6 +46,7 @@ namespace DM_Weight
protected override Window CreateShell()
{
logger.Info("进入APP-CreateShell");
//UI线程未捕获异常处理事件
this.DispatcherUnhandledException += OnDispatcherUnhandledException;
//Task线程内未捕获异常处理事件
@ -51,6 +54,7 @@ namespace DM_Weight
//多线程异常
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
logger.Info("进入APP-CreateShell-2");
return Container.Resolve<MainWindow>();
}
@ -86,6 +90,8 @@ namespace DM_Weight
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
logger.Info("进入APP-RegisterTypes");
// 注入日志
XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
//containerRegistry.RegisterInstance<ILog>(LogManager.GetLogger(""));
@ -95,9 +101,9 @@ namespace DM_Weight
// 指纹机工具
containerRegistry.RegisterSingleton<FingerprintUtil>();
// 组态屏工具
containerRegistry.RegisterSingleton<ScreenUtil>();
//containerRegistry.RegisterSingleton<ScreenUtil>();
// 录像机
containerRegistry.RegisterSingleton<CHKFunction>();
//containerRegistry.RegisterSingleton<CHKFunction>();
containerRegistry.Register<IDialogService, MaterialDialogService>();
@ -123,6 +129,17 @@ namespace DM_Weight
#region
// 处方取药页面
containerRegistry.RegisterForNavigation<OrderTakeDrugWindow, OrderTakeDrugWindowViewModel>();
containerRegistry.RegisterForNavigation<OrderTakeDrugNewWindow, OrderTakeDrugNewWindowViewModel>();
containerRegistry.RegisterForNavigation<OrderTakeAllDrugDialog, OrderTakeAllDrugDialogViewModel>();
containerRegistry.RegisterForNavigation<OrderTakeNewDialog, OrderTakeNewDialogViewModel>();
//交接柜补药
containerRegistry.RegisterForNavigation<AddToJiaoJieWindow, AddToJiaoJieWindowViewModel>();
//交接柜补药页面弹窗
containerRegistry.RegisterDialog<AddToJiaoJieDialog>();
containerRegistry.RegisterForNavigation<AddToJiaoJieDialog, AddToJiaoJieDialogViewModel>();
// 处方取药模态框
containerRegistry.RegisterDialog<OrderTakeDialog>();
containerRegistry.RegisterForNavigation<OrderTakeDialog, OrderTakeDialogViewModel>();
@ -144,6 +161,14 @@ namespace DM_Weight
containerRegistry.RegisterDialog<MultiOrderTakeDialog>();
containerRegistry.RegisterForNavigation<MultiOrderTakeDialog,MultiOrderTakeDialogViewModel>();
//手术排程
containerRegistry.RegisterForNavigation<SurgeryTakeWindow, SurgeryTakeWindowViewModel>();
containerRegistry.RegisterDialog<SurgeryTakeDialog>();
containerRegistry.RegisterForNavigation<SurgeryTakeDialog, SurgeryTakeDialogViewModel>();
containerRegistry.RegisterDialog<AddSurgeryDialog>();
containerRegistry.RegisterForNavigation<AddSurgeryDialog, AddSurgeryDialogViewModel>();
#endregion
#region
@ -162,6 +187,17 @@ namespace DM_Weight
containerRegistry.RegisterForNavigation<SelfAddDialog, SelfAddDialogViewModel>();
//多批次抽屉加药
containerRegistry.RegisterForNavigation<AddDrugControl, AddDrugControlViewModel>();
//药品请领
containerRegistry.RegisterForNavigation<CollectDrugWindow, CollectDrugWindowViewModel>();
// 药品请领模态框
containerRegistry.RegisterDialog<CollectDrugDialog>();
containerRegistry.RegisterForNavigation<CollectDrugDialog, CollectDrugDialogViewModel>();
//请领列表
containerRegistry.RegisterForNavigation<ApplyListWindow, ApplyListWindowViewModel>();
//请领入库
containerRegistry.RegisterForNavigation<ApplyInStockWindow, ApplyInStockWindowViewModel>();
#endregion
#region
@ -178,9 +214,18 @@ namespace DM_Weight
containerRegistry.RegisterForNavigation<OrderReturnDialog, OrderReturnDialogViewModel>();
// 还空瓶页面
containerRegistry.RegisterForNavigation<ReturnEmptyWindow, ReturnEmptyWindowViewModel>();
//空瓶销毁页面
containerRegistry.RegisterForNavigation<ReturnEmptyDestoryWindow, ReturnEmptyDestoryWindowViewModel>();
// 归还空瓶模态框
containerRegistry.RegisterDialog<ReturnEmptyDialog>();
containerRegistry.RegisterForNavigation<ReturnEmptyDialog, ReturnEmptyDialogViewModel>();
// 空瓶销毁模态框
containerRegistry.RegisterDialog<DestoryEmptyDialog>();
containerRegistry.RegisterForNavigation<DestoryEmptyDialog, DestoryEmptyDialogViewModel>();
#endregion
#region
@ -196,6 +241,16 @@ namespace DM_Weight
// 药品列表页面
containerRegistry.RegisterForNavigation<DrugListWindow, DrugListWindowViewModel>();
//交接班记录
containerRegistry.RegisterForNavigation<ChangeShiftsListWindow, ChangeShiftsListWindowViewModel>();
//交接班弹窗
containerRegistry.RegisterDialog<ChangeShiftsDialog>();
containerRegistry.RegisterForNavigation<ChangeShiftsDialog, ChangeShiftsDialogViewModel>();
containerRegistry.RegisterForNavigation<AccountWindow,AccountWindowViewModel>();
//报表信息录入
containerRegistry.RegisterForNavigation<AddReportDate, AddReportDateViewModel>();
#endregion
#region
@ -210,6 +265,12 @@ namespace DM_Weight
containerRegistry.RegisterForNavigation<SettingWindow, SettingWindowViewModel>();
// 调试页面
containerRegistry.RegisterForNavigation<DebugWindow, DebugWindowViewModel>();
//主设置页面
containerRegistry.RegisterForNavigation<SettingMainWindow, SettingMainWindowViewModel>();
//两个冰箱抽屉设置页面
containerRegistry.RegisterForNavigation<FridgeWindow, FridgeWindowViewModel>();
//只有一个冰箱抽屉设置页面
containerRegistry.RegisterForNavigation<FridgeOnlyWindow, FridgeOnlyWindowViewModel>();
#endregion
@ -218,6 +279,52 @@ namespace DM_Weight
containerRegistry.RegisterForNavigation<ShowMessageDialog, ShowMessageDialogViewModel>();
containerRegistry.RegisterForNavigation<WarnDialog, WarnDialogViewModel>();
//报表修改药品
containerRegistry.RegisterDialog<ReportDrugNameDialog>();
containerRegistry.RegisterForNavigation<ReportDrugNameDialog, ReportDrugNameDialogViewModel>();
logger.Info("结束APP-RegisterTypes");
}
private void PrismApplication_Startup(object sender, StartupEventArgs e)
{
//获取欲启动程序名
string processName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
logger.Info($"欲启动程序名:{processName}");
//检查程序是否已经启动,已经启动则显示提示退出程序
if (System.Diagnostics.Process.GetProcessesByName(processName).Length > 1)
{
logger.Info($"系统在运行!");
//系统在运行
RaiseOtherProcess();
Application.Current.Shutdown();
return;
}
}
private static void RaiseOtherProcess()
{
Process proc = Process.GetCurrentProcess();
foreach (Process otherProc in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
{
if (proc.Id != otherProc.Id)
{
IntPtr hWnd = otherProc.MainWindowHandle;
if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, 9);
}
SetForegroundWindow(hWnd);
break;
}
}
}
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
}
}

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,68 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;
namespace DM_Weight.Common
{
//设置冰箱温度规则
public class TemperatureRangeRule : ValidationRule
{
//冰箱温度设置区间为取自配置文件2~8度
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
bool flag = false;
string tips = string.Empty;
try
{
string[] rang = value.ToString().Split('-');
if (rang.Length >= 2)
{
bool bSRange = float.TryParse(rang[0], out float sRange);
bool bERange = float.TryParse(rang[1], out float eRange);
if (bSRange && bERange)
{
string[] sList= sRange.ToString().Split('.');
string[] eList= eRange.ToString().Split(".");
if ((sList.Length > 1 && sList[1].Length > 1) || (eList.Length > 1 && eList[1].Length>1))
{
tips = "小数点后保留1位";
return new ValidationResult(flag, tips);
}
if ((sRange < 2 || eRange > 8||sRange>8||eRange<2))
{
tips = "温度区间设置2-8度请检查输入";
return new ValidationResult(flag, tips);
}
else
{
flag = true;
}
}
else
{
tips = "请输入正确的数值";
return new ValidationResult(flag, tips);
}
}
else
{
tips = "请输入正确的数值";
return new ValidationResult(flag, tips);
}
return new ValidationResult(flag, tips);
}
catch (Exception ex)
{
tips = $"校验异常{ex.ToString()}";
return new ValidationResult(flag, tips);
}
}
}
}

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

@ -64,7 +64,19 @@ namespace DM_Weight.Converter
//取消
if (parameter.ToString().Equals("CancelBtn"))
{
if (status > 0)
if (status ==3)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
//确认核销、刷新
if (parameter.ToString().Equals("ConfirmVsRefresh"))
{
if (status == 0)
{
return Visibility.Visible;
}

View File

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace DM_Weight.Converter
{
internal class StockStatusConverter : IValueConverter
{
//是否给交接柜补药已补药的则不可勾选未补药的可勾选以进行补药0未补1已补
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int status = int.Parse(value.ToString());
if (parameter.ToString() == "EnableState")
{
if (status == 0)
{
return true;
}
else
{
return false;
}
}
if(parameter.ToString()== "TextState")
{
if(status == 0)
{
return "未取药";
}
else
{
return "已取药待入库";
}
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -8,8 +8,16 @@
<PackageIcon></PackageIcon>
<Product>毒麻管理程序</Product>
<ApplicationIcon>Images\favicon.ico</ApplicationIcon>
<Platforms>AnyCPU;x86;x64</Platforms>
</PropertyGroup>
<ItemGroup>
<Compile Remove="HIKVISION\**" />
<EmbeddedResource Remove="HIKVISION\**" />
<None Remove="HIKVISION\**" />
<Page Remove="HIKVISION\**" />
</ItemGroup>
<ItemGroup>
<None Remove="Images\body-bg.jpg" />
<None Remove="Images\box-16.jpg" />
@ -70,6 +78,7 @@
<PackageReference Include="MaterialDesignThemes" Version="4.8.0" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
<PackageReference Include="Prism.Unity" Version="8.1.97" />
<PackageReference Include="SharpPromise" Version="1.7.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.67" />
<PackageReference Include="SuperSimpleTcp" Version="3.0.10" />
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
@ -93,9 +102,15 @@
<None Update="log4net.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\Account_Book_New.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\account_book_temp.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\changeShifts_temp.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\machine_log_check.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@ -108,9 +123,21 @@
<None Update="ReportTemp\machine_log_take.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\orderUse_template.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\ReturnEmptyDistory_template.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\stock_template.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\use_jiaojie.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="ReportTemp\use_jiaojie_New.grf">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
@ -120,7 +147,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="HIKVISION\" />
<ProjectReference Include="..\DM_Weight.Commons\DM_Weight.Commons.csproj" />
</ItemGroup>
</Project>

View File

@ -32,10 +32,10 @@ namespace DM_Weight.Finger
{
_eventAggregator = eventAggregator;
logger.Info($"进入构造器,开始连接指纹机");
Task.Run(() =>
{
// Task.Run(() =>
//{
ConnectionMain();
});
//});
}
public void ConnectionMain()

View File

@ -9,6 +9,7 @@ using System.Windows.Controls;
using System.Windows;
using DM_Weight.Port;
using log4net;
using System.Runtime.InteropServices;
namespace DM_Weight.HIKVISION
{
@ -24,19 +25,29 @@ namespace DM_Weight.HIKVISION
public CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo;
public CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo;
public CHCNetSDK.NET_DVR_TIME m_struTimeCfg;
private System.ComponentModel.Container components = null;
public CHKFunction()
{
logger.Info("CHKFunction");
HIKInit();
HIKLogin();
}
public bool HIKInit()
{
try
{
logger.Info("HIKInit");
m_bInitSDK = CHCNetSDK.NET_DVR_Init();
logger.Info($"HIKInit-{m_bInitSDK}");
if (m_bInitSDK == false)
{
//MessageBox.Show("NET_DVR_Init error!");
@ -48,11 +59,19 @@ namespace DM_Weight.HIKVISION
//保存SDK日志 To save the SDK log
CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
}
}
catch (Exception ex)
{
logger.Info($"HIKInit Exception:{ex.Message}");
}
return m_bInitSDK;
}
public int HIKLogin()
{
try
{
logger.Info("HIKLogin");
string ip = ReadApp.ReadAppSetting("HIKIP");
string port = ReadApp.ReadAppSetting("HIKPort");
string userName = ReadApp.ReadAppSetting("HIKUser");
@ -121,11 +140,20 @@ namespace DM_Weight.HIKVISION
}
HKUserId = -1;
}
}
catch (Exception ex)
{
logger.Info($"HIKLogin Exception:{ex.Message}");
}
return HKUserId;
}
public void HIKLoginOut()
{
try
{
if (m_lRealHandle >= 0)
{
bool stopRealPlay = CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
@ -141,21 +169,65 @@ namespace DM_Weight.HIKVISION
bool cleanUp = CHCNetSDK.NET_DVR_Cleanup();
logger.Info($"录像机NET_DVR_Cleanup接口返回{cleanUp}");
}
}
catch (Exception ex)
{
logger.Info($"HIKLoginOut Exception{ex.Message}");
}
}
public bool HIKStartDVRRecord()
{
bool isStart= CHCNetSDK.NET_DVR_StartDVRRecord(HKUserId, 0xffff, 0);
bool isStart = false;
try
{
isStart = CHCNetSDK.NET_DVR_StartDVRRecord(HKUserId, 0xffff, 0);
logger.Info($"录像机NET_DVR_StartDVRRecord接口返回{isStart}");
}
catch (Exception ex)
{
logger.Info($"HIKStartDVRRecord Exception{ex.Message}");
}
return isStart;
}
public bool HIKStopDVRRecord()
{
bool isStop = CHCNetSDK.NET_DVR_StopDVRRecord(HKUserId, 0xffff);
bool isStop = false;
try
{
isStop = CHCNetSDK.NET_DVR_StopDVRRecord(HKUserId, 0xffff);
logger.Info($"录像机NET_DVR_StopDVRRecord接口返回{isStop}");
}
catch (Exception ex)
{
logger.Info($"HIKStopDVRRecord Exception{ex.Message}");
}
return isStop;
}
public void HIK_DVR_TIME()
{
try
{
UInt32 dwReturn = 0;
Int32 nSize = Marshal.SizeOf(m_struTimeCfg);
IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
if (CHCNetSDK.NET_DVR_GetDVRConfig(HKUserId, CHCNetSDK.NET_DVR_GET_TIMECFG, -1, ptrTimeCfg, (UInt32)nSize, ref dwReturn))
{
m_struTimeCfg = (CHCNetSDK.NET_DVR_TIME)Marshal.PtrToStructure(ptrTimeCfg, typeof(CHCNetSDK.NET_DVR_TIME));
logger.Info($"录像机时间接口{Convert.ToString(m_struTimeCfg.dwYear)}- {Convert.ToString(m_struTimeCfg.dwMonth)}- {Convert.ToString(m_struTimeCfg.dwDay)}- {Convert.ToString(m_struTimeCfg.dwHour)}- {Convert.ToString(m_struTimeCfg.dwMinute)}- {Convert.ToString(m_struTimeCfg.dwSecond)}");
}
}
catch (Exception ex)
{
logger.Info($"HIK_DVR_TIME Exception{ex.Message}");
}
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>

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

@ -84,7 +84,7 @@ namespace DM_Weight.Models
[SugarColumn(ColumnName = "board_type")]
public int BoardType { get; set; }
/// <summary>
///
/// 用于标识是否给交接柜补药0未补1已补
/// 默认值: 1
///</summary>
[SugarColumn(ColumnName = "state")]
@ -196,5 +196,12 @@ namespace DM_Weight.Models
private string _drugSpec;
[SugarColumn(ColumnName = "drug_manu_no")]
public string DrugSpec { get=> _drugSpec;set=>SetProperty(ref _drugSpec, value); }
[SugarColumn(ColumnName = "yh_no")]
public string BelongUser
{
get; set;
}
}
}

View File

@ -73,6 +73,14 @@ namespace DM_Weight.Models
[SugarColumn(ColumnName = "quantity")]
public int Quantity { get; set; }
/// <summary>
///
/// 交接柜中库存基数
///</summary>
[SugarColumn(ColumnName = "check_quantity")]
public int BaseQuantity { get; set; }
/// <summary>
///
/// 默认值: 1
@ -101,7 +109,7 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)]
public string Location
{
get => DrawerNo + "-" + ColNo;
get => ColNo==0? DrawerNo + "号交接柜" : DrawerNo + "-" + ColNo;
}
private int _addQuantity = 0;
[SugarColumn(IsIgnore = true)]
@ -184,6 +192,15 @@ namespace DM_Weight.Models
private ChannelList? _channelList;
[Navigate(NavigateType.ManyToOne, nameof(Chnguid))]
public ChannelList ChannelLst { get => _channelList; set => SetProperty(ref _channelList, value); }
[SugarColumn(IsIgnore = true)]
public 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 Newtonsoft.Json;
using SqlSugar;
namespace DM_Weight.Models
{
/// <summary>
/// 处方、请领单中间表
/// </summary>
[SugarTable("order_apply")]
public class CollectDrug
{
/// <summary>
/// 是否选择
/// </summary>
[SugarColumn(IsIgnore =true)]
public bool IsSelected { get; set; }
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "Applyid")]
public int Applyid { get; set; }
/// <summary>
/// 药品请领单号
/// </summary>
[SugarColumn(ColumnName = "Drug_plase_id")]
public string DrugPleaseClaimId { get; set; }
/// 处方
/// </summary>
[SugarColumn(ColumnName = "OrderNo")]
public string OrderNo { get; set; }
/// <summary>
/// 药品ID
/// </summary>
[SugarColumn(ColumnName = "Drug_Id")]
public string DrugId { get; set; }
/// <summary>
/// 患者ID
/// </summary>
[SugarColumn(IsIgnore =true)]
public string PatientId { get; set; }
/// <summary>
/// 姓名
/// </summary>
[SugarColumn(IsIgnore = true)]
public string PName { get; set; }
/// <summary>
/// 性别
/// </summary>
[SugarColumn(IsIgnore = true)]
public string Sex { get; set; }
/// <summary>
/// 年龄
/// </summary>
[SugarColumn(IsIgnore = true)]
public string Age { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[SugarColumn(IsIgnore = true)]
public string IdNumber { get; set; }
/// <summary>
/// <summary>
/// 科室
/// </summary>
[SugarColumn(IsIgnore = true)]
public string DeptName { get; set; }
/// <summary>
/// 药品名称
/// </summary>
[SugarColumn(IsIgnore = true)]
public string DrugName { get;set; }
/// <summary>
/// 规格
/// </summary>
[SugarColumn(IsIgnore = true)]
public string DrugSpec { get; set; }
/// <summary>
/// 厂家
/// </summary>
[SugarColumn(IsIgnore = true)]
public string Manufactory { get; set; }
/// <summary>
/// 数量
/// </summary>
[SugarColumn(ColumnName = "Quantity")]
public int Quantity { get; set; }
[SugarColumn(ColumnName = "Createdate")]
public DateTime Createdate { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnName = "Status")]
public int Status { get; set; }
[SugarColumn(ColumnName = "Machine_id")]
public string MachineId { get; set; }
[SugarColumn(ColumnName = "Current_Machine_id")]
public string CurrentMachineId { get; set; }
[Navigate(NavigateType.OneToOne, nameof(DrugId))]
public DrugInfo drugInfo { get; set; }
/// <summary>
/// 请领表
/// </summary>
[Navigate(NavigateType.ManyToOne, nameof(DrugPleaseClaimId))]
public DrugPleaseClaim drugPleaseClaim { get; set; }
[SugarColumn(IsIgnore = true)]
public List<DrugPleaseManuNo> ManuNoList { get; set; }
}
}

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 = "baseid", IsPrimaryKey = true)]
public int BaseId { get=> _baseId; set { SetProperty(ref _baseId, value); } }
private string _drugId;
[SugarColumn(ColumnName = "drugid")]
public string DrugId { get => _drugId; set { SetProperty(ref _drugId, value); } }
private string _machineId = "";
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get => _machineId; set { SetProperty(ref _machineId, value); } }
private int _baseQuantity = 0;
[SugarColumn(ColumnName = "baseQuantity")]
public int BaseQuantity { get=>_baseQuantity; set{ SetProperty(ref _baseQuantity, value); } }
}
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Prism.Mvvm;
using SqlSugar;
namespace DM_Weight.Models
{
@ -8,7 +9,7 @@ namespace DM_Weight.Models
///
///</summary>
[SugarTable("drug_info")]
public class DrugInfo
public class DrugInfo:BindableBase
{
/// <summary>
///
@ -19,7 +20,7 @@ namespace DM_Weight.Models
/// ҩƷID
///</summary>
[SugarColumn(ColumnName = "drug_id", IsPrimaryKey = true)]
public long DrugId { get; set; }
public string DrugId { get; set; }
/// <summary>
/// ƴ
///</summary>
@ -71,6 +72,13 @@ namespace DM_Weight.Models
///</summary>
[SugarColumn(ColumnName = "max_stock")]
public int? MaxStock { get; set; }
/// <summary>
/// 药品类型
/// </summary>
[SugarColumn(ColumnName ="drug_type")]
public string DrugType { get; set; }
//[SugarColumn(IsIgnore=true)]
[Navigate(NavigateType.OneToMany, nameof(ChannelStock.DrugId), nameof(DrugId))]//BookA表中的studenId
public List<ChannelStock> channelStocks { get; set; }
@ -81,5 +89,17 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)]
public int? StockQuantity { get; set; }
private DrugBase _base;
[Navigate(NavigateType.OneToOne, nameof(DrugBase.DrugId), nameof(DrugId), whereSql: "machine_id='DM3'")]
public DrugBase drugBase
{
get=> _base;
set { SetProperty(ref _base, value); }
}
[SugarColumn(IsIgnore = true)]
public string drug_name_spec { get; set; }
}
}

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

@ -1,4 +1,5 @@
using SqlSugar;
using Prism.Mvvm;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,7 +10,7 @@ using System.Threading.Tasks;
namespace DM_Weight.Models
{
[SugarTable("dm_machine_record")]
public class MachineRecord
public class MachineRecord : BindableBase
{
/// <summary>
/// 主键
@ -36,11 +37,11 @@ namespace DM_Weight.Models
public int Quantity { get; set; }
[SugarColumn(ColumnName = "stock_quantity")]
public int? StockQuantity { get; set; }
//[SugarColumn(ColumnName = "stock_quantity")]
//public int? StockQuantity { get; set; }
[SugarColumn(ColumnName = "check_quantity")]
public int? CheckQuantity { get; set; }
//[SugarColumn(ColumnName = "check_quantity")]
//public int? CheckQuantity { get; set; }
/// <summary>
/// 批号
@ -106,14 +107,16 @@ namespace DM_Weight.Models
/// 退药量
/// 默认值: 0
///</summary>
private int returnQuantity1;
[SugarColumn(ColumnName = "return_quantity1", IsOnlyIgnoreInsert = true)]
public int ReturnQuantity1 { get; set; }
public int ReturnQuantity1 { get => returnQuantity1; set => SetProperty(ref returnQuantity1, value); }
/// <summary>
/// 退空瓶量
/// 默认值: 0
///</summary>
private int returnQuantity2;
[SugarColumn(ColumnName = "return_quantity2", IsOnlyIgnoreInsert = true)]
public int ReturnQuantity2 { get; set; }
public int ReturnQuantity2 { get => returnQuantity2; set => SetProperty(ref returnQuantity2, value); }
/// <summary>
/// 取药记录id
///</summary>
@ -126,6 +129,19 @@ namespace DM_Weight.Models
[SugarColumn(ColumnName = "is_destroy", IsOnlyIgnoreInsert = true)]
public int? IsDestroy { get; set; }
/// <summary>
/// 销毁操作人
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "take_user", IsOnlyIgnoreInsert = true)]
public string TakeUser { get; set; }
/// <summary>
/// 销毁审核人
/// 默认值: 0
///</summary>
[SugarColumn(ColumnName = "fuzeren", IsOnlyIgnoreInsert = true)]
public string DestoryReviewerUser { get; set; }
[SugarColumn(IsIgnore = true)]
@ -137,5 +153,42 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
/// <summary>
/// 已核销数量
/// </summary>
private int hasCheckNum;
[SugarColumn(IsIgnore = true)]
public int HasCheckNum
{
get => hasCheckNum;
set => SetProperty(ref hasCheckNum, value);
}
private int checkQuantity;
/// <summary>
/// 核销数量
/// </summary>
[SugarColumn(IsIgnore = true)]
public int CheckQuantity
{
get => checkQuantity;
set
{
if (value > Quantity - hasCheckNum)
{
throw new ArgumentException("核销数量不能大于取药数量");
}
//退空瓶
ReturnQuantity2 = value + hasCheckNum;
//退药量
ReturnQuantity1 = Quantity - value - hasCheckNum;
SetProperty(ref checkQuantity, value);
}
}
[Navigate(NavigateType.OneToMany, nameof(SurgicalScheduleDetail.GetRecordId))]
public List<SurgicalScheduleDetail> _SurgicalScheduleDetailLst { get; set; }
}
}

View File

@ -127,5 +127,17 @@ namespace DM_Weight.Models
///</summary>
[SugarColumn(ColumnName = "use_dosage")]
public string UseDosage { get; set; }
//[Navigate(NavigateType.ManyToOne, nameof(OrderNo))]
//public OrderInfo _OrderInfo { get; set; }
[SugarColumn(IsIgnore =true)]
public string DrawerNo { get; set; }
[SugarColumn(IsIgnore =true)]
public string ColNo { get; set; }
}
}

View File

@ -177,6 +177,21 @@ namespace DM_Weight.Models
///</summary>
[SugarColumn(ColumnName = "costs")]
public decimal? Costs { get; set; }
/// <summary>
/// 药品请领状态0未请领;1已请领
/// </summary>
[SugarColumn(ColumnName = "apply_status")]
public int ApplyStatus { get;set; }
/// <summary>
///
/// 默认值: NULL
///</summary>
[SugarColumn(ColumnName = "machine_id")]
public string MachineId { get; set; }
/// <summary>
///
/// 默认值: NULL

View File

@ -0,0 +1,119 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
[SugarTable("rejection_report")]
public class RejectionReport
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public int Id { get; set; }
/// <summary>
/// 发药时间
/// </summary>
[SugarColumn(ColumnName = "SendDate")]
public DateTime SendDate { get; set; }
/// <summary>
/// 发药者
/// </summary>
[SugarColumn(ColumnName = "SendUser")]
public string SendUser { get; set; }
/// <summary>
/// 领药者
/// </summary>
[SugarColumn(ColumnName = "ReceiveUser")]
public string ReceiveUser { get; set; }
/// <summary>
/// 实发数
/// </summary>
[SugarColumn(ColumnName = "RealNum")]
public int RealNum { get; set; }
/// <summary>
/// 实物数
/// </summary>
[SugarColumn(ColumnName = "InfactNum")]
public int InfactNum { get; set; }
/// <summary>
/// 空安瓿
/// </summary>
[SugarColumn(ColumnName = "EmptyNum")]
public int EmptyNum { get; set; }
/// <summary>
/// 还药时间
/// </summary>
[SugarColumn(ColumnName = "ReturnTime")]
public string ReturnTime { get; set; }
/// <summary>
/// 还药者
/// </summary>
[SugarColumn(ColumnName = "ReturnUser")]
public string ReturnUser { get; set; }
/// <summary>
/// 接收者
/// </summary>
[SugarColumn(ColumnName = "ReturnReceiveUser")]
public string ReturnReceiveUser { get; set; }
/// <summary>
/// 补充者
/// </summary>
[SugarColumn(ColumnName = "AddUser")]
public string AddUser { get; set; }
/// <summary>
/// 核对者
/// </summary>
[SugarColumn(ColumnName = "AddCheckUser")]
public string AddCheckUser { get; set; }
/// <summary>
/// 操作时间
/// </summary>
[SugarColumn(ColumnName = "OperationTime")]
public DateTime OperationTime { get; set; }
[SugarColumn(ColumnName = "DrugId")]
public string DrugId { get; set; }
/// <summary>
/// 药品名称
/// </summary>
[SugarColumn(ColumnName = "DrugName")]
public string DrugName { get; set; }
/// <summary>
/// 药品规格
/// </summary>
[SugarColumn(ColumnName = "DrugSpec")]
public string DrugSpec { get; set; }
/// <summary>
/// 总基数
/// </summary>
[SugarColumn(ColumnName = "BaseNum")]
public string BaseNum { get; set; }
/// <summary>
/// 药箱号
/// </summary>
[SugarColumn(ColumnName = "DrawerNo")]
public int DrawerNo { get; set; }
/// <summary>
/// 日消耗总计--安瓿
/// </summary>
[SugarColumn(ColumnName = "useBottle")]
public int UseBottle { get; set; }
/// <summary>
/// 日消耗总计--处方
/// </summary>
[SugarColumn(ColumnName = "useOrderNo")]
public int UseOrderNo { get; set; }
/// <summary>
/// 日消耗总计--补充
/// </summary>
[SugarColumn(ColumnName = "useAdd")]
public int UseAdd { get; set; }
}
}

View File

@ -36,5 +36,11 @@ namespace DM_Weight.Models
///</summary>
[SugarColumn(ColumnName="machine_id" )]
public string MachineId { get; set; }
/// <summary>
/// 抽屉权限
/// </summary>
[SugarColumn(ColumnName = "drawer")]
public string drawer { get; set; }
}
}

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,176 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
namespace DM_Weight.Models
{
[SugarTable("surgical_schedule")]
public class SurgicalSchedule
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
public int Id { get; set; }
/// <summary>
/// 手术ID
/// </summary>
[SugarColumn(ColumnName = "operation_id")]
public string OperationId { get; set; }
/// <summary>
/// 患者id
/// </summary>
[SugarColumn(ColumnName = "patient_id")]
public string PatientId { get; set; }
/// <summary>
/// 患者姓名
/// </summary>
[SugarColumn(ColumnName = "patient_name")]
public string PName { get; set; }
/// <summary>
/// 住院号
/// </summary>
[SugarColumn(ColumnName = "hospital_no")]
public string HospitalNo { get; set; }
/// <summary>
/// 床号
/// </summary>
[SugarColumn(ColumnName = "bed_no")]
public string BedNo { get; set; }
/// <summary>
/// 性别
/// </summary>
[SugarColumn(ColumnName = "sex")]
public string Sex { get; set; }
/// <summary>
/// 年龄
/// </summary>
[SugarColumn(ColumnName = "age")]
public string Age { get; set; }
/// <summary>
/// 出生日期
/// </summary>
[SugarColumn(ColumnName = "birthday")]
public DateTime Birthday { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[SugarColumn(ColumnName = "id_number")]
public string IdNumber { get; set; }
/// <summary>
/// 住院病区
/// </summary>
[SugarColumn(ColumnName = "ward_code")]
public string WardCode { get; set; }
/// <summary>
/// 联系电话
/// </summary>
[SugarColumn(ColumnName = "link_tel")]
public string LinkTel { get; set; }
/// <summary>
/// 联系地址
/// </summary>
[SugarColumn(ColumnName = "link_addr")]
public string LinkAddr { get; set; }
/// <summary>
/// 入院日期
/// </summary>
[SugarColumn(ColumnName = "in_date")]
public string Indate { get; set; }
/// <summary>
/// 入院诊断
/// </summary>
[SugarColumn(ColumnName = "in_diagnosis")]
public string Indiagnosis { get; set; }
/// <summary>
/// 医生姓名
/// </summary>
[SugarColumn(ColumnName = "doctor_name")]
public string DoctorName { get; set; }
/// <summary>
/// 手术间代码
/// </summary>
[SugarColumn(ColumnName = "op_room_code")]
public string OpRoomCode { get; set; }
/// <summary>
/// 手术间名称
/// </summary>
[SugarColumn(ColumnName = "op_room_name")]
public string OpRoomName { get; set; }
/// <summary>
/// 麻醉医生编码
/// </summary>
[SugarColumn(ColumnName = "ana_doctor_code")]
public string AnaDoctorCode { get; set; }
/// <summary>
/// 麻醉医生姓名
/// </summary>
[SugarColumn(ColumnName = "ana_doctor_name")]
public string AnaDoctorName { get; set; }
/// <summary>
/// 手术开始时间
/// </summary>
[SugarColumn(ColumnName = "begin_time")]
public DateTime BeginTime { get; set; }
/// <summary>
/// 手术计划开始时间
/// </summary>
[SugarColumn(ColumnName = "schedule_time")]
public DateTime ScheduleTime { get; set; }
/// <summary>
/// 手术完成时间
/// </summary>
[SugarColumn(ColumnName = "end_time")]
public DateTime EndTime { get; set; }
/// <summary>
/// 数据插入时间
/// </summary>
[SugarColumn(ColumnName = "insert_time")]
public DateTime InsertTime { get; set; }
/// <summary>
/// 最后一次更新时间
/// </summary>
[SugarColumn(ColumnName = "update_time")]
public DateTime UpdateTime { get; set; }
/// <summary>
/// HIS状态1新开2作废
/// </summary>
[SugarColumn(ColumnName = "his_state")]
public int HisState { get; set; }
/// <summary>
///取药状态0未取1已取2已还
/// </summary>
[SugarColumn(ColumnName = "dm_status")]
public int DmStatus { get; set; }
[SugarColumn(ColumnName = "anaesthesia")]
public string Anaesthesia { get; set; }
[Navigate(NavigateType.OneToMany, nameof(SurgicalSchedule.OperationId))]
public SurgicalScheduleDetail _SurgicalScheduleDetail { get; set; }
}
}

View File

@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
namespace DM_Weight.Models
{
[SugarTable("surgical_schedule_detail")]
public class SurgicalScheduleDetail
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnName = "id",IsPrimaryKey =true)]
public int Id { get; set; }
/// <summary>
/// 手术id
/// </summary>
[SugarColumn(ColumnName = "operation_id")]
public string OperationId { get; set; }
/// <summary>
/// 取药记录id
/// </summary>
[SugarColumn(ColumnName = "get_record_id")]
public int GetRecordId { get; set; }
/// <summary>
/// 处方数量
/// </summary>
[SugarColumn(ColumnName = "quantity")]
public int Quantity { get; set; }
/// <summary>
/// 药品id
/// </summary>
[SugarColumn(ColumnName = "drug_id")]
public string DrugId { get; set; }
/// <summary>
/// 批次
/// </summary>
[SugarColumn(ColumnName = "manu_no")]
public string ManuNo { get; set; }
/// <summary>
/// 效期
/// </summary>
[SugarColumn(ColumnName = "eff_date")]
public string EffDate { get;set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnName = "status")]
public int Status { get; set; }
/// <summary>
/// 操作人
/// </summary>
[SugarColumn(ColumnName = "insert_user_id")]
public int? InsertUserId { get; set; }
}
}

View File

@ -8,7 +8,7 @@ namespace DM_Weight.Models
///
///</summary>
[SugarTable("user_list")]
public class UserList
public class UserList:ICloneable
{
/// <summary>
///
@ -69,6 +69,11 @@ namespace DM_Weight.Models
[SugarColumn(ColumnName="sign" )]
public byte[] Sign { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
public override string ToString()
{
return "userList = [UserName:" + Nickname + ", UserId:" + UserName + "]";

View File

@ -23,6 +23,12 @@ using Unity;
using DM_Weight.msg;
using DM_Weight.Views;
using System.Reflection;
//using PreviewDemo;
using System.Runtime.InteropServices;
using DM_Weight.Common;
using System.Net;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
namespace DM_Weight.Port
{
@ -37,6 +43,9 @@ namespace DM_Weight.Port
// 条码枪串口
public SerialPort scanCodeSerial;
// 冰箱串口
public SerialPort fridgeSerial;
// 抽屉串口协议232 | 485
private int _drawerProtocol = Convert.ToInt32(ConfigurationManager.AppSettings["DrawerProtocol"]);
@ -58,7 +67,7 @@ namespace DM_Weight.Port
// 取药操作的窗口名【处方取药、抽屉取药、自选取药、调拨出库】
private string[] TakeNames = new string[] { "DrawerTakeDrugWindow", "OrderTakeDrugWindow", "SelfTakeDrugWindow", "InvoiceTakeDrugWindow" };
// 加药操作的窗口名【自选加药、抽屉加药、还药】
private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow" };
private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow", "AddDrugControl" };
// 盘点操作的窗口名【盘点】
private string[] CheckNames = new string[] { "CheckStockWindow" };
// 归还空瓶操作的窗口名【盘点】
@ -77,8 +86,10 @@ namespace DM_Weight.Port
// 是否正在操作中
public bool Operate { get; set; }
public DateTime dateTime { get; set; } = DateTime.Now;
//冰箱是否正在操作中
public bool FridgeOperate { get; set; }
public DateTime dateTime { get; set; } = DateTime.Now;
public async void ResetData()
{
@ -117,12 +128,115 @@ namespace DM_Weight.Port
DrawerNo = 0;
ColNos = new int[] { };
}
#region
/// <summary>
/// 打开抽屉
/// </summary>
/// <param name="ColNo"></param>
/// <returns></returns>
public async Task OpenAllDrawer()
{
byte[] buffer = await OpenDrawer();
int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
logger.Info($"OpenDrawer{string.Join(",", r)}");
if (DrawerState(r))
{
statue = 1;
// 返回消息 抽屉已经打开
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
{
EventType = util.EventType.DRAWEROPEN,
WindowName = WindowName,
});
logger.Info($"抽屉【{DrawerNo}】打开成功");
// 查询抽屉状态
await Task.Delay(200);
}
else
{
string _WindowName = WindowName;
// 重新初始化数据
ResetData();
// 返回消息 抽屉打开失败
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
{
EventType = util.EventType.OPENERROR,
WindowName = WindowName,
Message = $"抽屉【{DrawerNo}】打开失败"
});
logger.Info($"抽屉【{DrawerNo}】打开失败");
}
}
/// <summary>
/// 查询抽屉状态
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task GetAllDrawerLockState()
{
try
{
if (Operate)
{
// 查询抽屉状态
byte[] buffer = await CheckDrawerStatus();
int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
logger.Info($"GetAllDrawerLockState{string.Join(",", r)}");
int[] subArray = new int[8];
for (int i = 0; i < 8; i++)
{
subArray[i] = r[2 + i];
}
bool state = subArray.All(r => r > 0);
if (state)
{
//抽屉全部关闭
string _WindowName = WindowName;
// 重新初始化数据
ResetData();
// 返回消息 抽屉已经关闭
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
{
EventType = util.EventType.DRAWERCLOSE,
WindowName = _WindowName,
});
logger.Info($"抽屉【{DrawerNo}】已关闭");
}
else
{
// 继续监听抽屉状态
await Task.Delay(200);
GetAllDrawerLockState();
}
}
}
catch (Exception ex)
{
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
{
EventType = util.EventType.OPENERROR,
WindowName = WindowName,
Message = $"GetDrawerStatus异常{ex.Message}"
});
logger.Info($"GetDrawerStatus异常{ex.Message}");
}
}
#endregion
public async void Start()
{
logger.Info($"进行抽屉操作抽屉号【{DrawerNo}】类型【{BoardType}】库位【{string.Join(",", ColNos)}】窗口【{WindowName}】");
Operate = true;
//开始录像
//_chkFunction.HIKStartDVRRecord();
//logger.Info($"时间:{DateTime.Now}");
try
{
// 储物箱直接开
@ -301,7 +415,7 @@ namespace DM_Weight.Port
}
}
int i = 15;
public async void GetDrawerStatus()
{
try
@ -402,12 +516,19 @@ namespace DM_Weight.Port
logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
}
i--;
if (i == 0)
{
SpeakAsync("请关闭抽屉");
i = 15;
}
// 继续监听抽屉状态
await Task.Delay(200);
GetDrawerStatus();
}
else
{
i = 15;
statue = 2;
if (BoardType == 2)
{
@ -574,7 +695,7 @@ namespace DM_Weight.Port
private readonly IEventAggregator _eventAggregator;
//private CHKFunction _chkFunction;
public PortUtil(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
@ -612,6 +733,18 @@ namespace DM_Weight.Port
{
logger.Error("条码枪串口打开错误" + e.Message);
}
try
{
string FridgePortPath = ConfigurationManager.AppSettings["FridgePortPath"];
logger.Info($"打开冰箱串口【{FridgePortPath}】");
fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8);
fridgeSerial.Open();
logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】");
}
catch (Exception e)
{
logger.Error("冰箱串口打开错误" + e.Message);
}
if (_canBusExsit)
{
try
@ -628,7 +761,7 @@ namespace DM_Weight.Port
}
}
//_chkFunction = chkFunction;
}
@ -938,6 +1071,37 @@ namespace DM_Weight.Port
}
#endregion
#region
/// <summary>
/// 打开药盒
/// </summary>
/// <param name="ColNo"></param>
/// <returns></returns>
public async Task OpenBox(int ColNo)
{
var vlock = 321;
decimal decolNO = (decimal)ColNo;
var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO % 3)).ToString(), 16);
byte[] buffer = new byte[] { 0xaa, (byte)channel, 5, (byte)vlock, 0x00, 0x00, 0x00, 0xee };
canBusSerial.Write(buffer, 0, 8);
await Task.Delay(TimeSpan.FromMilliseconds(20));
}
/// <summary>
/// 查询药盒状态
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<byte[]> GetBoxLockState(int ColNo)
{
decimal deColNo = (decimal)ColNo;
var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(deColNo / 3)).ToString(), 16);
byte[] buffer = new byte[] { 0xaa, (byte)channel, 2, 0, 0, 0, 0, 0xee };
canBusSerial.Write(buffer, 0, 8);
return await GetBufferByPort(canBusSerial, 8);
}
#endregion
private string trim(string text)
{
//此处使用了转义字符如:\',\",\\,分别表示单引号,双引号,反斜杠
@ -1070,6 +1234,18 @@ namespace DM_Weight.Port
#endregion
#region
//清屏
public void ClearContentMethod(int drawerNo, int colNo)
{
decimal deColNo = colNo;
var channel = drawerNo * 10 + Math.Ceiling(deColNo / 3);
var colNo2 = 321;
byte[] buffer = new byte[] { 0xaa };
canBusSerial.Write(buffer, 0, 8);
}
#endregion
#region
@ -1289,8 +1465,424 @@ namespace DM_Weight.Port
}
}
#endregion
/// <summary>
/// 冰箱使能
/// </summary>
/// <returns></returns>
public async Task FridegOpen(int iIndex)
{
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x01, 0x0C, 0xF2 };
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"冰箱使能【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
await Task.Delay(80);
}
catch (Exception ex)
{
logger.Info($"冰箱使能发生异常ex:{ex.Message}");
}
FridgeOperate = false;
}
/// <summary>
/// 冰箱失能
/// </summary>
/// <returns></returns>
public async Task FridgeOff(int iIndex)
{
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x00, 0xCD, 0x32 };
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"冰箱失能【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
await Task.Delay(80);
}
catch (Exception ex)
{
logger.Info($"冰箱失能发生异常ex:{ex.Message}");
}
FridgeOperate = false;
}
/// <summary>
/// 冰箱报警使能
/// </summary>
/// <returns></returns>
public async Task FridgeAlarmOn(int iIndex)
{
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x01, 0x5D, 0x32 };
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"冰箱报警使能【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
await Task.Delay(80);
}
catch (Exception ex)
{
logger.Info($"冰箱报警使能发生异常ex:{ex.Message}");
}
FridgeOperate = false;
}
/// <summary>
/// 冰箱报警失能
/// </summary>
/// <returns></returns>
public async Task FridgeAlarmOff(int iIndex)
{
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x00, 0x9C, 0xF2 };
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x00 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"冰箱报警失能【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
await Task.Delay(80);
}
catch (Exception ex)
{
logger.Info($"冰箱报警失能发生异常ex:{ex.Message}");
}
FridgeOperate = false;
}
/// <summary>
/// 冰箱温度设定最小
/// </summary>
/// <returns></returns>
public async Task FridgeMinSetting(float min, int iIndex)
{
try
{
int iMix = Convert.ToInt32(min * 10);
fridgeSerial.DiscardInBuffer();
//byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] bufferMin = new byte[] { bAddress, 0x06, 0x10, 0xC9, 0x00, (byte)(iMix & 0xff) };
//获取数组CRC校验码
byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMin);
//Array.Reverse(byteDate);
int dataLength = bufferMin.Length;
Array.Resize(ref bufferMin, dataLength + byteDate.Length);
for (int i = 0; i < byteDate.Length; i++)
{
bufferMin[dataLength + i] = byteDate[i];
}
logger.Info($"冰箱温度设定Min:【{Convert.ToHexString(bufferMin)}】");
fridgeSerial.Write(bufferMin, 0, 8);
}
catch (Exception ex)
{
logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
}
}
/// <summary>
/// 冰箱温度设定最大
/// </summary>
/// <returns></returns>
public async Task FridgeMaxSetting(float max, int iIndex)
{
try
{
int iMax = Convert.ToInt32(max * 10);
fridgeSerial.DiscardInBuffer();
//byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] bufferMax = new byte[] { bAddress, 0x06, 0x10, 0xC8, 0x00, (byte)(iMax & 0xff) };
//获取数组CRC校验码
byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMax);
//Array.Reverse(byteDate);
int dataLength = bufferMax.Length;
Array.Resize(ref bufferMax, dataLength + byteDate.Length);
for (int i = 0; i < byteDate.Length; i++)
{
bufferMax[dataLength + i] = byteDate[i];
}
logger.Info($"冰箱温度设定Max:【{Convert.ToHexString(bufferMax)}】");
fridgeSerial.Write(bufferMax, 0, 8);
}
catch (Exception ex)
{
logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
}
}
/// <summary>
/// 获取冰箱温度
/// </summary>
/// <returns></returns>
public async Task<float> GetFridgeTemperature(int iIndex)
{
float temperature = 0.0f;
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21, 0x0A };
//byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"获取冰箱温度【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
logger.Info($"获取冰箱温度返回【{Convert.ToHexString(retByte)}】");
if (retByte != null && retByte.Length >= 7)
{
var hight = retByte[3];
var low = retByte[4];
int iHight = Convert.ToInt32(hight << 8);
int iLow = Convert.ToInt32(retByte[4]);
temperature = Convert.ToSingle(iHight + iLow) / 10;
}
}
catch (Exception ex)
{
logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
}
return temperature;
}
//读制冷片温度
public async Task<float> GetFridgeTemperature2()
{
float temperature = 0.0f;
try
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x0C, 0x00, 0x01, 0x40, 0xC9 };
//byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"获制冷片温度【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
logger.Info($"获取制冷片温度返回【{Convert.ToHexString(retByte)}】");
if (retByte != null && retByte.Length >= 7)
{
var hight = retByte[3];
var low = retByte[4];
int iHight = Convert.ToInt32(hight << 8);
int iLow = Convert.ToInt32(retByte[4]);
temperature = Convert.ToSingle(iHight + iLow) / 10;
}
}
catch (Exception ex)
{
logger.Info($"获取制冷片温度发生异常ex:{ex.Message}");
}
return temperature;
}
/// <summary>
/// 设置冰箱温度
/// </summary>
/// <returns></returns>
public async Task<float> SetFridgeTemperature(float temperature, int iIndex)
{
int tpt = (int)temperature * 10;
byte Temperature = (byte)(tpt & 0xff);
try
{
//if (!FridgeOperate)
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
//byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21,0x0A };
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0x02, 0x00, (byte)Temperature };
//获取数组CRC校验码
byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
//Array.Reverse(byteDate);
int dataLength = buffer.Length;
Array.Resize(ref buffer, dataLength + byteDate.Length);
for (int i = 0; i < byteDate.Length; i++)
{
buffer[dataLength + i] = byteDate[i];
}
logger.Info($"设置冰箱温度【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
await GetBufferByPort(fridgeSerial, 8);
}
}
catch (Exception ex)
{
logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
}
return temperature;
}
/// <summary>
/// 冰箱延迟报警
/// </summary>
/// <returns></returns>
public async Task FridgeDelayWarm(int iIndex)
{
try
{
//if (!FridgeOperate)
{
fridgeSerial.DiscardInBuffer();
byte bAddress;
if (iIndex == 1)
{
bAddress = 0x01;
}
else
{
bAddress = 0x02;
}
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xCD, 0x00, 0x01, 0xDD, 0x35 };
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xCD, 0x00, 0x01 };
////获取数组CRC校验码
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
////Array.Reverse(byteDate);
//int dataLength = buffer.Length;
//Array.Resize(ref buffer, dataLength + byteDate.Length);
//for (int i = 0; i < byteDate.Length; i++)
//{
// buffer[dataLength + i] = byteDate[i];
//}
logger.Info($"冰箱延迟报警【{Convert.ToHexString(buffer)}】");
fridgeSerial.Write(buffer, 0, 8);
}
}
catch (Exception ex)
{
logger.Info($"获取冰箱温度发生异常ex:{ex.Message}");
}
//FridgeOperate = false;
}
#endregion
}

View File

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using DM_Weight.Models;
using System.Configuration;
using DM_Weight.util;
using System.Diagnostics;
namespace DM_Weight.Report
{
@ -82,7 +83,66 @@ namespace DM_Weight.Report
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
}
public static void PrintReportAccountBook(DateTime? startDate, DateTime? endDate, int type, string drug_id)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
// 加载模板文件
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "account_book_temp.grf");
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
//string jj_machine_id = (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5");
string SQL = $@" SELECT ac.create_date as operationTime, ac.TYPE,
if(ac.type in(1,2),0,ac.yesterday_quantity) as YQuantity,if(ac.type in(3,4),0,ac.add_quantity) as inQuantity,if(ac.type in(3,4),0,ac.out_quantity) as outQuantity,
if(ac.type in(1,2),0,ac.manu_stock) as ManuStock,ac.total_stock AS stockQuantity, -- if(ac.type in(1,2),0,ac.total_stock) as TotalStock,
ac.invoice_no as invoiceId, ac.manu_no as manuNo,ac.eff_date as effDate,di.drug_id,di.drug_name as DrugName,di.drug_spec as DrugSpec,di.manufactory as manufactory,di.pack_unit AS packUnit,di.dosage,u1.user_name as operatorName,u2.user_name as reviewerName
FROM account_book_g2 ac left join drug_info di on ac.drug_id=di.drug_id left join user_list u1 on ac.user_id1=u1.id left join user_list u2 on ac.user_id2=u2.id
WHERE ac.machine_id ='{p_machine_id}' and create_time>'{p_startDate}' AND create_time<'{p_endDate}' ";
if (!string.IsNullOrEmpty(drug_id))
{
SQL += " AND ac.drug_id='" + drug_id + "' ";
}
if (type > 0)
{
if (type == 1)
{
SQL += " WHERE AddQuantity>0 ";
}
if (type == 2)
{
SQL += " WHERE OutQuantity>0 ";
}
if (type == 3)
{
SQL += " WHERE type=3 ";
}
if (type == 4)
{
SQL += " WHERE type=4 ";
}
}
SQL += " ORDER BY di.drug_id,ac.create_date desc";
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
//string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "account_book_temp.pdf";
//if (File.Exists(filePath))
//{
// try
// {
// File.Delete(filePath);
// }
// catch (Exception ex)
// {
// FindAndKillProcess();
// }
//}
//Report.ExportDirect(GRExportType.gretPDF, filePath, false, true);
}
public static void PrintReportMechineRecord(int type, DateTime? startDate, DateTime? endDate)
{
// 定义Grid++Report报表主对象
@ -171,5 +231,208 @@ namespace DM_Weight.Report
Report.ParameterByName("type").AsInteger = 1;
Report.PrintPreview(true);
}
//交接班记录报表
public static void PrintChangeShiftsReport(DateTime? startDate, DateTime? endDate)
{
DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
// 加载模板文件
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "changeShifts_temp.grf");
string SQL = string.Empty;
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() =>
{
Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
Report.ParameterByName("startDate").Value = startDate ?? Convert.ToDateTime("2010-1-1");
Report.ParameterByName("endDate").Value = endDate ?? DateTime.Now.AddDays(1);
});
SQL = $@"SELECT opt_date,drug_name,drug_spec,beforenum,getnum,usenum,manu_no,surplus,CONCAT(fromoperator,' ',fromreviewer) as fromoperator,
CONCAT(tooperator,' ',toreviewer) as tooperator
from `hkc_shiftsreport` WHERE `machineid` = '{p_machine_id}' AND `opt_date` > '{p_startDate}'
AND opt_date < '{p_endDate}' ORDER BY opt_date";
Report.DetailGrid.Recordset.QuerySQL = SQL;
//Report.PrintPreview(true);
string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "changeShifts_temp.pdf";
if (File.Exists(filePath))
{
try
{
File.Delete(filePath);
}
catch (Exception ex)
{
FindAndKillProcess();
}
}
Report.ExportDirect(GRExportType.gretPDF, filePath, false, true);
}
public static bool FindAndKillProcess()
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Contains("wps") || clsProcess.ProcessName.Contains("msedge"))
{
clsProcess.Kill();
//return true;
}
}
//process not found, return false
return false;
}
/// <summary>
/// 空安瓿回收销毁报表
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
public static void PrintEmptyDestoryReport(DateTime? startDate, DateTime? endDate)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
string SQL = string.Empty;
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "ReturnEmptyDistory_template.grf");
SQL = $@"
SELECT di.drug_id, di.drug_name as drugName,di.dosage,di.drug_spec as drugSpec,di.big_unit,oi.Order_Date, CONCAT(oi.p_name,'/',oi.dept_name) as userDeptName,
od.Quantity,mr.Manu_No,ul.user_name as retuenUser,u2.user_name as returnReviewer,u3.User_name as distoryUser,u4.User_name as distoryRevierer,(od.Quantity-mr.return_quantity2) as needReturnEmptyCount
from order_info oi inner join order_detail od on oi.order_no=od.order_no
inner join (SELECT id as mrId,manu_no,invoice_id,id,operator,reviewer, sum(return_quantity2) as return_quantity2 FROM dm_machine_record where type=2 and machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}' GROUP BY invoice_id) mr on oi.order_no=mr.invoice_id
INNER JOIN drug_info di on od.drug_id=di.drug_id
LEFT JOIN (SELECT manu_no,invoice_id,id,operator,reviewer,get_id from dm_machine_record where type=32 and machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') re on re.get_id=mr.id
LEFT JOIN (SELECT recordId,operatorid,reviewerid,machine_id FROM destory_detail WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ddl on re.id=ddl.recordId
-- LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul0 on mr.operator=ul0.id
-- LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul00 on re.reviewer=ul00.id
LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul on re.operator=ul.id
LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u2 on re.reviewer=u2.id
LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u3 on ddl.operatorid=u3.id
LEFT JOIN (SELECT User_name,machine_id,id FROM user_list WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u4 on ddl.reviewerid=u4.id
WHERE
oi.Pharmacy='{ConfigurationManager.AppSettings["storage"] ?? ""}' and oi.Order_Date>'{startDate}' and oi.Order_Date<'{endDate}' GROUP BY Order_Date";
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
}
/// <summary>
/// 发药登记表
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
public static void OrderUseReport(DateTime? startDate, DateTime? endDate, string drug_id)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
string SQL = string.Empty;
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "orderUse_template.grf");
SQL = $@"
SELECT oi.p_name,oi.age,oi.sex,oi.id_number,oi.patientno,oi.disease,od.drug_id,oi.doctor_name,oi.order_no,oi.order_date,
dmr.id,dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,dmr.`quantity` AS quantity,
dmr.`manu_no` AS manuNo,dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime,
di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit,
di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,dmr.`drug_id` AS drugId,
ul.`user_name` AS nickname,U2.`user_name` AS reviewNickname FROM dm_machine_record dmr
INNER JOIN ORDER_INFO oi on dmr.invoice_id=oi.order_no
INNER JOIN order_detail od on oi.order_no=od.order_no and oi.order_id=od.order_id
LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`
LEFT JOIN (select id,user_name from user_list where machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul ON ul.`id` = dmr.`Operator`
LEFT JOIN (select id,user_name from user_list where machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') U2 ON U2.ID=dmr.reviewer
WHERE dmr.`type` = 2 and oi.Pharmacy='{ConfigurationManager.AppSettings["storage"] ?? ""}'
AND dmr.`machine_id` ='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}' AND oi.`order_date` > '{startDate}'
AND oi.`order_date` < '{endDate}'";
if (!string.IsNullOrEmpty(drug_id))
{
SQL += " AND ac.drug_id='" + drug_id + "' ";
}
Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
Report.DetailGrid.Recordset.QuerySQL = SQL;
Report.PrintPreview(true);
}
public static void RejectionReport(DateTime? startDate, DateTime? endDate)
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
string p_startDate = startDate==null? DateTime.Now.ToString("yyyy-MM-dd"): ((DateTime)startDate).ToString("yyyy-MM-dd") ;
string p_endDate = endDate == null ? DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") : ((DateTime)endDate).ToString("yyyy-MM-dd");
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
string SQL = string.Empty;
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "use_jiaojie_New.grf");
SQL = $@"
SELECT ID,DATE_FORMAT(Senddate,'%Y/%m/%d') as SenddateMonthDay,YEAR(Senddate) as DMYear,MONTH(Senddate) DMMonth,DAY(Senddate) DMDay, 0 as TotalBaseNum,
DATE_FORMAT(Senddate,'%Y/%m/%d %H:%i:%s') as Senddate,SendUser as SendUser,receiveuser as ReceiveUser,realnum as SendNum,infactnum as InfactNum,emptynum as EmptyNum,
returnTime as ReturnDate,returnuser as ReturnUser,returnreceiveuser as ReturnReceiveUser,
IF(adduser is null,'',adduser) as AddUser,IF(addcheckuser is null,'',addcheckuser) as AddCheckUser,DATE_FORMAT(operationtime,'%Y/%m/%d %H:%i:%s') as OperationTime,drugid as drugId,drugname as drugName,drugspec,basenum as TotalNum,drawerno
from rejection_report ";// -- where DATE_FORMAT(operationtime,'%Y-%m-%d')= '2024-09-19'
//-- GROUP BY Senddate,drugId order by Senddate,drugId";
SQL += $" where DATE_FORMAT(Senddate,'%Y-%m-%d')>= '{p_startDate}' and DATE_FORMAT(Senddate,'%Y-%m-%d')<= '{p_endDate}'";
SQL += " GROUP BY Senddate,returnTime,drugId order by Senddate,returnTime,drugId";
Dictionary<string, List<Dictionary<string, object>>> records = new Dictionary<string, List<Dictionary<string, object>>>();
List<Dictionary<string, object>> tableList=SqlSugarHelper.Db.SqlQueryable<dynamic>(SQL).ToDictionaryList();
records.Add("Table", tableList);
string str=JsonConvert.SerializeObject(records);
Report.LoadDataFromXML(str);
Report.PrintPreview(true);
}
public static void AccountNewReport()
{
// 定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
string SQL = string.Empty;
Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "Account_Book_New.grf");
//SQL = $@"
// SELECT IF(mr.TYPE=1,'入库',IF(mr.TYPE=2,'出库','')) as operationtype,
// IF(mr.TYPE=1,'麻醉科小药箱交接与使用记录本','住院药房发药清单') as VOUCHER,
// IF(mr.TYPE=1,'麻醉科','住院药房') as department,
// di.Drug_type as Drug_type,
// di.Manufactory AS FACTURE,di.Drug_Name,di.Drug_Spec,db.baseQuantity AS drug_base,mr.drug_id,0 INQUANTITY,0 OUTQUANTITY,0 STOCKQUANTITY,mr.manu_no AS MANUNO, mr.EFF_DATE,
// 'admin' AS SENDUSER,'admin' AS SENDCHECKUSER,'admin' AS RECEIVEUSER,'admin' AS RECEIVECHECKUSER
// from dm_machine_record mr inner join drug_info di on mr.drug_id=di.drug_id LEFT JOIN drug_base db on di.drug_id=db.drugid
// INNER join user_list ul on mr.operator=ul.id
// WHERE mr.machine_id='DM3' and type in(1,2) ORDER BY mr.TYPE ,voucher desc,department desc,Drug_type desc,di.Manufactory";
SQL = $@"SELECT YEAR(create_date) AS DMYear, IF(ab.type=1,'入库','出库') as operationtype,if(ab.type=1,'住院药房发药清单','麻醉科小药箱交接与使用记录本') as VOUCHER,IF(ab.TYPE=1,'住院药房','麻醉科') as department,ab.Manu_No AS MANUNO,ab.eff_date AS EFF_DATE,
di.Drug_type as Drug_type,di.Manufactory AS FACTURE,di.Drug_Name,di.Drug_Spec,db.baseQuantity AS drug_base,ab.drug_id,if(ab.Type=1,sum(ab.add_quantity),0) as INQUANTITY,if(ab.type=2,sum(ab.out_quantity),0) as OUTQUANTITY,
(SELECT manu_stock from account_book_g2 as stb where stb.drug_id=ab.drug_id and stb.manu_no=ab.manu_no and stb.eff_date=ab.eff_date and stb.type=3 and stb.create_date=ab.create_date ORDER BY create_time desc LIMIT 1) as STOCKQUANTITY,
IF(ab.type=1,CONCAT(u1.user_name,u2.user_name),'') as SENDUSER,IF(ab.type=2,CONCAT(u1.user_name,u2.user_name),'') as RECEIVEUSER
from account_book_g2 ab inner join drug_info di on ab.drug_id=di.drug_id left join drug_base db on di.drug_id=db.drugid
LEFT JOIN user_list u1 on ab.user_id1=u1.id LEFT JOIN user_list u2 on ab.user_id2=u2.id
where type in(1,2) and ab.machine_id='DM3' and di.dosage='' GROUP BY ab.drug_id,ab.Manu_No,ab.eff_date
ORDER BY ab.TYPE desc ,voucher desc,department desc,Drug_type desc,di.Manufactory";
Dictionary<string, List<Dictionary<string, object>>> records = new Dictionary<string, List<Dictionary<string, object>>>();
List<Dictionary<string, object>> tableList = SqlSugarHelper.Db.SqlQueryable<dynamic>(SQL).ToDictionaryList();
records.Add("Table", tableList);
string str = JsonConvert.SerializeObject(records);
Report.LoadDataFromXML(str);
Report.PrintPreview(true);
}
}
}

View File

@ -0,0 +1,389 @@
{
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"Oriention":"Landscape"
},
"DetailGrid":{
"Recordset":{
"Field":[
{
"Name":"操作类型",
"DBFieldName":"operationtype"
},
{
"Name":"药品类型",
"DBFieldName":"Drug_type"
},
{
"Name":"生产厂家",
"DBFieldName":"FACTURE"
},
{
"Name":"药品id",
"DBFieldName":"DRUG_ID"
},
{
"Name":"品名",
"DBFieldName":"DRUG_NAME"
},
{
"Name":"规格",
"DBFieldName":"Drug_Spec"
},
{
"Name":"基数",
"DBFieldName":"drug_base"
},
{
"Name":"入库数量",
"DBFieldName":"INQUANTITY"
},
{
"Name":"出库数量",
"DBFieldName":"OUTQUANTITY"
},
{
"Name":"结余数量",
"DBFieldName":"STOCKQUANTITY"
},
{
"Name":"批号",
"DBFieldName":"MANUNO"
},
{
"Name":"有效期",
"DBFieldName":"EFF_DATE"
},
{
"Name":"发药/核对者1",
"DBFieldName":"SENDUSER"
},
{
"Name":"领药/核对者2",
"DBFieldName":"RECEIVEUSER"
},
{
"Name":"部门",
"DBFieldName":"department"
},
{
"Name":"凭证号",
"DBFieldName":"VOUCHER"
},
{
"Name":"年份",
"DBFieldName":"DMYear"
}
]
},
"Column":[
{
"Name":"Column1"
},
{
"Name":"Column2"
},
{
"Name":"Column3"
},
{
"Name":"Column4"
},
{
"Name":"Column5"
},
{
"Name":"Column6"
},
{
"Name":"Column7",
"Width":3.04271
},
{
"Name":"Column8"
},
{
"Name":"Column9"
},
{
"Name":"Column10"
},
{
"Name":"Column11"
},
{
"Name":"Column12"
},
{
"Name":"Column13"
},
{
"Name":"Column14"
},
{
"Name":"Column15"
}
],
"ColumnContent":{
"Height":1.79917,
"ColumnContentCell":[
{
"Column":"Column1",
"TextAlign":"TopLeft",
"ShrinkFontToFit":true,
"DataField":"操作类型"
},
{
"Column":"Column2",
"WordWrap":true,
"TextAlign":"TopLeft",
"DataField":"凭证号"
},
{
"Column":"Column3",
"WordWrap":true,
"TextAlign":"TopLeft",
"DataField":"部门"
},
{
"Column":"Column4",
"WordWrap":true,
"TextAlign":"MiddleCenter",
"ShrinkFontToFit":true,
"DataField":"药品类型"
},
{
"Column":"Column5",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"生产厂家"
},
{
"Column":"Column6",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"品名"
},
{
"Column":"Column7",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"规格"
},
{
"Column":"Column8",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"基数"
},
{
"Column":"Column9",
"TextAlign":"BottomCenter",
"DataField":"入库数量"
},
{
"Column":"Column10",
"TextAlign":"BottomCenter",
"DataField":"出库数量"
},
{
"Column":"Column11",
"TextAlign":"BottomCenter",
"DataField":"结余数量"
},
{
"Column":"Column12",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"批号"
},
{
"Column":"Column13",
"WordWrap":true,
"TextAlign":"BottomCenter",
"DataField":"有效期"
},
{
"Column":"Column14",
"EndEllipsis":true,
"TextAlign":"BottomCenter",
"DataField":"发药/核对者1"
},
{
"Column":"Column15",
"EndEllipsis":true,
"TextAlign":"BottomCenter",
"DataField":"领药/核对者2"
}
]
},
"ColumnTitle":{
"Height":1.79917,
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column16",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column1",
"TextAlign":"BottomCenter",
"Text":"入(出)\r\n库日期"
},
{
"GroupTitle":false,
"Column":"Column2",
"TextAlign":"BottomCenter",
"Text":"入(出)\r\n库凭证号"
},
{
"GroupTitle":false,
"Column":"Column3",
"TextAlign":"BottomCenter",
"Text":"入(出)\r\n部门"
},
{
"GroupTitle":false,
"Column":"Column4",
"TextAlign":"BottomCenter"
},
{
"GroupTitle":false,
"Column":"Column5",
"TextAlign":"BottomCenter",
"Text":"生产厂家"
},
{
"GroupTitle":false,
"Column":"Column6",
"TextAlign":"BottomCenter",
"Text":"品名"
},
{
"GroupTitle":false,
"Column":"Column7",
"TextAlign":"BottomCenter",
"Text":"规格"
},
{
"GroupTitle":false,
"Column":"Column8",
"TextAlign":"BottomCenter",
"Text":"基数"
},
{
"GroupTitle":false,
"Column":"Column9",
"TextAlign":"BottomCenter",
"Text":"入库数量"
},
{
"GroupTitle":false,
"Column":"Column10",
"TextAlign":"BottomCenter",
"Text":"出库数量"
},
{
"GroupTitle":false,
"Column":"Column11",
"TextAlign":"BottomCenter",
"Text":"结余数量"
},
{
"GroupTitle":false,
"Column":"Column12",
"TextAlign":"BottomCenter",
"Text":"批号"
},
{
"GroupTitle":false,
"Column":"Column13",
"TextAlign":"BottomCenter",
"Text":"有效期"
},
{
"GroupTitle":false,
"Column":"Column14",
"TextAlign":"BottomCenter",
"Text":"发药/\r\n核对者1"
},
{
"GroupTitle":false,
"Column":"Column15",
"TextAlign":"BottomCenter",
"Text":"领药/\r\n核对者2"
}
],
"Text":"使用部门:麻醉科 品名:见下表 规格:见下表 剂型:注射剂 单位:支 生产厂家:见下表"
}
]
},
"Group":[
{
"Name":"Group1",
"ByFields":"操作类型",
"GroupHeader":{
"OccupyColumn":true,
"OccupiedColumns":"Column1;Column2;Column3;Column14;Column15"
},
"GroupFooter":{
"Visible":false,
"Height":0,
"PrintGridBorder":false
}
},
{
"Name":"Group2",
"ByFields":"药品类型",
"GroupHeader":{
"OccupyColumn":true,
"OccupiedColumns":"Column4"
},
"GroupFooter":{
"Visible":false,
"Height":0,
"PrintGridBorder":false
}
},
{
"Name":"Group3",
"ByFields":"生产厂家",
"GroupHeader":{
"OccupyColumn":true,
"OccupiedColumns":"Column5",
"VAlign":"Middle"
},
"GroupFooter":{
"Height":0
}
}
]
},
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":2,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Font":{
"Name":"宋体",
"Size":262500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"湘乡市人民医院麻醉科麻醉、精神药品专用账册([#年份#])年"
}
]
}
]
}

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":"DM3"
}
],
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":2.40771,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox1",
"Center":"Horizontal",
"Left":8.99583,
"Top":0.608542,
"Width":9.18104,
"Height":1.21708,
"Font":{
"Name":"宋体",
"Size":217500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"回收销毁记录"
}
],
"RepeatOnPage":true
}
]
}

View File

@ -1,5 +1,5 @@
{
"Version":"6.3.0.1",
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
@ -75,7 +75,7 @@
},
{
"Name":"单位",
"DBFieldName":"packUnit"
"DBFieldName":"bigUnit"
},
{
"Name":"剂型",
@ -100,10 +100,20 @@
"Type":"Binary"
},
{
"Name":"drugId"
"Name":"drugId",
"DBFieldName":"drug_Id"
},
{
"Name":"Field1"
"Name":"凭证号",
"DBFieldName":"invoiceId"
},
{
"Name":"供应单位",
"DBFieldName":"supplierDept"
},
{
"Name":"领用部门",
"DBFieldName":"receiveDept"
}
]
},
@ -113,7 +123,7 @@
"Width":1.77271
},
{
"Name":"操作类型",
"Name":"凭证号",
"Width":2.19604
},
{
@ -158,20 +168,14 @@
"ColumnContentCell":[
{
"Column":"日期",
"WordWrap":true,
"TextAlign":"MiddleCenter",
"ShrinkFontToFit":true,
"DataField":"日期"
},
{
"Column":"操作类型",
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox10",
"Dock":"Fill",
"TextAlign":"MiddleCenter"
}
]
"Column":"凭证号",
"DataField":"凭证号"
},
{
"Column":"批号",
@ -229,11 +233,11 @@
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox6",
"Type":"FieldBox",
"Name":"FieldBox14",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"Text":"药库"
"DataField":"供应单位"
}
]
},
@ -242,11 +246,11 @@
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox7",
"Type":"FieldBox",
"Name":"FieldBox15",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"Text":"门诊药房"
"DataField":"领用部门"
}
]
}
@ -270,7 +274,7 @@
},
{
"GroupTitle":false,
"Column":"操作类型",
"Column":"凭证号",
"Font":{
"Name":"宋体",
"Size":105000,
@ -395,6 +399,7 @@
"Name":"Group1",
"ByFields":"drugId",
"GroupHeader":{
"NewPage":"Before",
"PrintGridBorder":false,
"RepeatOnPage":true,
"Control":[

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

@ -252,7 +252,7 @@
},
{
"Name":"machine_id",
"Value":"DM1"
"Value":"DM3"
}
],
"ReportHeader":[

View File

@ -252,7 +252,7 @@
},
{
"Name":"machine_id",
"Value":"DM1"
"Value":"DM3"
}
],
"ReportHeader":[

View File

@ -252,7 +252,7 @@
},
{
"Name":"machine_id",
"Value":"DM1"
"Value":"DM3"
}
],
"ReportHeader":[

View File

@ -252,7 +252,7 @@
},
{
"Name":"machine_id",
"Value":"DM1"
"Value":"DM3"
}
],
"ReportHeader":[

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":"DM3"
}
],
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":1.79917,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox2",
"Left":7.59354,
"Top":0.211667,
"Width":5.60917,
"Height":1.19063,
"Font":{
"Name":"宋体",
"Size":217500,
"Bold":true,
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"发药登记表"
}
],
"RepeatOnPage":true
}
]
}

View File

@ -314,7 +314,7 @@
"Parameter":[
{
"Name":"machine_id",
"Value":"DM1"
"Value":"DM3"
}
],
"ReportHeader":[

View File

@ -0,0 +1,572 @@
{
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"Oriention":"Landscape",
"LeftMargin":1,
"TopMargin":1.42875,
"RightMargin":1,
"BottomMargin":1.8
},
"DetailGrid":{
"CenterView":true,
"IsCrossTab":true,
"FixCols":2,
"AppendBlankRow":true,
"Recordset":{
"Field":[
{
"Name":"DMYear",
"Type":"Integer"
},
{
"Name":"DMMonth",
"Type":"Integer"
},
{
"Name":"DMDay",
"Type":"Integer"
},
{
"Name":"TotalNum"
},
{
"Name":"Senddate",
"Type":"DateTime",
"Format":"HH:mm"
},
{
"Name":"SendUser"
},
{
"Name":"ReceiveUser"
},
{
"Name":"SendNum",
"Type":"Integer"
},
{
"Name":"InfactNum",
"Type":"Integer"
},
{
"Name":"EmptyNum",
"Type":"Integer"
},
{
"Name":"ReturnDate",
"Format":"HH:mm"
},
{
"Name":"ReturnUser"
},
{
"Name":"ReturnReceiveUser"
},
{
"Name":"AddUser"
},
{
"Name":"AddCheckUser"
},
{
"Name":"drugId"
},
{
"Name":"drugName"
},
{
"Name":"drugSpec"
},
{
"Name":"drawerno",
"Type":"Integer"
}
]
},
"Column":[
{
"Name":"Column4"
},
{
"Name":"Column6"
},
{
"Name":"Column31"
},
{
"Name":"Column14"
},
{
"Name":"Column19"
},
{
"Name":"Column20"
},
{
"Name":"Column36"
},
{
"Name":"Column23"
},
{
"Name":"Column24"
}
],
"ColumnContent":{
"Height":2.19604,
"ColumnContentCell":[
{
"Column":"Column4",
"TextAlign":"MiddleCenter",
"DataField":"Senddate"
},
{
"Column":"Column6",
"TextAlign":"MiddleCenter",
"DataField":"SendUser"
},
{
"Column":"Column31",
"TextAlign":"MiddleCenter",
"DataField":"ReceiveUser"
},
{
"Column":"Column14",
"TextAlign":"MiddleCenter",
"DataField":"SendNum"
},
{
"Column":"Column19",
"TextAlign":"MiddleCenter",
"DataField":"InfactNum"
},
{
"Column":"Column20",
"TextAlign":"MiddleCenter",
"DataField":"EmptyNum"
},
{
"Column":"Column36",
"TextAlign":"MiddleCenter",
"DataField":"ReturnDate"
},
{
"Column":"Column23",
"TextAlign":"MiddleCenter",
"DataField":"ReturnUser"
},
{
"Column":"Column24",
"TextAlign":"MiddleCenter",
"DataField":"ReturnReceiveUser"
}
]
},
"ColumnTitle":{
"Height":4.10104,
"RepeatStyle":"OnGroupHeaderPage",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column3",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column12",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column25",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column26",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column4",
"TextAlign":"BottomCenter",
"Text":"发药\r\n时间"
},
{
"GroupTitle":false,
"Column":"Column6",
"TextAlign":"BottomCenter",
"Text":"发药者"
}
],
"TextAlign":"MiddleRight",
"Text":"交接状态",
"BorderCustom":true,
"Border":{
"Styles":"[DrawBottom]"
}
}
]
}
],
"TextAlign":"MiddleCenter",
"Text":"药品信息",
"BorderCustom":true,
"Border":{
"Styles":"[DrawRight]"
}
}
],
"BorderCustom":true,
"Border":{
"Styles":"[DrawRight]"
}
},
{
"GroupTitle":true,
"Name":"品名",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"规格",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"总基数",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column30",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column31",
"TextAlign":"BottomCenter",
"Text":"领药者"
}
]
}
],
"TextAlign":"MiddleCenter",
"Text":"总基数"
}
],
"TextAlign":"MiddleCenter",
"Text":"规格"
}
],
"TextAlign":"MiddleCenter",
"Text":"品名"
},
{
"GroupTitle":true,
"Name":"drugname",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"drugspec",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"totalnum",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"发药",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column14",
"TextAlign":"BottomCenter",
"Text":"实\r\n发\r\n数"
}
],
"TextAlign":"MiddleCenter",
"Text":"发药"
},
{
"GroupTitle":true,
"Name":"还药",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column19",
"TextAlign":"BottomCenter",
"Text":"实\r\n物\r\n数"
},
{
"GroupTitle":false,
"Column":"Column20",
"TextAlign":"BottomCenter",
"Text":"空\r\n安\r\n瓿"
}
],
"TextAlign":"MiddleCenter",
"Text":"还药"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#TotalNum#]"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#drugSpec#]"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#drugName#]"
},
{
"GroupTitle":false,
"Column":"Column36",
"TextAlign":"BottomCenter",
"Text":"还药\r\n时间"
},
{
"GroupTitle":false,
"Column":"Column23",
"TextAlign":"BottomCenter",
"Text":"还药者"
},
{
"GroupTitle":false,
"Column":"Column24",
"TextAlign":"BottomCenter",
"Text":"接收者"
}
]
},
"Group":[
{
"Name":"Group1",
"GroupHeader":{
"Height":0.79375,
"PrintGridBorder":false,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox7",
"AlignColumnSide":"Right",
"Left":19.394,
"Top":0.211667,
"Width":7.59354,
"Height":0.396875,
"TextAlign":"MiddleRight",
"Text":"[#DMMonth#]月[#DMDay#]日"
}
]
},
"GroupFooter":{
"Height":2,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox4",
"AlignColumn":"Column31",
"AlignColumnEx":"Column4",
"Width":8.96938,
"Height":2,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"日消耗总计(支)"
},
{
"Type":"StaticBox",
"Name":"StaticBox5",
"AlignColumn":"Column14",
"Left":8.96938,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"安瓿"
},
{
"Type":"MemoBox",
"Name":"MemoBox2",
"AlignColumn":"Column14",
"Left":8.96938,
"Top":1.00542,
"Width":2.9898,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(EmptyNum)#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox6",
"AlignColumn":"Column19",
"Left":11.9592,
"Width":2.99,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"处方"
},
{
"Type":"MemoBox",
"Name":"MemoBox8",
"AlignColumn":"Column19",
"Left":11.9592,
"Top":1.00542,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(SendNum-InfactNum)#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox7",
"AlignColumn":"Column20",
"Left":14.949,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"补充"
},
{
"Type":"MemoBox",
"Name":"MemoBox9",
"AlignColumn":"Column20",
"Left":14.949,
"Top":1.00542,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(SendNum-InfactNum)#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox8",
"AlignColumnSide":"Right",
"AlignColumn":"Column36",
"Left":17.9123,
"Width":3,
"Height":1,
"Border":{
"Styles":"[DrawBottom]"
},
"TextAlign":"BottomRight",
"Text":"补充者"
},
{
"Type":"MemoBox",
"Name":"MemoBox10",
"AlignColumnSide":"Right",
"AlignColumn":"Column36",
"Left":17.9123,
"Top":1.00542,
"Width":3,
"Height":1,
"TextAlign":"MiddleRight",
"Text":"[#AddUser#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox9",
"AlignColumn":"Column24",
"Left":23.8919,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawLeft|DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"核对者"
},
{
"Type":"MemoBox",
"Name":"MemoBox11",
"AlignColumn":"Column24",
"Left":23.8919,
"Top":1.00542,
"Width":3.02,
"Height":1,
"Border":{
"Styles":"[DrawLeft|DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#AddCheckUser#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox10",
"AlignColumnSide":"Left",
"AlignColumn":"Column23",
"Left":20.9285,
"Width":3,
"Height":1,
"Border":{
"Styles":"[DrawBottom]"
}
}
]
}
}
],
"CrossTab":{
"PercentFormat":"0.##%",
"HCrossFields":"drugId;ReturnDate;ReturnUser;ReturnReceiveUser;AddUser;AddCheckUser",
"VCrossFields":"Senddate;drawerno",
"ListCols":3,
"TotalCols":3
}
},
"Parameter":[
{
"Name":"machine_id"
},
{
"Name":"startDate",
"DataType":"DateTime"
},
{
"Name":"endDate",
"DataType":"DateTime"
}
],
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":1.79917,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"Font":{
"Name":"宋体",
"Size":217500,
"Bold":true,
"Charset":134
},
"ShrinkFontToFit":true,
"TextAlign":"MiddleCenter",
"Text":"麻醉科小药箱麻醉、精神药品(注射剂)使用与交接记录([#DMYear#])年"
}
],
"RepeatOnPage":true
}
]
}

View File

@ -0,0 +1,805 @@
{
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
"Weight":400,
"Charset":134
},
"Printer":{
"Oriention":"Landscape",
"LeftMargin":1,
"TopMargin":1.42875,
"RightMargin":1,
"BottomMargin":1.8
},
"DetailGrid":{
"CenterView":true,
"IsCrossTab":true,
"FixCols":2,
"AppendBlankRow":true,
"AppendBlankRowAtLast":true,
"Recordset":{
"Field":[
{
"Name":"DMYear",
"Type":"Integer"
},
{
"Name":"DMMonth",
"Type":"Integer"
},
{
"Name":"DMDay",
"Type":"Integer"
},
{
"Name":"TotalNum"
},
{
"Name":"Senddate",
"Type":"DateTime",
"Format":"HH:mm"
},
{
"Name":"SendUser"
},
{
"Name":"ReceiveUser"
},
{
"Name":"SendNum",
"Type":"Integer"
},
{
"Name":"InfactNum",
"Type":"Integer"
},
{
"Name":"EmptyNum",
"Type":"Integer"
},
{
"Name":"ReturnDate",
"Format":"HH:mm"
},
{
"Name":"ReturnUser"
},
{
"Name":"ReturnReceiveUser"
},
{
"Name":"AddUser"
},
{
"Name":"AddCheckUser"
},
{
"Name":"drugId"
},
{
"Name":"drugName"
},
{
"Name":"drugSpec"
},
{
"Name":"drawerno",
"Type":"Integer"
},
{
"Name":"安瓿",
"Type":"Integer",
"DBFieldName":"usebottle"
},
{
"Name":"处方",
"Type":"Integer",
"DBFieldName":"useorderno"
},
{
"Name":"补充",
"Type":"Integer",
"DBFieldName":"useadd"
},
{
"Name":"补充者",
"DBFieldName":"AddUser"
},
{
"Name":"核对者",
"DBFieldName":"AddCheckUser"
},
{
"Name":"SenddateMonthDay"
},
{
"Name":"ID",
"DBFieldName":" ID"
}
]
},
"Column":[
{
"Name":"Column4"
},
{
"Name":"Column6"
},
{
"Name":"Column31"
},
{
"Name":"Column14"
},
{
"Name":"Column19",
"Width":3.01625
},
{
"Name":"Column20"
},
{
"Name":"Column36"
},
{
"Name":"Column23"
},
{
"Name":"Column24"
}
],
"ColumnContent":{
"Height":2.19604,
"ColumnContentCell":[
{
"Column":"Column4",
"TextAlign":"MiddleCenter",
"DataField":"Senddate"
},
{
"Column":"Column6",
"TextAlign":"MiddleCenter",
"DataField":"SendUser"
},
{
"Column":"Column31",
"TextAlign":"MiddleCenter",
"DataField":"ReceiveUser"
},
{
"Column":"Column14",
"TextAlign":"MiddleCenter",
"DataField":"SendNum"
},
{
"Column":"Column19",
"TextAlign":"MiddleCenter",
"DataField":"InfactNum"
},
{
"Column":"Column20",
"TextAlign":"MiddleCenter",
"DataField":"EmptyNum"
},
{
"Column":"Column36",
"TextAlign":"MiddleCenter",
"DataField":"ReturnDate"
},
{
"Column":"Column23",
"TextAlign":"MiddleCenter",
"DataField":"ReturnUser"
},
{
"Column":"Column24",
"TextAlign":"MiddleCenter",
"DataField":"ReturnReceiveUser"
}
]
},
"ColumnTitle":{
"Height":4.10104,
"RepeatStyle":"OnGroupHeaderPage",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column3",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column12",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column25",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column26",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column4",
"TextAlign":"BottomCenter",
"Text":"发药\r\n时间"
},
{
"GroupTitle":false,
"Column":"Column6",
"TextAlign":"BottomCenter",
"Text":"发药者"
}
],
"TextAlign":"MiddleRight",
"Text":"交接状态",
"BorderCustom":true,
"Border":{
"Styles":"[DrawBottom]"
}
}
]
}
],
"TextAlign":"MiddleCenter",
"Text":"药品信息",
"BorderCustom":true,
"Border":{
"Styles":"[DrawRight]"
}
}
],
"BorderCustom":true,
"Border":{
"Styles":"[DrawRight]"
}
},
{
"GroupTitle":true,
"Name":"品名",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"规格",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"总基数",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"Column30",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column31",
"TextAlign":"BottomCenter",
"Text":"领药者"
}
]
}
],
"TextAlign":"MiddleCenter",
"Text":"总基数"
}
],
"TextAlign":"MiddleCenter",
"Text":"规格"
}
],
"TextAlign":"MiddleCenter",
"Text":"品名"
},
{
"GroupTitle":true,
"Name":"drugname",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"drugspec",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"totalnum",
"ColumnTitleCell":[
{
"GroupTitle":true,
"Name":"发药",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column14",
"TextAlign":"BottomCenter",
"Text":"实\r\n发\r\n数"
}
],
"TextAlign":"MiddleCenter",
"Text":"发药"
},
{
"GroupTitle":true,
"Name":"还药",
"ColumnTitleCell":[
{
"GroupTitle":false,
"Column":"Column19",
"TextAlign":"BottomCenter",
"Text":"实\r\n物\r\n数"
},
{
"GroupTitle":false,
"Column":"Column20",
"TextAlign":"BottomCenter",
"Text":"空\r\n安\r\n瓿"
}
],
"TextAlign":"MiddleCenter",
"Text":"还药"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#TotalNum#]"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#drugSpec#]"
}
],
"TextAlign":"MiddleCenter",
"Text":"[#drugName#]"
},
{
"GroupTitle":false,
"Column":"Column36",
"TextAlign":"BottomCenter",
"Text":"还药\r\n时间"
},
{
"GroupTitle":false,
"Column":"Column23",
"TextAlign":"BottomCenter",
"Text":"还药者"
},
{
"GroupTitle":false,
"Column":"Column24",
"TextAlign":"BottomCenter",
"Text":"接收者"
}
]
},
"Group":[
{
"Name":"Group1",
"ByFields":"SenddateMonthDay",
"GroupHeader":{
"Height":0.79375,
"PrintGridBorder":false,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox17",
"AlignColumnSide":"Right",
"Left":19.3675,
"Top":0.211667,
"Width":7.59354,
"Height":0.396875,
"TextAlign":"MiddleRight",
"Text":"[#DMMonth#]月[#DMDay#]日"
}
]
},
"GroupFooter":{
"Height":2,
"RepeatOnPage":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox4",
"AlignColumn":"Column31",
"AlignColumnEx":"Column4",
"Width":8.96938,
"Height":2,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"日消耗总计(支)"
},
{
"Type":"StaticBox",
"Name":"StaticBox5",
"AlignColumn":"Column14",
"Left":8.96938,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"安瓿"
},
{
"Type":"StaticBox",
"Name":"StaticBox6",
"AlignColumn":"Column19",
"Left":11.9592,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"处方"
},
{
"Type":"StaticBox",
"Name":"StaticBox7",
"AlignColumn":"Column20",
"Left":14.9754,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"补充"
},
{
"Type":"StaticBox",
"Name":"StaticBox9",
"Anchor":"[Left|Top|Right]",
"ShiftMode":"Never",
"AlignColumn":"Column24",
"Left":23.9448,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"核对者"
},
{
"Type":"FieldBox",
"Name":"FieldBox5",
"ShiftMode":"Never",
"AlignColumn":"Column24",
"Left":23.9448,
"Top":1.00542,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"DataField":"核对者"
},
{
"Type":"MemoBox",
"Name":"MemoBox18",
"AlignColumn":"Column14",
"Left":8.96938,
"Top":1.00542,
"Width":2.99,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(EmptyNum)#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox19",
"AlignColumn":"Column19",
"Left":11.9592,
"Top":1.00542,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(EmptyNum)#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox20",
"AlignColumn":"Column20",
"Left":14.9754,
"Top":1.00542,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter",
"Text":"[#Sum(EmptyNum)#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox17",
"Anchor":"[]",
"ShiftMode":"Never",
"AlignColumn":"Column36",
"AlignColumnEx":"Column23",
"Left":17.9652,
"Width":5.95313,
"Height":1.00542,
"Border":{
"Styles":"[DrawBottom]"
},
"TextAlign":"BottomRight",
"Text":"补充者"
},
{
"Type":"FieldBox",
"Name":"FieldBox6",
"ShiftMode":"Never",
"AlignColumn":"Column36",
"AlignColumnEx":"Column23",
"Left":17.9652,
"Top":1.00542,
"Width":5.95313,
"Height":1.01,
"TextAlign":"MiddleRight",
"DataField":"补充者"
},
{
"Type":"MemoBox",
"Name":"MemoBox21",
"AlignColumn":"Column23",
"Left":20.955,
"Width":2.98979,
"Height":1.01,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter"
},
{
"Type":"StaticBox",
"Name":"StaticBox18",
"AlignColumn":"Column23",
"Left":20.955,
"Top":1.00542,
"Width":2.98979,
"Height":1.01,
"Border":{
"Styles":"[DrawRight]"
},
"TextAlign":"MiddleCenter"
}
],
"AppendBlankRowExclude":true
}
}
],
"CrossTab":{
"PercentFormat":"0.##%",
"HCrossFields":"drugId",
"VCrossFields":"Senddate;ReturnDate",
"ListCols":3,
"TotalCols":3,
"TotalExcludeColumns":"Column36;Column23;Column24"
}
},
"Parameter":[
{
"Name":"machine_id"
},
{
"Name":"startDate",
"DataType":"DateTime"
},
{
"Name":"endDate",
"DataType":"DateTime"
}
],
"ReportHeader":[
{
"Name":"ReportHeader1",
"Height":1.79917,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox1",
"Dock":"Fill",
"Center":"Both",
"Font":{
"Name":"宋体",
"Size":217500,
"Bold":true,
"Charset":134
},
"ShrinkFontToFit":true,
"TextAlign":"MiddleCenter",
"Text":"麻醉科小药箱麻醉、精神药品(注射剂)使用与交接记录([#DMYear#])年"
}
],
"RepeatOnPage":true
},
{
"Name":"ReportHeader2",
"Height":0,
"Control":[
{
"Type":"MemoBox",
"Name":"MemoBox7",
"AlignColumnSide":"Right",
"Left":19.394,
"Top":0.211667,
"Width":7.59354,
"Height":0.396875,
"TextAlign":"MiddleRight",
"Text":"[#DMMonth#]月[#DMDay#]日"
}
]
}
],
"ReportFooter":[
{
"Name":"ReportFooter1",
"Visible":false,
"KeepTogether":false,
"Height":0,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox11",
"AlignColumn":"Column31",
"AlignColumnEx":"Column4",
"Width":8.99583,
"Height":2,
"Border":{
"Styles":"[DrawLeft|DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"日消耗总计(支)"
},
{
"Type":"StaticBox",
"Name":"StaticBox12",
"AlignColumn":"Column24",
"Left":23.9448,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawLeft|DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"核对者"
},
{
"Type":"StaticBox",
"Name":"StaticBox13",
"AlignColumn":"Column14",
"Left":8.99583,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"安瓿"
},
{
"Type":"MemoBox",
"Name":"MemoBox12",
"AlignColumn":"Column14",
"Left":8.99583,
"Top":1.00542,
"Width":2.9898,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"[#安瓿#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox14",
"AlignColumn":"Column19",
"Left":11.9856,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"处方"
},
{
"Type":"MemoBox",
"Name":"MemoBox13",
"AlignColumn":"Column19",
"Left":11.9856,
"Top":1.00542,
"Width":3.01625,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"[#处方#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox15",
"AlignColumn":"Column20",
"Left":15.0019,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"补充"
},
{
"Type":"MemoBox",
"Name":"MemoBox14",
"AlignColumn":"Column20",
"Left":15.0019,
"Top":1.00542,
"Width":2.98979,
"Height":1,
"Border":{
"Styles":"[DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"[#补充#]"
},
{
"Type":"StaticBox",
"Name":"StaticBox16",
"AlignColumn":"Column36",
"AlignColumnEx":"Column23",
"Left":17.9917,
"Width":5.95313,
"Height":1,
"Border":{
"Styles":"[DrawBottom]"
},
"TextAlign":"BottomCenter",
"Text":"补充者"
},
{
"Type":"MemoBox",
"Name":"MemoBox15",
"AlignColumn":"Column36",
"AlignColumnEx":"Column23",
"Left":17.9917,
"Top":1.00542,
"Width":5.95313,
"Height":1,
"Border":{
"Styles":"[DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"[#补充者#]"
},
{
"Type":"MemoBox",
"Name":"MemoBox16",
"AlignColumn":"Column24",
"Left":23.9448,
"Top":1.00542,
"Width":3.02,
"Height":1,
"Border":{
"Styles":"[DrawLeft|DrawRight|DrawBottom]"
},
"TextAlign":"MiddleCenter",
"Text":"[#核对者#]"
}
],
"CenterWithDetailGrid":false
}
]
}

View File

@ -0,0 +1,380 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Report;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace DM_Weight.ViewModels
{
public class AccountWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
public static AccountWindowViewModel vm;
//private int _pageNum = 1;
//public int PageNum
//{
// get => _pageNum;
// set
// {
// SetProperty(ref _pageNum, value);
// RequestData();
// }
//}
//private int _pageCount = 1;
//public int PageCount
//{
// get => _pageCount;
// set
// {
// SetProperty(ref _pageCount, value);
// }
//}
//private int _pageSize = 8;
//public int PageSize
//{
// get => _pageSize;
// set
// {
// SetProperty(ref _pageSize, value);
// }
//}
//private int _totalCount = 0;
//public int TotalCount
//{
// get => _totalCount;
// set
// {
// SetProperty(ref _totalCount, value);
// }
//}
private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
private DateTime? nowDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
public DateTime? StartDate
{
get => _startDate;
set
{
if (value != null)
{
SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0));
}
else
{
SetProperty(ref _startDate, value);
}
RequestData();
}
}
private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
public DateTime? EndDate
{
get => _endDate;
set
{
if (value != null)
{
TimeSpan ershisi = new TimeSpan(23, 59, 59);
SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59));
}
else
{
SetProperty(ref _endDate, value);
}
RequestData();
}
}
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>
/// 账册
/// </summary>
private List<AccountBookG2> _accountList = new();
public List<AccountBookG2> AccountList
{
get => _accountList;
set => SetProperty(ref _accountList, value);
}
/// <summary>
/// 药品
/// </summary>
private List<DrugInfo>? _drugInfos;
public List<DrugInfo>? DrugInfos
{
get => _drugInfos;
set => SetProperty(ref _drugInfos, value);
}
private DrugInfo? _drugInfo;
public DrugInfo? DrugInfo
{
get => _drugInfo;
set
{
SetProperty(ref _drugInfo, value);
//if (_drugInfo != null)
//{
//DrugManuNos = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
//}
RequestData();
}
}
/// <summary>
/// 账册类型1入2出3总结存
/// </summary>
private List<AccountType> _accountTypeList = new List<AccountType>() {
new AccountType
{
AccountTypeName="借入",
AccountTypeValue=1
},
new AccountType
{
AccountTypeName="发出",
AccountTypeValue=2
},
new AccountType
{
AccountTypeName="日结存",
AccountTypeValue=3
},
new AccountType
{
AccountTypeName="总结存",
AccountTypeValue=4
}
};
public List<AccountType>? AccountTypeList
{
get => _accountTypeList;
set
{
SetProperty(ref _accountTypeList, value);
RequestData();
}
}
private AccountType? _accountType;
public AccountType AccountType
{
get => _accountType;
set
{
SetProperty(ref _accountType, value);
RequestData();
}
}
/// <summary>
/// 药品类型
/// </summary>
private List<DrugType> _drugTypeList = new List<DrugType>()
{
new DrugType{ TypeValue=1,TypeName="精一"},
new DrugType{TypeValue=2,TypeName="精二"}
};
public List<DrugType>? DrugTypeList
{
get => _drugTypeList;
set
{
SetProperty(ref _drugTypeList, value);
}
}
private DrugType? _drugType;
public DrugType? _DrugType
{
get => _drugType; set
{
SetProperty(ref _drugType, value);
RequestData();
}
}
//MachineRecordService _machineRecordService;
IEventAggregator _eventAggregator;
////private SqlSugarScope SqlSugarHelper.Db;
public AccountWindowViewModel( IEventAggregator eventAggregator)
{
//_machineRecordService = machineRecord;
////this.SqlSugarHelper.Db = sqlSugarScope;
_eventAggregator = eventAggregator;
vm = this;
}
void RequestData()
{
int totalCount = 0;
AccountList = ReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, _DrugType == null ? 0 : _DrugType.TypeValue, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
//for (int i = 0; i < accountList.Count; i++)
//{
// if (accountList[i].DrugInfo is null)
// {
// DrugInfo drug= new DrugInfo();
// drug.DrugId = accountList[i].DrugId;
// drug.DrugName = accountList[i].DrugName;
// drug.DrugSpec = accountList[i].DrugSpec;
// drug.Dosage= accountList[i].Dosage;
// drug.PackUnit= accountList[i].PackUnit;
// drug.Manufactory= accountList[i].Manufactory;
// accountList[i].DrugInfo= drug;
// }
//}
//ICollectionView vw = CollectionViewSource.GetDefaultView(accountList);
//vw.GroupDescriptions.Add(new PropertyGroupDescription("DrugInfo"));
}
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
DrugInfo = list[0];
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
/// <summary>
/// 导出发药登记表
/// </summary>
public DelegateCommand DownloadOrderUser
{
get => new DelegateCommand(() => {
GridReportUtil.OrderUseReport(StartDate, EndDate, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
});
}
/// <summary>
/// 导出账册
/// </summary>
public DelegateCommand DownloadAccountBook
{
get => new DelegateCommand(() =>
{
GridReportUtil.PrintReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
});
}
/// <summary>
/// 刷新
/// </summary>
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
public bool KeepAlive => true;
public void UpdateComboBoxItems(string text)
{
string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
d.manufactory,d.max_stock FROM `drug_info` d";
if (string.IsNullOrEmpty(text))
{
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
return;
}
if (DrugInfos != null)
{
DrugInfos.Clear();
}
//DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text) || di.DrugId.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
//药品信息
GetAllDrugInfos();
//查询表格数据
RequestData();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
private List<AccountBookG2> ReportAccountBook(DateTime? startDate, DateTime? endDate, int type,int drugType, string drug_id = "")
{
DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
//string jj_machine_id = (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5");
string SQL = $@" SELECT ac.create_date as CreateDate, ac.TYPE,
if(ac.type in(1,2),0,ac.yesterday_quantity) as YQuantity,if(ac.type in(3,4),0,ac.add_quantity) as AddQuantity,if(ac.type in(3,4),0,ac.out_quantity) as OutQuantity,
if(ac.type in(1,2),0,ac.manu_stock) as ManuStock,ac.total_stock, -- if(ac.type in(1,2),0,ac.total_stock) as TotalStock,
ac.invoice_no as InvoiceNo, ac.manu_no as ManuNo,ac.eff_date as EffDate,di.drug_id,di.drug_name as DrugName,di.drug_spec as DrugSpec,di.manufactory as Manufactory,di.pack_unit,di.dosage,u1.user_name as OperatorName,u2.user_name as ReviewerName
FROM account_book_g2 ac left join drug_info di on ac.drug_id=di.drug_id left join user_list u1 on ac.user_id1=u1.id left join user_list u2 on ac.user_id2=u2.id
WHERE ac.machine_id ='{p_machine_id}' and create_time>'{p_startDate}' AND create_time<'{p_endDate}' ";
//if (!string.IsNullOrEmpty(drug_id))
//{
// SQL += " AND ac.drug_id='" + drug_id + "' ";
//}
if (type > 0)
{
if (type == 1)
{
SQL += " AND ac.add_quantity>0 ";
}
if (type == 2)
{
SQL += " AND ac.out_quantity>0 ";
}
if (type == 3)
{
SQL += " AND type=3 ";
}
if (type == 4)
{
SQL += " AND type=4 ";
}
}
if (drugType > 0)
{
SQL += $" AND di.Drug_type={drugType}";
}
SQL += " ORDER BY ac.create_date desc,ac.drug_id";
//ChannelStocks = q.Select(it => { it.CheckQuantity = it.Quantity; return it; }).ToList();
List<AccountBookG2> accountList = SqlSugarHelper.Db.SqlQueryable<AccountBookG2>(SQL)
//.AddParameters(new
//{
// machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
//})
//.Select(it => new { o = new AccountModel(), i = new DrugInfo() })
//.Select(it=>new AccountModel())
//.Select("*") //让上面一行不生成sql
.ToList();
//List<AccountModel> accountList=new List<AccountModel>();
return accountList;
}
}
}

View File

@ -101,7 +101,7 @@ namespace DM_Weight.ViewModels
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "DrawerAddDrugWindow")
if (msg.WindowName == "AddDrugControl")
{
switch (msg.EventType)
{
@ -140,10 +140,6 @@ namespace DM_Weight.ViewModels
}
}
if (msg.WindowName == "AddDrugControl")
{
}
}
@ -188,14 +184,13 @@ namespace DM_Weight.ViewModels
get => new DelegateCommand(() =>
{
Status = 1;
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
_portUtil.SpeakAsync($"正在打开" + DrawerNo + "号抽屉");
try
{
//List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
List<ChannelList> singleChannels = ChannelLsts.FindAll(it => it.BoardType != 1);
_portUtil.WindowName = "DrawerAddDrugWindow";
_portUtil.WindowName = "AddDrugControl";
_portUtil.Operate = true;
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
@ -300,8 +295,8 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = it.AddQuantity,
Type = 1,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
}
return true;

View File

@ -0,0 +1,611 @@
using DM_Weight.Common;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.Report;
using DM_Weight.select;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class AddReportDateViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
//private int _pageNum = 1;
//public int PageNum
//{
// get => _pageNum;
// set
// {
// SetProperty(ref _pageNum, value);
// RequestData();
// }
//}
//private int _pageCount = 1;
//public int PageCount
//{
// get => _pageCount;
// set
// {
// SetProperty(ref _pageCount, value);
// }
//}
//private int _pageSize = 8;
//public int PageSize
//{
// get => _pageSize;
// set
// {
// SetProperty(ref _pageSize, value);
// }
//}
//private int _totalCount = 0;
//public int TotalCount
//{
// get => _totalCount;
// set
// {
// SetProperty(ref _totalCount, value);
// }
//查询9种药品
IDialogService _dialogService;
private ObservableCollection<RejectionReport> _rejectionReportList = new ObservableCollection<RejectionReport>();//= staticRejectionReportList;
public ObservableCollection<RejectionReport> RejectionReportList
{
get => _rejectionReportList;
set
{
SetProperty(ref _rejectionReportList, value);
}
}
//public static AddReportDateViewModel vm;
//操作人(第一个人)
private List<UserList> _sendUserList = new List<UserList>();
public List<UserList> SendUserList
{
get => _sendUserList;
set
{
SetProperty(ref _sendUserList, value);
}
}
private UserList _sendUser = new UserList();
public UserList SendUser
{
get => _sendUser;
set
{
SetProperty(ref _sendUser, value);
}
}
//复核人(第二个人)
private List<UserList> _sendUserCheckList = new List<UserList>();
public List<UserList> SendUserCheckList
{
get => _sendUserCheckList;
set
{
SetProperty(ref _sendUserCheckList, value);
}
}
private UserList _sendUserCheck = new UserList();
public UserList SendUserCheck
{
get => _sendUserCheck;
set
{
SetProperty(ref _sendUserCheck, value);
}
}
//还药人
private List<UserList> _returnUserList = new List<UserList>();
public List<UserList> ReturnUserList
{
get => _returnUserList;
set
{
SetProperty(ref _returnUserList, value);
}
}
private UserList _returnUser = new UserList();
public UserList ReturnUser
{
get => _returnUser;
set
{
SetProperty(ref _returnUser, value);
}
}
//还药(第二个人)接收者
private List<UserList> _returnUserCheckList = new List<UserList>();
public List<UserList> ReturnUserCheckList
{
get => _returnUserCheckList;
set
{
SetProperty(ref _returnUserCheckList, value);
}
}
private UserList _returnUserCheck = new UserList();
public UserList ReturnUserCheck
{
get => _returnUserCheck;
set
{
SetProperty(ref _returnUserCheck, value);
}
}
//补充者
private List<UserList> _addUserList = new List<UserList>();
public List<UserList> AddUserList
{
get => _addUserList;
set
{
SetProperty(ref _addUserList, value);
}
}
private UserList _addUser = new UserList();
public UserList AddUser
{
get => _addUser;
set
{
SetProperty(ref _addUser, value);
}
}
//补充者(第二个人)核对者
private List<UserList> _addUserCheckList = new List<UserList>();
public List<UserList> AddUserCheckList
{
get => _addUserCheckList;
set
{
SetProperty(ref _addUserCheckList, value);
}
}
private UserList _addUserCheck = new UserList();
public UserList AddUserCheck
{
get => _addUserCheck;
set
{
SetProperty(ref _addUserCheck, value);
}
}
//private RejectionReport _Report = new RejectionReport() { SendDate = DateTime.Now, ReturnTime = DateTime.Now.ToString(), };
//public RejectionReport RejReport
//{
// get => _Report;
// set
// {
// SetProperty(ref _Report, value);
// }
//}
IEventAggregator _eventAggregator;
public AddReportDateViewModel(IEventAggregator eventAggregator, IDialogService DialogService)
{
_eventAggregator = eventAggregator;
_dialogService = DialogService;
//vm = this;
}
//private List<DrugInfo> _drugInfos;
//public List<DrugInfo> DrugInfos
//{
// get { return _drugInfos; }
// set { SetProperty(ref _drugInfos, value); }
//}
//private DrugInfo _selectedDrug = new();
//public DrugInfo SelectedDrug
//{
// get
// {
// return _selectedDrug;
// }
// set
// {
// if (value != null)
// {
// SetProperty(ref _selectedDrug, value);
// GetManuNos();
// }
// else
// {
// SetProperty(ref _selectedDrug, new());
// Manunos = null;
// SelectedDrug.drugBase = new();
// }
// }
//}
//public static List<OrderTakeSelect> StaticSelects = new()
//{
// new OrderTakeSelect
// {
// Code = "DrugName",
// Name = "药品名称"
// },
// new OrderTakeSelect
// {
// Code = "PyCode",
// Name = "拼音码"
// },
// new OrderTakeSelect
// {
// Code = "DrugBarcode",
// Name = "药品条码"
// },
// new OrderTakeSelect
// {
// Code = "DrugId",
// Name = "药品编码"
// }
//};
//private List<OrderTakeSelect> _selects = StaticSelects;
//public List<OrderTakeSelect> Selects
//{
// get { return _selects; }
// set
// {
// SetProperty(ref _selects, value);
// }
//}
//private OrderTakeSelect _selectedItem = StaticSelects[0];
///// <summary>
///// 查询条件 查询字段
///// </summary>
//public OrderTakeSelect SelectedItem
//{
// get { return _selectedItem; }
// set
// {
// SetProperty(ref _selectedItem, value);
// RequestData();
// }
//}
//private string? _searchValue;
///// <summary>
///// 查询条件 查询字段值
///// </summary>
//public string? SearchValue
//{
// get { return _searchValue; }
// set
// {
// SetProperty(ref _searchValue, value);
// RequestData();
// }
//}
private List<DrugManuNo> _manunos;
public List<DrugManuNo> Manunos
{
get { return _manunos; }
set { SetProperty(ref _manunos, value); }
}
private DrugManuNo _selectedManuno = new DrugManuNo();
public DrugManuNo SelectedManuno
{
get { return _selectedManuno; }
set { SetProperty(ref _selectedManuno, value ?? new()); }
}
public bool KeepAlive => false;
private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
public DateTime? StartDate
{
get => _startDate;
set
{
if (value != null)
{
SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0));
}
else
{
SetProperty(ref _startDate, value);
}
}
}
//发药时间
private DateTime _sendDate = DateTime.Now;
public DateTime SendDate
{
get => _sendDate;
set
{
SetProperty(ref _sendDate, value);
}
}
//还药时间
private string _returnTime = string.Empty;
public string ReturnTime
{
get => _returnTime;
set
{
SetProperty(ref _returnTime, value);
}
}
private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
public DateTime? EndDate
{
get => _endDate;
set
{
if (value != null)
{
TimeSpan ershisi = new TimeSpan(23, 59, 59);
SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59));
}
else
{
SetProperty(ref _endDate, value);
}
}
}
//修改药品
public DelegateCommand EditDrugName
{
get => new DelegateCommand(async () =>
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
//dialogParameters.Add("orderInfo", SelectedOrder);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ReportDrugNameDialog", dialogParameters, DoDialogResult, "RootDialog");
});
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
GetAllDrugInfos();
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
public DelegateCommand Download
{
get => new DelegateCommand(() =>
{
GridReportUtil.RejectionReport(StartDate, EndDate);
});
}
public DelegateCommand AddReportDateCommand
{
get => new DelegateCommand(() =>
{
try
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
if (RejectionReportList != null && RejectionReportList.Count > 0)
{
int iRet = 0;
for (int i = 0; i < RejectionReportList.Count; i++)
{
RejectionReport report = RejectionReportList[i];
iRet = SqlSugarHelper.Db.Insertable(new RejectionReport()
{
SendDate = SendDate,
SendUser = SendUser.Nickname,
ReceiveUser = SendUserCheck.Nickname,//Jiaojie_ChannelStocks
RealNum = report.RealNum, //实发、实物、空安瓿三个值一样,要求写一个即可避免他们重复输入
ReturnTime = ReturnTime,
ReturnUser = ReturnUser.UserName,
ReturnReceiveUser = ReturnUserCheck.Nickname,//Jiaojie_ChannelStocks
InfactNum = report.RealNum,
EmptyNum = report.RealNum,
AddUser = AddUser.UserName,
AddCheckUser = AddUserCheck.Nickname,//Jiaojie_ChannelStocks
UseBottle = report.UseBottle,
UseOrderNo = report.UseOrderNo,
UseAdd = report.UseAdd,
DrugId = report.DrugId,
DrugName = report.DrugName,
DrugSpec = report.DrugSpec,
BaseNum = report.BaseNum + "支",
OperationTime = DateTime.Now
}).ExecuteCommand();
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请输入数据",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return false;
}
return true;
});
if (f.Data)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "保存成功",
Type = MsgType.INFO
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "日消耗保存失败,数据异常",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "日消耗保存失败,抛出异常",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
//public void UpdateComboBoxItems(string text)
//{
// string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
// d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
// if (string.IsNullOrEmpty(text))
// {
// DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
// return;
// }
// if (DrugInfos != null)
// {
// DrugInfos.Clear();
// }
// DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
//}
//接收导航传过来的参数
public void OnNavigatedTo(NavigationContext navigationContext)
{
//查询表格数据
//RequestData();
//获取用户数据
GetUsers();
GetAllDrugInfos();
}
private void GetAllDrugInfos()
{
//var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
//DrugInfos = list;
string str = "SELECT d.drug_id,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec,db.baseQuantity as PyCode FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
if (ConfigurationManager.AppSettings["DrugNames"] != null)
{
str += " where d.drug_id in (" + CommonClass.ReadAppSetting("DrugNames") + ")";
}
List<DrugInfo> DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
if (DrugInfos != null && DrugInfos.Count > 0)
{
RejectionReportList.Clear();
for (int i = 0; i < DrugInfos.Count; i++)
{
RejectionReport report = new RejectionReport();
report.DrugId = DrugInfos[i].DrugId;
report.DrugName = DrugInfos[i].DrugName;
report.DrugSpec = DrugInfos[i].DrugSpec;
report.InfactNum = 0;
report.RealNum = 0;
report.BaseNum = DrugInfos[i].PyCode;
RejectionReportList.Add(report);
}
}
}
//void GetManuNos()
//{
// Manunos = SqlSugarHelper.Db.Queryable<DrugManuNo>()
// .WhereIF(SelectedDrug != null, (di) => di.DrugId.Equals(SelectedDrug.DrugId))
// .Select(di => di)
// .ToList();
//}
//void RequestData()
//{
// int totalCount = 0;
// DrugInfos = SqlSugarHelper.Db.Queryable<DrugInfo>()
// .Includes(di => di.drugBase)
// .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (di) => di.DrugId.ToString().Contains(SearchValue))
// .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (di) => di.DrugName.Contains(SearchValue))
// .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (di) => di.PyCode.Contains(SearchValue))
// .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (di) => di.DrugBarcode.Contains(SearchValue))
// //.Select(di => di)
// .ToPageList(PageNum, PageSize, ref totalCount);
// foreach (DrugInfo di in DrugInfos)
// {
// if (di.drugBase == null)
// {
// di.drugBase = new DrugBase();
// }
// }
// TotalCount = totalCount;
// PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
//}
void GetUsers()
{
//获取用户数据
SendUserList = SqlSugarHelper.Db.Queryable<UserList>()
.Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"]))
.ToList();
//获取用户数据
SendUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
ReturnUserList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
ReturnUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
AddUserList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
AddUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}

View File

@ -0,0 +1,949 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.select;
using DM_Weight.util;
using log4net;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media;
namespace DM_Weight.ViewModels
{
public class AddSurgeryDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
public string Title => "录入手术";
public bool KeepAlive => false;
private List<MachineRecord> machineRecordList;
public List<MachineRecord> MachineRecordList { get => machineRecordList; set => SetProperty(ref machineRecordList, value); }
private SolidColorBrush _colorBrush;
public SolidColorBrush SnackbarBackground
{
get => _colorBrush;
set => SetProperty(ref _colorBrush, value);
}
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
public ISnackbarMessageQueue SnackbarMessageQueue
{
get => _snackbarMessageQueue;
set => SetProperty(ref _snackbarMessageQueue, value);
}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
public static List<OrderTakeSelect> StaticSelects = new()
{
new OrderTakeSelect
{
Code = "DrugName",
Name = "药品名称"
},
new OrderTakeSelect
{
Code = "PyCode",
Name = "拼音码"
},
new OrderTakeSelect
{
Code = "DrugBarcode",
Name = "药品条码"
},
new OrderTakeSelect
{
Code = "DrugId",
Name = "药品编码"
}
};
private List<OrderTakeSelect> _selects = StaticSelects;
public List<OrderTakeSelect> Selects
{
get { return _selects; }
set
{
SetProperty(ref _selects, value);
}
}
private static List<Dictionary<int, string>> keyValuePairs = new List<Dictionary<int, string>>()
{
new Dictionary<int, string>(){ {0,"男"} },new Dictionary<int, string>(){ { 1, "女" } }
};
public List<Dictionary<int, string>> SexKeyValue
{
get { return keyValuePairs; }
set { SetProperty(ref keyValuePairs, value); }
}
private Dictionary<int, string> _selectedSex = keyValuePairs[0];
public Dictionary<int, string> SelectedSex
{
get => _selectedSex;
set => SetProperty(ref _selectedSex, value);
}
private SurgicalSchedule surgicalSchedule = new SurgicalSchedule();
public SurgicalSchedule _SurgicalSchedule
{
get => surgicalSchedule;
set => SetProperty(ref surgicalSchedule, value);
}
private int _totalCount = 0;
public int TotalCount { get => _totalCount; set => SetProperty(ref _totalCount, value); }
private int _pageNum = 1;
public int PageNum
{
get => _pageNum;
set
{
SetProperty(ref _pageNum, value);
RequestData();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 5;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
List<ChannelStock> ReturnStockLst;
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
private OrderTakeSelect _selectedItem = StaticSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
private MachineRecord selectedRecord;
public MachineRecord SelectedRecord { get => selectedRecord; set => SetProperty(ref selectedRecord, value); }
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
RequestData();
}
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddSurgeryDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
surgicalSchedule.ScheduleTime= DateTime.Now;
_SurgicalSchedule.Indate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
public async void RequestData()
{
int totalCount = 0;
MachineRecordList = SqlSugarHelper.Db.Queryable<MachineRecord>()
.Includes<DrugInfo>(mr => mr.DrugInfo)
.Includes<UserList>(mr => mr.User)
.Includes<SurgicalScheduleDetail>(mr => mr._SurgicalScheduleDetailLst)
.Where(mr => mr.Type == 2)
.Where(mr => mr.Status < 2)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
//.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (mr) => mr.DrugInfo.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (mr) => mr.DrugInfo.DrugBarcode.Contains(SearchValue))
.OrderBy(mr => mr.OperationTime)
.ToPageList(PageNum, PageSize, ref totalCount);
MachineRecordList.ForEach(mr => mr.HasCheckNum = mr._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity));
TotalCount = totalCount;
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
/// <summary>
/// 选中行事件
/// </summary>
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (SelectedRecord != null && selectedRecord.Id != null)
{
MachineRecordList = MachineRecordList.Select(x =>
{
if (x.Id == SelectedRecord.Id)
{
x.IsSelected = !x.IsSelected;
if (x.IsSelected)
{
if (SelectedRecord._SurgicalScheduleDetailLst != null && SelectedRecord._SurgicalScheduleDetailLst.Count > 0)
{
//已经核销数
int HasCheckNum = SelectedRecord._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
x.CheckQuantity = SelectedRecord.Quantity - HasCheckNum;
x.ReturnQuantity1 = SelectedRecord.Quantity - HasCheckNum - x.CheckQuantity;
x.ReturnQuantity2 = HasCheckNum + x.CheckQuantity;
}
else
{
x.CheckQuantity = SelectedRecord.Quantity;
x.ReturnQuantity1 = 0;
x.ReturnQuantity2 = SelectedRecord.Quantity;
}
}
else
{
x.CheckQuantity = 0;
x.ReturnQuantity1 = 0;
x.ReturnQuantity2 = 0;
}
}
return x;
}).ToList();
}
});
}
/// <summary>
/// 保存并核销
/// </summary>
public DelegateCommand AddSurgeryCommand
{
get => new DelegateCommand(() =>
{
if (!string.IsNullOrEmpty(_SurgicalSchedule.OperationId))
{
//检查是否有该手术号,手术号不能重复
int iCount= SqlSugarHelper.Db.Queryable<SurgicalSchedule>().Where(ss => ss.OperationId == _SurgicalSchedule.OperationId).Count();
if(iCount>0)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("该手术号已添加,请勿重复创建");
return;
}
List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity > 0).ToList();
if (RecordsLst.Count > 0)
{
//string operationId = Guid.NewGuid().ToString();
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
{
PName = _SurgicalSchedule.PName,
Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
Age = _SurgicalSchedule.Age,
IdNumber = _SurgicalSchedule.IdNumber,
OpRoomCode = _SurgicalSchedule.OpRoomCode,
OpRoomName = _SurgicalSchedule.OpRoomName,
OperationId = _SurgicalSchedule.OperationId,
ScheduleTime = _SurgicalSchedule.ScheduleTime,
InsertTime=DateTime.Now,
Indiagnosis=_SurgicalSchedule.Indiagnosis,
Indate=_SurgicalSchedule.Indate,
DmStatus = 1,
}).ExecuteCommand();
for (int i = 0; i < RecordsLst.Count; i++)
{
SqlSugarHelper.Db.Insertable(new SurgicalScheduleDetail()
{
OperationId = _SurgicalSchedule.OperationId,
GetRecordId = RecordsLst[i].Id,
Quantity = RecordsLst[i].CheckQuantity,
DrugId = RecordsLst[i].DrugId,
ManuNo = RecordsLst[i].ManuNo,
EffDate = RecordsLst[i].EffDate.ToString(),
InsertUserId = HomeWindowViewModel.Operator?.Id,
}).ExecuteCommand();
int hasQuantity = RecordsLst[i]._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
int dmStatus = 0;
//已经全部挂上钩,修改dm_machine_record状态为完成
//if (hasQuantity + RecordsLst[i].CheckQuantity == RecordsLst[i].Quantity)
//{
// dmStatus = 2;
//}
//else
{
dmStatus = 1;
}
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
Status = dmStatus,
Id = RecordsLst[i].Id
}).UpdateColumns(it => new { it.Status }).WhereColumns(it => new { it.Id }).ExecuteCommand();
}
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "核销完成",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("核销异常,未核销数据");
}
}
else
{
int iRet = SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
{
PName = _SurgicalSchedule.PName,
Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
Age = _SurgicalSchedule.Age,
IdNumber = _SurgicalSchedule.IdNumber,
OpRoomCode = _SurgicalSchedule.OpRoomCode,
OpRoomName = _SurgicalSchedule.OpRoomName,
OperationId = _SurgicalSchedule.OperationId,
ScheduleTime= _SurgicalSchedule.ScheduleTime,
Indiagnosis = _SurgicalSchedule.Indiagnosis,
Indate = _SurgicalSchedule.Indate,
InsertTime = DateTime.Now,
DmStatus = 0,
HisState=1
}).ExecuteCommand();
if (iRet > 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "手术录入成功,未核销药品",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("手术录入失败");
}
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("手术号不能为空");
}
});
}
/// <summary>
/// 全部归还(还药、还空瓶)
/// </summary>
public DelegateCommand ReturnCommand
{
get => new DelegateCommand(() =>
{
List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity == 0).ToList();
ReturnStockLst = new List<ChannelStock>();
if (RecordsLst.Count > 0)
{
//待还药的记录
List<MachineRecord> ReturnDrugLst = RecordsLst.Where(rl => rl.ReturnQuantity1 > 0).ToList();
//待还空瓶的记录
List<MachineRecord> ReturnEmptyLst = RecordsLst.Where(rl => rl.ReturnQuantity2 > 0).ToList();
for (int i = 0; i < ReturnDrugLst.Count; i++)
{
ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.DrugId == ReturnDrugLst[i].DrugId)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.ManuNo == ReturnDrugLst[i].ManuNo)
.OrderBy(cs => cs.Quantity).First();
if (queryData != null)
{
queryData.AddQuantity = ReturnDrugLst[i].ReturnQuantity1;
queryData.MachineRecordId = ReturnDrugLst[i].Id;
ReturnStockLst.Add(queryData);
}
}
for (int j = 0; j < ReturnEmptyLst.Count; j++)
{
ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.DrugId == ReturnEmptyLst[j].DrugId)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
//.Where(cs => cs.ManuNo == ReturnEmptyLst[j].ManuNo)
.Where(cs => cs.DrawerType == 2)
.OrderBy(cs => cs.Quantity).First();
if (queryData != null)
{
queryData.ReturnQuantity = ReturnEmptyLst[j].ReturnQuantity2;
queryData.MachineRecordId = ReturnEmptyLst[j].Id;
ReturnStockLst.Add(queryData);
}
}
if (ReturnStockLst != null && ReturnStockLst.Count > 0)
{
ReturnStockLst = ReturnStockLst.OrderBy(cls => cls.DrawerNo).ToList();
//还药时AddQuantity有值还空瓶时ReturnQuantity有值
enumerable = ReturnStockLst.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("选中数据未绑定库位,请先进行绑定库位");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("未选中数据或选中数据核销数量不为0");
}
});
}
/// <summary>
/// 刷新
/// </summary>
public DelegateCommand QueryCommand
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "SurgeryTakeWindow")
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
//保存数据
//TakeFinish();
}
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位取药数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
string drugName = channelStocks[0].DrugInfo.DrugName;
int drugQuantity = channelStocks.Sum(cs => cs.AddQuantity);
int emptyQuantity = channelStocks.Sum(cs => cs.ReturnQuantity);
string speakTxt = $"正在打开{DrawerNo}号抽屉,请将{drugName}的";
if (drugQuantity > 0)
{
speakTxt += $"{drugQuantity}个药放入抽屉!";
}
if (emptyQuantity > 0)
{
speakTxt += $"{emptyQuantity}个空瓶放入抽屉!";
}
_portUtil.SpeakAsync(speakTxt);
//List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
//singleChannels.ForEach(it =>
//{
// try
// {
// _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
// }
// catch (Exception ex)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = $"打开抽屉异常{ex.Message}",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
//});
_portUtil.WindowName = "SurgeryTakeWindow";
_portUtil.BoardType = channelStocks.Count > 0 ? channelStocks[0].BoardType : 1;
_portUtil.ColNos = channelStocks.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}
private bool _isFinishClick = false;
public bool IsFinishClick { get => _isFinishClick; set => SetProperty(ref _isFinishClick, value); }
//完成
private void TakeFinish()
{
IsFinishClick = true;
bool bRet = false;
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < ReturnStockLst.Count; i++)
{
ChannelStock it = ReturnStockLst[i];
int quantity = 0;
if (it.AddQuantity > 0) //还药
{
quantity = it.AddQuantity;
bRet = ReturnDrug(it);
}
else
{
quantity = it.ReturnQuantity;
bRet = ReturnEmpty(it);
}
if (!bRet)
{
break;
}
// 更新屏显库存
if (it.BoardType == 5)
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + quantity);
}
AlertMsg alertMsg = new AlertMsg
{
Message = "操作完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
return bRet;
});
if (!f.IsSuccess || !f.Data)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("库存更新失败!");
}
Status = 0;
IsFinishClick = false;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
/// <summary>
/// 还药
/// </summary>
private bool ReturnDrug(ChannelStock stock)
{
try
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
string InvoiceId = "RETURN_" + CurrentTimeMillis(); ;
MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = stock.Quantity + stock.AddQuantity,
Id = stock.Id,
}).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(stock.MachineId))
.Where(cs => cs.DrugId.Equals(stock.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
// 更新数据 取药记录 设置还药数量、状态
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
ReturnQuantity1 = recordInfo.ReturnQuantity1 + stock.AddQuantity,
Id = recordInfo.Id,
Status = (recordInfo.CanReturnQuantity - stock.AddQuantity) == 0 ? 2 : 1,
}).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand();
// 保存数据 还药记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
ColNo = stock.ColNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
OperationTime = DateTime.Now,
Quantity = stock.AddQuantity,
Type = 31,
InvoiceId = InvoiceId,
GetId = stock.MachineRecordId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 1,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
AddQuantity = stock.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(stock.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == stock.DrugId)
.Where(ab => ab.ManuNo == stock.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + stock.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 3,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
YQuantity = 0,
ManuStock = stock.ReturnQuantity,
TotalStock = stock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{stock.DrugId}-{stock.ManuNo}-{stock.EffDate}-{stock.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(stock.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == stock.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + stock.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = stock.ReturnQuantity,
TotalStock = stock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{stock.DrugId}-{stock.AddQuantity}");
}
}
});
if (f.IsSuccess)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 还空瓶
/// </summary>
private bool ReturnEmpty(ChannelStock stock)
{
string InvoiceId = "RETURN_" + CurrentTimeMillis();
var f = SqlSugarHelper.Db.UseTran(() =>
{
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = stock.Quantity + stock.ReturnQuantity,
Id = stock.Id,
}).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(stock.MachineId))
.Where(cs => cs.DrugId.Equals(stock.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
// 更新数据 取药记录 设置还药数量、状态
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
ReturnQuantity2 = stock.ReturnQuantity,
Id = recordInfo.Id,
Status = 2,
}).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand();
// 保存数据 还药空瓶记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
ColNo = stock.ColNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = stock.ReturnQuantity, //ReturnQuantity,
Type = 32,
InvoiceId = InvoiceId,
GetId = stock.MachineRecordId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
return true;
});
if (!f.IsSuccess || !f.Data)
{
return false;
}
else
{
return true;
}
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
/// <summary>
/// 取消
/// </summary>
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
// 完成按钮
public DelegateCommand TakeFinishCommand
{
get => new DelegateCommand(TakeFinish);
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
// 关闭当前窗口
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
}
}

View File

@ -0,0 +1,572 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class AddToJiaoJieDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
private List<ChannelStock> _channelStocks = new List<ChannelStock>();
public List<ChannelStock> ChannelStocks
{
get => _channelStocks;
set => SetProperty(ref _channelStocks, value);
}
/// <summary>
/// 交接柜的库位信息
/// </summary>
private List<ChannelStock> _jiaojie_channelStocks;
public List<ChannelStock> Jiaojie_ChannelStocks
{
get => _jiaojie_channelStocks;
set => SetProperty(ref _jiaojie_channelStocks, value);
}
/// <summary>
/// 交接柜的库位信息
/// </summary>
private ChannelStock _jiaojei_cs;
public ChannelStock Jiaojie_cs
{
get => _jiaojei_cs;
set => SetProperty(ref _jiaojei_cs, value);
}
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
public string Title => "交接柜补药";
public bool KeepAlive => false;
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
Jiaojie_ChannelStocks = parameters.GetValue<List<ChannelStock>>("ChannelStocks");
for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
{
ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(Jiaojie_ChannelStocks[i]);
ChannelStocks.Add(copy);
}
ChannelStocks = Jiaojie_ChannelStocks.GroupBy(cs => cs.DrugId).Select(g => new
{
DrugId = g.Key,
AddQuantity = g.Sum(s => s.AddQuantity)
}).Select(cs => new ChannelStock() { DrugId = cs.DrugId, AddQuantity = cs.AddQuantity }).ToList();
RequestData();
drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
if (!string.IsNullOrEmpty(drawerAuthority))
{
drawerAuthorityList = drawerAuthority.Split(',');
}
}
string drawerAuthority = string.Empty;
string[] drawerAuthorityList;
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddToJiaoJieDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "OrderTakeDrugWindow")
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
//是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
CheckIsFridgeOpen();
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
}
}
//是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
CheckIsFridgeClose();
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位取药数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
public async void RequestData()
{
List<ChannelStock> channelStocks = new List<ChannelStock>();
List<string> msg = new List<string>();
for (int i = 0; i < ChannelStocks.Count; i++)
{
List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.DrugId == ChannelStocks[i].DrugId)
.OrderBy(cs => cs.EffDate)
.OrderBy(cs => cs.DrawerNo)
.ToList();
if (HasQChannels == null || HasQChannels.Count <= 0)
{
msg.Add($"有药品未绑定,请先绑定");
continue;
}
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = ChannelStocks[i].AddQuantity;
// 说明数量足够
if (total >= TakeQ)
{
for (int j = 0; TakeQ > 0; j++)
{
ChannelStock stock = HasQChannels[j];
if (TakeQ > stock.Quantity)
{
stock.TakeQuantity = stock.Quantity;
channelStocks.Add(stock);
TakeQ -= stock.Quantity;
}
else
{
stock.TakeQuantity = TakeQ;
channelStocks.Add(stock);
TakeQ = 0;
}
}
}
else
{
msg.Add($"药品【{HasQChannels[0].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
}
}
if (msg.Count > 0)
{
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//MessageBox.Show(string.Join("\n", msg));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("msgInfo", msg);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
}
else
{
channelStocks.Sort((a, b) =>
{
if ((a.DrawerNo - b.DrawerNo) == 0)
{
return a.ColNo - b.ColNo;
}
return a.DrawerNo - b.DrawerNo;
});
ChannelStocks = channelStocks;
}
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(async () =>
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
});
}
private void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
bool hasAuthority=Array.Exists(drawerAuthorityList, element => element == DrawerNo.ToString());
if(!hasAuthority)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"当前用户没有打开{DrawerNo}号抽屉的权限!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
singleChannels.ForEach(it =>
{
try
{
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"打开抽屉异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
_portUtil.WindowName = "OrderTakeDrugWindow";
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
{
get => new DelegateCommand(() =>
{
if (!_isFinishClick)
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
if (record.Count > 0)
{
string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < record.Count; i++)
{
ChannelStock it = record[i];
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = it.Quantity - it.TakeQuantity,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
//更新 交接柜 库存信息
//List<ChannelStock> jiaojie = Jiaojie_ChannelStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
//if (jiaojie != null && jiaojie.Count > 0)
//{
// for (int j = 0; j < jiaojie.Count; j++)
// {
// // 更新数据 交接柜 库存信息
// ChannelStock jiaojie_it = jiaojie[j];
// SqlSugarHelper.Db.Updateable(new ChannelStock()
// {
// Quantity = jiaojie_it.BaseQuantity,
// //ManuNo = it.ManuNo,
// //EffDate = it.EffDate,
// Id = jiaojie_it.Id,
// }).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand();
// //更新交接柜状态为 已取药未入库
// SqlSugarHelper.Db.Updateable(new ChannelList()
// {
// State=1,
// Id=jiaojie_it.ChannelLst.Id
// }).UpdateColumns(it => it.State).ExecuteCommand();
// }
//}
// 保存数据 出库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = it.MachineId,
DrawerNo = it.DrawerNo,
ColNo = it.ColNo,
DrugId = it.DrugId,
ManuNo = it.ManuNo,
EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = it.TakeQuantity,
Type = 2,
Status = 2,//给交接柜补药不用还空瓶等真正用了以后再还空瓶所以先把状态置为2
InvoiceId = InvoiceId
}).ExecuteCommand();
}
//保存注射剂报表信息
for (int j = 0; j < Jiaojie_ChannelStocks.Count; j++)
{
ChannelStock jStock = Jiaojie_ChannelStocks[j];
if (jStock.DrugInfo.Dosage == "注射剂")
{
int totalBaseNum = SqlSugarHelper.Db.Queryable<DrugBase>().
Where(db => db.DrugId == jStock.DrugId && db.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3")).Select(db => db.BaseQuantity).First();
string belognUser = SqlSugarHelper.Db.Queryable<ChannelList>().
Where(cl => cl.DrawerNo == jStock.DrawerNo && cl.MachineId == jStock.MachineId).Select(cl => cl.BelongUser).First();
DrugInfo di = SqlSugarHelper.Db.Queryable<DrugInfo>().Where(di => di.DrugId == jStock.DrugId).First();
SqlSugarHelper.Db.Insertable(new RejectionReport()
{
SendDate = DateTime.Parse(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm")),
SendUser = HomeWindowViewModel.Operator?.Nickname,
ReceiveUser = belognUser,//Jiaojie_ChannelStocks
DrugId = jStock.DrugId,
DrugName = di.DrugName,
DrugSpec = di.DrugSpec,
BaseNum = totalBaseNum + "支",//总基数
DrawerNo = jStock.DrawerNo
}).ExecuteCommand();
}
}
//更新交接柜状态为 已取药未入库(等在交接柜入库后再更新交接柜库存)
List<ChannelStock> jiaojie = Jiaojie_ChannelStocks.GroupBy(cs => cs.DrawerNo).Select(cs => cs.FirstOrDefault()).ToList();
if (jiaojie != null && jiaojie.Count > 0)
{
for (int j = 0; j < jiaojie.Count; j++)
{
ChannelStock jiaojie_it = jiaojie[j];
//更新交接柜状态为 已取药未入库
SqlSugarHelper.Db.Updateable(new ChannelList()
{
State = 1,
Id = jiaojie_it.ChannelLst.Id
}).UpdateColumns(it => it.State).ExecuteCommand();
}
}
return true;
});
if (f.Data)
{
// 更新屏显库存
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 5);
if (singleChannels.Count > 0)
{
singleChannels.ForEach(it =>
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
});
}
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
else
{
_isFinishClick = false;
AlertMsg alertMsg = new AlertMsg
{
Message = "没有填写取药数量",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
});
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
//检查是否是冰箱抽屉(冰箱抽屉打开时需要发送冰箱延迟报警的指令)
public async Task CheckIsFridgeOpen()
{
//if (ChannelStocks != null && ChannelStocks.Count > 0)
//{
// if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
// {
// _portUtil.FridgeOperate = true;
// //发送冰箱延迟报警的指令
// await _portUtil.FridgeDelayWarm();
// _portUtil.FridgeOperate = false;
// }
//}
}
//检查是否是冰箱抽屉(冰箱抽屉关闭时需要查询冰箱温度如温度不在范围则发送冰箱延迟报警的指令)
public async Task CheckIsFridgeClose()
{
//if (ChannelStocks != null && ChannelStocks.Count > 0)
//{
// if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
// {
// string[] iTempertureRange = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
// //发送查询冰箱温度的指令
// float temperature = await _portUtil.GetFridgeTemperature();
// if (temperature > Convert.ToSingle(iTempertureRange[0]) && temperature < Convert.ToSingle(iTempertureRange[1]))
// {
// _portUtil.FridgeOperate = true;
// //发送冰箱延迟报警的指令
// await _portUtil.FridgeDelayWarm();
// _portUtil.FridgeOperate = false;
// }
// }
//}
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
if (Status != 0)
{
_portUtil.ResetData();
Status = 0;
}
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
}
}

View File

@ -0,0 +1,495 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.Report;
using DM_Weight.util;
using log4net;
using log4net.Repository.Hierarchy;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace DM_Weight.ViewModels
{
public class AddToJiaoJieWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(AddToJiaoJieWindowViewModel));
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
public bool KeepAlive => false;
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<IsSelectedEvent>().Unsubscribe(SetIsSelected);
}
private List<ChannelStock> channelStocks;
public List<ChannelStock> ChannelStocks
{
get => channelStocks;
set => SetProperty(ref channelStocks, value);
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<IsSelectedEvent>().Subscribe(SetIsSelected);
RequestData();
}
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddToJiaoJieWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
_dialogService = DialogService;
}
private void RequestData()
{
ChannelStocks = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<ChannelList>(cs => cs.ChannelLst)
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cs.BaseQuantity > cs.Quantity)
.OrderBy(cs => cs.Chnguid)
.OrderBy(cs => cs.DrawerNo)
.ToList();
ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity - cs.Quantity);
}
private int _status = 0;
public int Status { get => _status; set => SetProperty(ref _status, value); }
private bool _isEnable = true;
public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); }
private List<int> iDrawerNoLst
{ get; set; }
private int CurrentNum { get; set; }
//刷新
public DelegateCommand QueryCommand
{
get => new DelegateCommand(() => RequestData());
}
//一键补药
public DelegateCommand OpenDragCommand
{
get => new DelegateCommand(() =>
{
try
{
Status = 1;
IsEnable = false;
var varDrawerNO = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["machineId"] ??"DM3"))
.GroupBy(cs=>cs.DrawerNo).Select(DrawerNo=>DrawerNo).ToList();
iDrawerNoLst= varDrawerNO.Select(item => item.DrawerNo).ToList();
CurrentNum = 0;
_portUtil.SpeakAsync($"正在打开 {iDrawerNoLst[CurrentNum]} 号抽屉");
_portUtil.WindowName = "AddToJiaoJieWindow";
_portUtil.Operate = true;
//_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
//_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
_portUtil.OpenAllDrawer();
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"补药异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
logger.Info($"AddToJiaoJieWindowViewModel异常{ex.Message}");
_portUtil.Operate = false;
}
});
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "AddToJiaoJieWindow")
{
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
Status = 2;
}
CurrentNum+=1;
if (CurrentNum< iDrawerNoLst.Count)
{
_portUtil.WindowName = "AddToJiaoJieWindow";
_portUtil.Operate = true;
_portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
_portUtil.OpenAllDrawer();
}
else
{
_portUtil.GetAllDrawerLockState();
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 2)
{
Status = 3;
}
_portUtil.Operate = false;
IsEnable=true;
CurrentNum = 0;
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 2)
{
ChannelStocks.ForEach(it => it.AddQuantity = msg.Quantitys[it.ColNo - 1]);
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
_portUtil.Operate = false;
IsEnable = false;
CurrentNum = 0;
break;
}
}
}
//完成按钮
public DelegateCommand AddFinish
{
get => new DelegateCommand(() =>
{
if(ChannelStocks.FindAll(cs=>cs.ChannelLst.IsSelected).Count<=0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请选择药箱",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
List<ChannelStock> jiaojieStocks = new List<ChannelStock>();
List<ChannelStock> cs = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
for (int i = 0; i < cs.Count; i++)
{
ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(cs[i]);
jiaojieStocks.Add(copy);
}
csList = jiaojieStocks.FindAll(cs => cs.ChannelLst.IsSelected).GroupBy(cs => cs.DrugId).Select(g => new
{
DrugId = g.Key,
AddQuantity = g.Sum(s => s.AddQuantity)
}).Select(cs => new ChannelStock() { DrugId = cs.DrugId, AddQuantity = cs.AddQuantity }).ToList();
List<ChannelStock> channelStocks = new List<ChannelStock>();
List<string> msg = new List<string>();
for (int i = 0; i < csList.Count; i++)
{
List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.DrugId == csList[i].DrugId)
.OrderBy(cs => cs.EffDate)
.OrderBy(cs => cs.DrawerNo)
.ToList();
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = csList[i].AddQuantity;
// 说明数量足够
if (total >= TakeQ)
{
for (int j = 0; TakeQ > 0; j++)
{
ChannelStock stock = HasQChannels[j];
if (TakeQ > stock.Quantity)
{
stock.TakeQuantity = stock.Quantity;
channelStocks.Add(stock);
TakeQ -= stock.Quantity;
}
else
{
stock.TakeQuantity = TakeQ;
channelStocks.Add(stock);
TakeQ = 0;
}
}
}
else
{
msg.Add($"药品【{ChannelStocks[i].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
}
}
if (msg.Count > 0)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("msgInfo", msg);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
return;
}
else
{
channelStocks.Sort((a, b) =>
{
if ((a.DrawerNo - b.DrawerNo) == 0)
{
return a.ColNo - b.ColNo;
}
return a.DrawerNo - b.DrawerNo;
});
}
List<ChannelStock> record = channelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
if (record.Count > 0)
{
string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < record.Count; i++)
{
ChannelStock it = record[i];
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = it.Quantity - it.TakeQuantity,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
//更新 交接柜 库存信息
List<ChannelStock> jiaojie = jiaojieStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
if (jiaojie != null && jiaojie.Count > 0)
{
for (int j = 0; j < jiaojie.Count; j++)
{
// 更新数据 交接柜 库存信息
ChannelStock jiaojie_it = jiaojie[j];
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = jiaojie_it.BaseQuantity,
//ManuNo = it.ManuNo,
//EffDate = it.EffDate,
Id = jiaojie_it.Id,
}).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand();
}
}
// 保存数据 出库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = it.MachineId,
DrawerNo = it.DrawerNo,
ColNo = it.ColNo,
DrugId = it.DrugId,
ManuNo = it.ManuNo,
EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = it.TakeQuantity,
Type = 2,
InvoiceId = InvoiceId
}).ExecuteCommand();
}
return true;
});
if (f.Data)
{
// 更新屏显库存
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 5);
if (singleChannels.Count > 0)
{
singleChannels.ForEach(it =>
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
});
}
AlertMsg alertMsg = new AlertMsg
{
Message = "补药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
RequestData();
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "补药操作失败,库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "补药数量有误",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
//取消
public DelegateCommand CancleAdd
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
IsEnable = true;
CurrentNum = 0;
});
}
//public DelegateCommand RejectReport_Download
//{
// get => new DelegateCommand(() => {
// GridReportUtil.RejectionReport("");
// });
//}
public DelegateCommand Account_Download
{
get => new DelegateCommand(() =>
{
GridReportUtil.AccountNewReport();
});
}
private List<ChannelStock> csList = new List<ChannelStock>();
//取药 弹出出药列表
public DelegateCommand TakeDrugCommand
{
get => new DelegateCommand(async () =>
{
//选中channelStock.channel_list的isSelected则选中channelStock的isSelected
//var o= ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
//csList = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).GroupBy(cs => cs.DrugId).Select(g => new {
// DrugId = g.Key, AddQuantity = g.Sum(s => s.AddQuantity)
//}).Select(cs=>new ChannelStock() { DrugId=cs.DrugId,AddQuantity=cs.AddQuantity }).ToList();
csList= ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
if (csList != null && csList.Count>0)
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("ChannelStocks", csList);
DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"未选择药品,请先勾选要药箱号",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
_portUtil.Operate = false;
}
});
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
RequestData();
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
//设置选中药箱的复选框状态
private void SetIsSelected(ChannelStock channelStock)
{
if (channelStock != null)
{
if (channelStock.ChannelLst.State == 0)
{
channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
}
else
{
return;
}
if (channelStock != null && ChannelStocks != null)
{
ChannelStocks = ChannelStocks.Select(x =>
{
for (int i = 0; i < ChannelStocks.Count; i++)
{
if (ChannelStocks[i].DrawerNo == channelStock.DrawerNo)
{
ChannelStocks[i].ChannelLst = channelStock.ChannelLst;
}
}
return x;
}).ToList();
}
ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
}
}
}
}

View File

@ -0,0 +1,837 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.select;
using DM_Weight.util;
using log4net;
using Newtonsoft.Json;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Data;
namespace DM_Weight.ViewModels
{
public class ApplyInStockWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private List<DrugPleaseClaim> _drugPleaseClaimList = new();
public List<DrugPleaseClaim> _DrugPleaseClaimList { get { return _drugPleaseClaimList; } set { SetProperty(ref _drugPleaseClaimList, value); } }
private DrugPleaseClaim? selectDrugPleaseClaim;
public DrugPleaseClaim? SelectDrugPleaseClaim
{
get { return selectDrugPleaseClaim; }
set
{
SetProperty(ref selectDrugPleaseClaim, value);
}
}
public static List<OrderTakeSelect> StaticOrderTakeSelects = new()
{
new OrderTakeSelect
{
Code = "drugPleaseNo",
Name = "请领单号"
}
};
private List<OrderTakeSelect> _orderTakeSelects = StaticOrderTakeSelects;
public List<OrderTakeSelect> OrderTakeSelects
{
get { return _orderTakeSelects; }
set
{
SetProperty(ref _orderTakeSelects, value);
}
}
private OrderTakeSelect _selectedItem = StaticOrderTakeSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
private string _orderDate = DateTime.Now.ToString("yyyy-MM-dd");
/// <summary>
/// 查询条件 处方日期
/// </summary>
public string OrderDate
{
get { return _orderDate; }
set
{
if (!String.IsNullOrEmpty(value))
{
SetProperty(ref _orderDate, DateTime.Parse(value).ToString("yyyy-MM-dd"));
}
else
{
SetProperty(ref _orderDate, value);
}
RequestData();
}
}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
private List<ChannelStock> _channelStocks = new();
public List<ChannelStock> ChannelStocks { get { return _channelStocks; } set { SetProperty(ref _channelStocks, value); } }
private List<ChannelStock> _addChannels = new();
public List<ChannelStock> AddChannels { get { return _addChannels; } set { SetProperty(ref _addChannels, value); } }
private readonly ILog logger = LogManager.GetLogger(typeof(InvoiceInWindowViewModel));
private int _pageNum = 1;
public int PageNum
{
get => _pageNum;
set
{
SetProperty(ref _pageNum, value);
RequestData();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 8;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
private int _totalCount = 0;
public int TotalCount
{
get => _totalCount;
set
{
SetProperty(ref _totalCount, value);
}
}
private int _status = 0;
public int Status { get => _status; set => SetProperty(ref _status, value); }
IDialogService _dialogService;
IEventAggregator _eventAggregator;
private PortUtil _portUtil;
public ApplyInStockWindowViewModel(PortUtil portUtil, IDialogService DialogService, IEventAggregator eventAggregator)
{
_dialogService = DialogService;
_eventAggregator = eventAggregator;
_portUtil = portUtil;
}
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
private string WindowName = "ApplyInStockWindowViewModel";
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName.Equals(WindowName))
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
}
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private async void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
strNames += name;
}
int sumQuantity = channelStocks.Sum(cs => cs.AddQuantity);
_portUtil.SpeakAsync($"正在打开{DrawerNo}号抽屉,请加药{strNames},数量共计{sumQuantity}");
List<ChannelStock> singleChannels = new List<ChannelStock>();
for (int i = 0; i < channelStocks.Count; i++)
{
ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(channelStocks[i]);
singleChannels.Add(copy);
}
singleChannels = singleChannels.GroupBy(it => new
{
it.DrawerNo,
it.ColNo
}).Select(it =>
{
var ret = it.First();
ret.Quantity = it.Sum(itx => itx.Quantity);
ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
return ret;
}).ToList().FindAll(it => it.BoardType != 1);
_portUtil.WindowName = WindowName;
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
//_portUtil.Stocks = singleChannels.Select(it => it.Quantity).ToArray();
_portUtil.DrawerNo = DrawerNo;
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
{
List<ChannelStock> ChannelLst = new List<ChannelStock>();
for (int i = 0; i < channelStocks.Count; i++)
{
ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(channelStocks[i]);
singleChannels.Add(copy);
}
ChannelLst = ChannelLst.Where(it => it.BoardType != 1)
.GroupBy(it => it.ColNo)
.Select(it =>
{
var ret = it.First();
ret.Quantity = it.Sum(itx => itx.Quantity);
ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
return ret;
}).ToList();
// 发送加药数量
singleChannels.ForEach(it =>
{
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.AddQuantity, it.Quantity + it.AddQuantity);
});
}
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 6)
{
for (int i = 0; i < singleChannels.Count; i++)
{
ChannelStock it = singleChannels[i];
_portUtil.ClearCount(it.DrawerNo, it.ColNo);
await Task.Delay(50);
}
}
_portUtil.Start();
}
private DelegateCommand _rowSelected;
public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(GetChannelByInvoice);
public void GetChannelByInvoice()
{
ChannelStocks.Clear();
//InOutInvoices.Clear();
List<ChannelStock> csList = new List<ChannelStock>();
if (SelectDrugPleaseClaim != null)
{
if (SelectDrugPleaseClaim.GetQuantity == 1)
{
if (SelectDrugPleaseClaim._DrugManuNos is null)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "药品没有批次效期信息!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
//请领单里只有一种药
List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(SelectDrugPleaseClaim._DrugManuNos);
drugManuInfoList.ForEach(dm => dm.DrugId = SelectDrugPleaseClaim.DrugId);
for (int i = 0; i < drugManuInfoList.Count; i++)
{
DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i];
ChannelStock q = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate))
.WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo))
.Where(cs => cs.DrugId == drugPleaseManuNo.DrugId)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.OrderBy(cs => cs.DrugId)
.OrderBy(cs => cs.DrawerNo)
.OrderBy(cs => cs.ColNo)
.First();
if (q is null)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "药品没有绑定库位信息!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
q.AddQuantity = drugPleaseManuNo.Quantity;
csList.Add(q);
}
}
else
{
//请领单里有多种药
List<DrugPleaseClaim> pleaseClaimList = SqlSugarHelper.Db.Queryable<DrugPleaseClaim>().Includes<DrugInfo>(dpc => dpc.DrugInfo).Where(dpc => dpc.PleaseNo == SelectDrugPleaseClaim.PleaseNo).ToList();
if (pleaseClaimList != null)
{
foreach (DrugPleaseClaim item in pleaseClaimList)
{
List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(item._DrugManuNos);
drugManuInfoList.ForEach(dm => dm.DrugId = item.DrugId);
for (int i = 0; i < drugManuInfoList.Count; i++)
{
DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i];
List<ChannelStock>? q = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.DrugId != null)
.WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate))
.WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo))
.Where(cs => cs.DrugId == drugPleaseManuNo.DrugId)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.OrderBy(cs => cs.DrugId)
.OrderBy(cs => cs.DrawerNo)
.OrderBy(cs => cs.ColNo)
.ToList();
if (q != null)
{
q[0].AddQuantity = drugPleaseManuNo.Quantity;
q.ForEach(csq => csq.PleaseClaim = item);
csList.AddRange(q);
}
}
}
}
}
}
ICollectionView vw = CollectionViewSource.GetDefaultView(csList);
vw.GroupDescriptions.Add(new PropertyGroupDescription("PleaseClaim"));
ChannelStocks = csList;
}
public bool KeepAlive => false;
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
RequestData();
}
public void RequestData()
{
_DrugPleaseClaimList.Clear();
int totalCount = 0;
var sb = new StringBuilder();
sb.Append("SELECT i.please_no,i.do_date,i.totalQuantity,count(1) as get_quantity,drug_manu_no,machine_id,i.drug_id from drug_please_claim i inner join ");
sb.Append(" ( select c.drug_id as drug_id from channel_stock c where c.machine_id = 'DM3' group by c.drug_id ) di on di.drug_id = i.drug_id WHERE state=@State and type=@Type ");
if (OrderDate != null)
{
sb.Append(" and DATE_FORMAT(i.do_date,'%Y-%m-%d') = @CreateTime ");
}
if (!String.IsNullOrEmpty(SearchValue))
{
sb.Append(" and i.please_no = @please_no ");
}
if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["department"]))
{
sb.Append(" and i.department = @department ");
}
sb.Append(" GROUP BY i.please_no");
sb.Append(" order by i.do_date ");
_DrugPleaseClaimList = SqlSugarHelper.Db.SqlQueryable<dynamic>(sb.ToString())
.AddParameters(new
{
State = 2,
Type = 32,
CreateTime = OrderDate,
please_no = SearchValue,
department = ConfigurationManager.AppSettings["department"]
})
.Select(it => new DrugPleaseClaim())
.Select("*")
.ToPageList(PageNum, PageSize, ref totalCount);
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
public DelegateCommand OpenInvoiceAdd
{
get => new DelegateCommand(() =>
{
bool flag = true;
AddChannels = ChannelStocks.FindAll(it => it.AddQuantity != 0);
enumerable = AddChannels.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
OpenDrawer(AddChannels);
}, () => SelectDrugPleaseClaim != null).ObservesProperty(() => SelectDrugPleaseClaim);
}
private void OpenDrawer(List<ChannelStock> AddChannels)
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
if (AddChannels == null || AddChannels.Count <= 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请输入入库数量",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
int totalNum = AddChannels.Sum(add => add.AddQuantity);
//if (totalNum != SelectedInvoice.Quantity)
//{
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "各批次添加数量要与调拨单药品总数一致!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
//}
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
}
public DelegateCommand QueryCommand
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
private bool _isFinishClick = false;
public DelegateCommand TakeFinish { get => new DelegateCommand(TakeFinishAction); }
private void TakeFinishAction()
{
if (!_isFinishClick)
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.ToList();
string InvoiceId = SelectDrugPleaseClaim.PleaseNo;
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Updateable(new DrugPleaseClaim()
{
State = 3,
PleaseNo = SelectDrugPleaseClaim.PleaseNo
}).UpdateColumns(it => new { it.State }).WhereColumns(it => new { it.PleaseNo }).ExecuteCommand();
for (int i = 0; i < record.Count; i++)
{
ChannelStock it = record[i];
if (it.BoardType == 6 && it.PosNo == 0)
{
_portUtil.SetNumCount(it.DrawerNo, it.ColNo, it.AddQuantity);
}
if (it.Id != null)
{
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = it.Quantity + it.AddQuantity,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
}
//else
//{
// //如果批号重复则不让添加
// List<ChannelStock> csCount = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.ManuNo == it.ManuNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity > 0).ToList();
// if (csCount.Count > 0)
// {
// //repeatList.Add(it.ManuNo);
// //stockRepeats.Add(it);
// continue;
// }
// //查询现有库位中是否有库存为0的记录如果有直接update
// ChannelStock recordHistory = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity <= 0).First();
// if (recordHistory != null && recordHistory.Id != null)
// {
// SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(item => new ChannelStock()
// {
// Quantity = it.AddQuantity,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate
// }).Where(item => item.Id == recordHistory.Id).ExecuteCommand();
// }
// else
// {
// // 更新数据 库存信息
// SqlSugarHelper.Db.Insertable(new ChannelStock()
// {
// Quantity = it.AddQuantity,
// Chnguid = it.Chnguid,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// DrawerNo = it.DrawerNo,
// ColNo = it.ColNo,
// DrugId = it.DrugId,
// DrawerType = it.DrawerType,
// BoardType = it.BoardType,
// Id = Guid.NewGuid().ToString(),
// MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
// }).ExecuteCommand();
// }
//}
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(it.MachineId))
.Where(cs => cs.DrugId.Equals(it.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
// 保存数据 出/入库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = it.MachineId,
DrawerNo = it.DrawerNo,
ColNo = it.ColNo,
DrugId = it.DrugId,
ManuNo = it.ManuNo,
EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = it.AddQuantity,
Type = 1,
InvoiceId = InvoiceId,
//StockQuantity = nowChannels.Sum(it => it.Quantity),
//ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity),
//SupplierDept = SelectedInvoice.PharmacyName1 ?? ConfigurationManager.AppSettings["supplierDept"].ToString(),
//ReceiveDept = SelectedInvoice.PharmacyName2 ?? ConfigurationManager.AppSettings["receiveDept"].ToString()
}).ExecuteCommand();
int iIndex = Array.IndexOf(ConfigurationManager.AppSettings["colloctedId"].Split(','), SelectDrugPleaseClaim.MachineId.ToString());
string dept = ConfigurationManager.AppSettings["colloctedId"].Split(',')[iIndex - 1].ToString();
//保存账册
int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 1,
Department = dept,
OrderNo = SelectDrugPleaseClaim.PleaseNo,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
AddQuantity = it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
//CreateTime = DateTime.Now,
InvoiceNo = SelectDrugPleaseClaim.PleaseNo
}).ExecuteCommand();
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.ManuNo == it.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2() {
DrugId = it.DrugId,
Type=3,
ManuNo=it.ManuNo,
EffDate=it.EffDate,
YQuantity=0,
ManuStock= it.AddQuantity,
TotalStock= it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
}
}
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = it.AddQuantity,
TotalStock = it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
}
}
}
return true;
});
if (f.Data)
{
// 更新屏显库存
//List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
List<ChannelStock> singleChannels = record.Where(it => it.BoardType == 5)
.GroupBy(it => new { it.DrawerNo, it.ColNo })
.Select(it =>
{
var ret = it.First();
//ret.Quantity = it.Sum(itx => itx.Quantity);
//ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
return ret;
})
.ToList();
if (singleChannels != null && singleChannels.Count > 0)
{
for (int i = 0; i < singleChannels.Count; i++)
{
//if (singleChannels[i].BoardType == 5)
//{
List<ChannelStock> channelStockEffDate = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId == singleChannels[i].MachineId)
.Where(cs => cs.DrawerNo == singleChannels[i].DrawerNo)
.Where(cs => cs.ColNo == singleChannels[i].ColNo)
.Where(cs => cs.Quantity > 0)
.OrderBy(cs => cs.EffDate).ToList();
int totalQuantity = channelStockEffDate.Sum(it => it.Quantity);
//将库位多批次的总库存数更新标签
_portUtil.WriteQuantity(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo, totalQuantity);
Thread.Sleep(200);
_portUtil.WriteChannelInfo(6, channelStockEffDate[0].EffDate == null ? "" : channelStockEffDate[0].EffDate, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
Thread.Sleep(200);
_portUtil.WriteChannelInfo(5, channelStockEffDate[0].ManuNo, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
Thread.Sleep(200);
_portUtil.ShowContent(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
//}
}
}
AlertMsg alertMsg = new AlertMsg
{
Message = "操作完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
logger.Info($"调拨入库,库存更新失败!{f.ErrorMessage}");
AlertMsg alertMsg = new AlertMsg
{
Message = "库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
}
RequestData();
}
public DelegateCommand CancleTake { get => new DelegateCommand(CancelTakeAction); }
private void CancelTakeAction()
{
RequestData();
Status = 0;
}
}
}

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

@ -165,8 +165,11 @@ namespace DM_Weight.ViewModels
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
//var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
//DrugInfos = list;
string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
}
private void GetChannelsByDrawerNo()
@ -391,7 +394,7 @@ namespace DM_Weight.ViewModels
public void UpdateComboBoxItems(string text)
{
string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
d.manufactory,d.max_stock,CONCAT(drug_name,' ',drug_spec)as drug_name_spec FROM `drug_info` d";
d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
if(string.IsNullOrEmpty(text))
{
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();

View File

@ -184,7 +184,7 @@ namespace DM_Weight.ViewModels
}
}
private int _pageSize = 8;
private int _pageSize = 9;
public int PageSize
{
get => _pageSize;
@ -208,8 +208,10 @@ namespace DM_Weight.ViewModels
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
//var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
//DrugInfos = list;
string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
//DrugInfos_PY = list;
}
@ -411,6 +413,7 @@ namespace DM_Weight.ViewModels
item.Drug = null;
item.DrugSpec = null;
SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId,it.DrugSpec }).ExecuteCommand();
SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(it => new ChannelStock { DrugId = null, ManuNo = null, EffDate = null }).Where(it => it.Chnguid == item.Id).ExecuteCommand();
if (item.BoardType == 5)
{
// 清除显示屏库位信息
@ -468,7 +471,7 @@ namespace DM_Weight.ViewModels
public void UpdateComboBoxItems(string text)
{
string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
d.manufactory,d.max_stock,CONCAT(drug_name,' ',drug_spec)as drug_name_spec FROM `drug_info` d";
d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
if (string.IsNullOrEmpty(text))
{
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();

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

@ -47,27 +47,24 @@ namespace DM_Weight.ViewModels
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
Status = 2;
}
//case EventType.DRAWEROPEN:
// if (Status == 1)
// {
// Status = 2;
// }
break;
// break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 2)
{
Status = 3;
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 2)
{
logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】");
}
Status = 0;
break;
//// 数量变化
//case EventType.UPDATEQUANTITY:
// if (Status == 2)
// {
// logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】");
// }
// break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
@ -111,6 +108,21 @@ namespace DM_Weight.ViewModels
{
get => new DelegateCommand<string>((DrawerNo) =>
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// if (Convert.ToInt32(DrawerNo) > 3)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
this.DrawerNo = Convert.ToInt32(DrawerNo);
RequestData();
}, (DrawerNo) => Status == 0
@ -185,9 +197,9 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = it.CheckQuantity - it.Quantity,
Type = 4,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity),
CheckQuantity = it.CheckQuantity
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity),
//CheckQuantity = it.CheckQuantity
}).ExecuteCommand();

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,324 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.select;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing.Printing;
using System.Linq;
using System.Reactive.Joins;
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace DM_Weight.ViewModels
{
public class CollectDrugWindowViewModel : BindableBase,INavigationAware,IRegionMemberLifetime
{
private int _pageNum = 1;
public int PageNum
{
get => _pageNum;
set
{
SetProperty(ref _pageNum, value);
RequestData();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 8;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
private int _totalCount = 0;
public int TotalCount
{
get => _totalCount;
set
{
SetProperty(ref _totalCount, value);
}
}
public static List<OrderTakeSelect> StaticSelects = new()
{
new OrderTakeSelect
{
Code = "DrugName",
Name = "药品名称"
},
new OrderTakeSelect
{
Code = "PyCode",
Name = "拼音码"
},
new OrderTakeSelect
{
Code = "DrugBarcode",
Name = "药品条码"
},
new OrderTakeSelect
{
Code = "DrugId",
Name = "药品编码"
}
};
private List<OrderTakeSelect> _selects = StaticSelects;
public List<OrderTakeSelect> Selects
{
get { return _selects; }
set
{
SetProperty(ref _selects, value);
}
}
private List<CollectDrug> _collectDrugs = new();
public List<CollectDrug> CollectDrugs { get { return _collectDrugs; } set { SetProperty(ref _collectDrugs, value); } }
private CollectDrug _selectCollectDrugs;
public CollectDrug selectCollectDrug { get { return _selectCollectDrugs; } set { SetProperty(ref _selectCollectDrugs, value); } }
private OrderTakeSelect _selectedItem = StaticSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public CollectDrugWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator)
{
_dialogService = dialogService;
_eventAggregator = eventAggregator;
}
//private void BindSelectCollect(CollectDrug collectDrug)
//{
// if (SelectCollects == null)
// {
// SelectCollects = new List<CollectDrug>();
// }
// if (SelectCollects.Contains(collectDrug))
// {
// SelectCollects.Remove(collectDrug);
// }
// else
// {
// SelectCollects.Add(collectDrug);
// }
//}
/// <summary>
/// 选中处方的请领药品
/// </summary>
//private List<CollectDrug> _selectCollects;
//public List<CollectDrug> SelectCollects
//{
// get { return _selectCollects; }
// set { SetProperty(ref _selectCollects, value); }
//}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
void RequestData_for_SurgicalShedule()
{
int totalCount = 0;
List<CollectDrug> queryData = SqlSugarHelper.Db.Queryable<SurgicalSchedule>()
.InnerJoin<SurgicalScheduleDetail>((oi, od) => oi.OperationId == od.OperationId)
.InnerJoin<DrugInfo>((oi, od, di) => od.DrugId == di.DrugId.ToString())
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (oi, od, di) => di.DrugId.ToString() == SearchValue)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (oi, od, di) => di.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (oi, od, di) => di.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (oi, od, di) => di.DrugBarcode.Contains(SearchValue))
.Where(oi => oi.DmStatus == 1)
.Where(oi => oi.HisState == 1)
.GroupBy(oi => oi.ScheduleTime)
.Select((oi, od, di) => new CollectDrug
{
PatientId = oi.PatientId,
PName = oi.PName,
Sex = oi.Sex,
Age = oi.Age,
IdNumber = oi.IdNumber,
OrderNo = oi.OperationId,
//DeptName = oi.DeptName,
DrugName = di.DrugName,
Quantity = od.Quantity,
DrugSpec = di.DrugSpec,
Manufactory = di.Manufactory,
DrugId = di.DrugId.ToString(),
}).ToList();
CollectDrugs = queryData;
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
void RequestData()
{
int totalCount = 0;
List<CollectDrug> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
.InnerJoin<DrugInfo>((oi, od, di) => od.DrugId == di.DrugId.ToString())
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (oi, od, di) => di.DrugId.ToString() == SearchValue)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (oi, od, di) => di.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (oi, od, di) => di.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (oi, od, di) => di.DrugBarcode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), oi => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
.Where(oi => oi.DmStatus == 1)
.Where(oi => oi.HisDispFlag == 0)
.Where(oi => oi.CancelFlag == 0)
.Where(oi=>oi.ApplyStatus==0)
.Where(oi => oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
.GroupBy(oi => oi.OrderDate)
.Select((oi, od, di) => new CollectDrug
{
PatientId = oi.PatientId,
PName = oi.PName,
Sex = oi.Sex,
Age = oi.Age,
IdNumber = oi.IdNumber,
OrderNo = oi.OrderNo,
DeptName = oi.DeptName,
DrugName = di.DrugName,
Quantity = od.Quantity,
DrugSpec = di.DrugSpec,
Manufactory = di.Manufactory,
DrugId=di.DrugId.ToString(),
}).ToList();
// .ToPageList(PageNum, PageSize, ref totalCount);
//.ToList();
CollectDrugs = queryData;
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (selectCollectDrug != null)
{
CollectDrugs = CollectDrugs.Select(x =>
{
if (x.OrderNo == selectCollectDrug.OrderNo)
{
x.IsSelected = !x.IsSelected;
}
return x;
}).ToList();
}
});
}
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
/// <summary>
/// 生成请领单
/// </summary>
public DelegateCommand CreateApplyOrder
{
get => new DelegateCommand(OpenCreateApplyDialog);
}
public bool KeepAlive => false;
public async void OpenCreateApplyDialog()
{
if (CollectDrugs != null)
{
List<CollectDrug> selectCollect = CollectDrugs.Where(cd => cd.IsSelected).ToList();
if (selectCollect.Count > 0)
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("ApplyDrug", selectCollect);
DialogServiceExtensions.ShowDialogHost(_dialogService, "CollectDrugDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "未选择任何数据,请先选择数据信息!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
}
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
RequestData();
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
RequestData();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}

View File

@ -0,0 +1,319 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Windows.Threading;
using static Unity.Storage.RegistrationSet;
namespace DM_Weight.ViewModels
{
public class DestoryEmptyDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
public bool KeepAlive => false;
public string Title => "空瓶取出";
private List<MachineRecord> _machineRecords = new();
public List<MachineRecord> _MachineRecords
{
get => _machineRecords;
set
{
SetProperty(ref _machineRecords, value);
}
}
private MachineRecord _machineRecord = new();
public MachineRecord _MachineRecord
{
get => _machineRecord;
set
{
SetProperty(ref _machineRecord, value);
}
}
private ChannelStock _channelStock;
public ChannelStock _ChannelStock
{
get => _channelStock;
set => SetProperty(ref _channelStock, value);
}
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public DestoryEmptyDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "DrawerTakeDrugWindow")
{
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
Status = 2;
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 2)
{
Status = 3;
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 2)
{
_ChannelStock.TakeQuantity = msg.Quantitys[_ChannelStock.ColNo - 1];
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
ChannelStock _record = parameters.GetValue<ChannelStock>("channel");
_ChannelStock = _record;
RequestData();
}
public void RequestData()
{
List<MachineRecord> queryData = SqlSugarHelper.Db.Queryable<MachineRecord>()
.Includes<UserList>(mr => mr.User)
.Where(mr => mr.DrugId == _ChannelStock.DrugId)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(mr => mr.Type == 32)
//.Where(mr => mr.Status != 2)
.Where(mr=>mr.IsDestroy==0)
.OrderByDescending(mr => mr.OperationTime)
.OrderBy(mr => mr.Id)
.ToList();
_MachineRecords = queryData;
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (_MachineRecord != null && _MachineRecord.Quantity > 0)
{
_MachineRecords = _MachineRecords.Select(x =>
{
if (x.Id == _MachineRecord.Id)
{
x.IsSelected = !x.IsSelected;
}
return x;
}).ToList();
//DialogParameters dialogParameters = new DialogParameters();
//dialogParameters.Add("channel", Channel);
//DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
});
}
/// <summary>
/// 空瓶销毁
/// </summary>
public DelegateCommand DestoryEmptyCommand
{
get => new DelegateCommand(() =>
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// if (_ChannelStock.DrawerNo>3)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
Status = 1;
//_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
//IEnumerable<string> strDrugName = _MachineRecords.Select(cs => cs.DrugInfo.DrugName);
//string strNames = string.Empty;
//foreach (string name in strDrugName)
//{
// if (!strNames.Contains(name))
// {
// strNames += name + ";";
// }
//}
int sumQuantity = _MachineRecords.FindAll(it => it.IsSelected).Sum(cs => cs.Quantity);
_portUtil.SpeakAsync($"正在打开 {_ChannelStock.DrawerNo} 号抽屉,请取出空瓶 {_ChannelStock.DrugInfo.DrugName} ,数量共计 {sumQuantity}");
_portUtil.WindowName = "DrawerTakeDrugWindow";
_portUtil.BoardType = _ChannelStock.BoardType;
_portUtil.ColNos=new int[] { _ChannelStock.ColNo };
_portUtil.DrawerNo = _ChannelStock.DrawerNo;
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, () => _portUtil.Start())
;
}
});
}
public DelegateCommand TakeFinish {
get => new DelegateCommand(() =>
{
List<MachineRecord> records = _MachineRecords.FindAll(it => it.IsSelected).ToList();
if (records != null && records.Count > 0)
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < records.Count; i++)
{
MachineRecord record = records[i];
//修改库存数量
_ChannelStock.Quantity = _ChannelStock.Quantity - record.Quantity;
SqlSugarHelper.Db.Updateable(_ChannelStock).ExecuteCommand();
//修改记录表中状态
SqlSugarHelper.Db.Updateable(record).ReSetValue(mr =>
{
mr.IsDestroy = 1;
}).ExecuteCommand();
//记录销毁明细
SqlSugarHelper.Db.Insertable(new DestoryDetail()
{
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
Operatorid = HomeWindowViewModel.Operator?.Id,
Reviewerid = HomeWindowViewModel.Reviewer?.Id,
RecordId = record.Id,
//OrderId = ChannelStock.ManuNo,
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
}
});
if (f.Data)
{
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = "取出完成",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "取出失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请选择要取空瓶的数据",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
}
}

View File

@ -24,7 +24,80 @@ namespace DM_Weight.ViewModels
private readonly ILog logger = LogManager.GetLogger(typeof(DrawerAddDrugWindowViewModel));
private List<int> _drawerNoList = new List<int>();
#region
/// <summary>
/// 1号抽屉
/// </summary>
private bool _Drawer1 = false;
public bool Drawer1
{
get { return _Drawer1; }
set { SetProperty(ref _Drawer1, value); }
}
/// <summary>
/// 2号抽屉
/// </summary>
private bool _Drawer2 = false;
public bool Drawer2
{
get { return _Drawer2; }
set { SetProperty(ref _Drawer2, value); }
}
/// <summary>
/// 3号抽屉
/// </summary>
private bool _Drawer3 = false;
public bool Drawer3
{
get { return _Drawer3; }
set { SetProperty(ref _Drawer3, value); }
}
/// <summary>
/// 4号抽屉
/// </summary>
private bool _Drawer4 = false;
public bool Drawer4
{
get { return _Drawer4; }
set { SetProperty(ref _Drawer4, value); }
}
/// <summary>
/// 5号抽屉
/// </summary>
private bool _Drawer5 = false;
public bool Drawer5
{
get { return _Drawer5; }
set { SetProperty(ref _Drawer5, value); }
}
/// <summary>
/// 6号抽屉
/// </summary>
private bool _Drawer6 = false;
public bool Drawer6
{
get { return _Drawer6; }
set { SetProperty(ref _Drawer6, value); }
}
/// <summary>
/// 7号抽屉
/// </summary>
private bool _Drawer7 = false;
public bool Drawer7
{
get { return _Drawer7; }
set { SetProperty(ref _Drawer7, value); }
}
/// <summary>
/// 8号抽屉
/// </summary>
private bool _Drawer8 = false;
public bool Drawer8
{
get { return _Drawer8; }
set { SetProperty(ref _Drawer8, value); }
}
#endregion
private List<ChannelStock>? _channelStocks;
public List<ChannelStock>? ChannelStocks
@ -65,6 +138,10 @@ namespace DM_Weight.ViewModels
{
Status = 3;
}
//保存库存
SaveStock();
RequestData();
Status = 0;
break;
// 数量变化
case EventType.UPDATEQUANTITY:
@ -126,12 +203,26 @@ namespace DM_Weight.ViewModels
get => new DelegateCommand(() =>
{
Status = 1;
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
try
{
List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
IEnumerable<string> strDrugName = ChannelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + "; ;";
}
}
int sumQuantity = ChannelStocks.Sum(cs => cs.AddQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请加药 {strNames} ,数量共计{sumQuantity}");
_portUtil.WindowName = "DrawerAddDrugWindow";
_portUtil.Operate = true;
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
@ -149,16 +240,12 @@ namespace DM_Weight.ViewModels
}, () => Status == 0).ObservesProperty(() => Status);
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
// private bool _isFinishClick = false;
//保存库存
private void SaveStock()
{
get => new DelegateCommand(() =>
try
{
if (!_isFinishClick)
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
if (record.Count > 0)
{
@ -181,80 +268,207 @@ namespace DM_Weight.ViewModels
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(it.MachineId))
.Where(cs => cs.DrugId.Equals(it.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
// 保存数据 入库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = it.MachineId,
DrawerNo = it.DrawerNo,
ColNo = it.ColNo,
DrugId = it.DrugId,
ManuNo = it.ManuNo,
EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer=HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = it.AddQuantity,
Type = 1,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
logger.Info($"库存已更新{it.DrugId},{it.Quantity+it.AddQuantity}");
}
return true;
});
if (f.Data)
{
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉加药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "更新库存失败",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
}
else
{
_isFinishClick = false;
AlertMsg alertMsg = new AlertMsg
{
Message = "没有填写加药数量",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
});
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
catch (Exception ex)
{
logger.Info($"保存库存异常{ex.Message}");
}
}
//// 完成按钮
//public DelegateCommand TakeFinish
//{
// get => new DelegateCommand(() =>
// {
// if (!_isFinishClick)
// {
// _isFinishClick = true;
// List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
// if (record.Count > 0)
// {
// string InvoiceId = "DRAWER_" + CurrentTimeMillis();
// var f = SqlSugarHelper.Db.UseTran(() =>
// {
// for (int i = 0; i < record.Count; i++)
// {
// ChannelStock it = record[i];
// it.ManuNo = it.drugManuNo.ManuNo;
// it.EffDate = it.drugManuNo.EffDate;
// // 更新数据 库存信息
// SqlSugarHelper.Db.Updateable(new ChannelStock()
// {
// Quantity = it.Quantity + it.AddQuantity,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// Id = it.Id,
// }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
// // 获取更新完库存后的药品库存
// List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Where(cs => cs.MachineId.Equals(it.MachineId))
// .Where(cs => cs.DrugId.Equals(it.DrugId))
// .Where(cs => cs.DrawerType == 1)
// .ToList();
// // 保存数据 入库记录
// SqlSugarHelper.Db.Insertable(new MachineRecord()
// {
// MachineId = it.MachineId,
// DrawerNo = it.DrawerNo,
// ColNo = it.ColNo,
// DrugId = it.DrugId,
// ManuNo = it.ManuNo,
// EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
// Operator = HomeWindowViewModel.Operator?.Id,
// Reviewer = HomeWindowViewModel.Reviewer?.Id,
// OperationTime = DateTime.Now,
// Quantity = it.AddQuantity,
// Type = 1,
// InvoiceId = InvoiceId
// //,StockQuantity = nowChannels.Sum(it => it.Quantity)
// }).ExecuteCommand();
// //保存账册
// SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 1,
// Department = ConfigurationManager.AppSettings["department"].ToString(),
// InvoiceNo = InvoiceId,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// AddQuantity = it.AddQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// CreateTime = DateTime.Now
// }).ExecuteCommand();
// //修改凌晨生成的日结存数据
// AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
// .Where(ab => ab.MachineId.Equals(it.MachineId))
// .Where(ab => ab.Type == 3)
// .Where(ab => ab.DrugId == it.DrugId)
// .Where(ab => ab.ManuNo == it.ManuNo)
// .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
// if (accountBookG2Day != null)
// {
// accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
// SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
// }
// else
// {
// //生成日结存时可能没有该库位的绑定信息,需要写入日结存
// int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 3,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// YQuantity = 0,
// ManuStock = it.AddQuantity,
// TotalStock = it.AddQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// InvoiceNo = "日结存"
// }).ExecuteCommand();
// if (iDayResult <= 0)
// {
// logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
// }
// }
// //修改凌晨生成的总结存数据
// AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
// .Where(ab => ab.MachineId.Equals(it.MachineId))
// .Where(ab => ab.Type == 4)
// .Where(ab => ab.DrugId == it.DrugId)
// .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
// if (accountBookG2Total != null)
// {
// accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
// SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
// }
// else
// {
// //生成总结存时可能没有该库位的绑定信息,需要写入总结存
// int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 4,
// YQuantity = 0,
// ManuStock = it.AddQuantity,
// TotalStock = it.AddQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// InvoiceNo = "总结存"
// }).ExecuteCommand();
// if (iTotalResult <= 0)
// {
// logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
// }
// }
// }
// return true;
// });
// if (f.Data)
// {
// RequestData();
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "抽屉加药完成,库存已更新",
// Type = MsgType.SUCCESS,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// else
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "更新库存失败",
// Type = MsgType.SUCCESS,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// Status = 0;
// _isFinishClick = false;
// }
// else
// {
// _isFinishClick = false;
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "没有填写加药数量",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// }
// });
//}
//// 取消按钮
//public DelegateCommand CancleTake
//{
// get => new DelegateCommand(() =>
// {
// _portUtil.ResetData();
// Status = 0;
// });
//}
public long CurrentTimeMillis()
{
@ -312,9 +526,51 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
FindDrawerCount();
RequestData();
GetDrawer();
}
/// <summary>
/// 查询当前用户对应角色的抽屉权限
/// </summary>
void GetDrawer()
{
string drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
if (!string.IsNullOrEmpty(drawerAuthority))
{
string[] iList = drawerAuthority.Split(',');
foreach (string i in iList)
{
switch (i)
{
case "1":
Drawer1 = true;
break;
case "2":
Drawer2 = true;
break;
case "3":
Drawer3 = true;
break;
case "4":
Drawer4 = true;
break;
case "5":
Drawer5 = true;
break;
case "6":
Drawer6 = true;
break;
case "7":
Drawer7 = true;
break;
case "8":
Drawer8 = true;
break;
}
}
}
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{

View File

@ -27,7 +27,80 @@ namespace DM_Weight.ViewModels
public class DrawerTakeDrugWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(DrawerTakeDrugWindowViewModel));
#region
/// <summary>
/// 1号抽屉
/// </summary>
private bool _Drawer1 = false;
public bool Drawer1
{
get { return _Drawer1; }
set { SetProperty(ref _Drawer1, value); }
}
/// <summary>
/// 2号抽屉
/// </summary>
private bool _Drawer2 = false;
public bool Drawer2
{
get { return _Drawer2; }
set { SetProperty(ref _Drawer2, value); }
}
/// <summary>
/// 3号抽屉
/// </summary>
private bool _Drawer3 = false;
public bool Drawer3
{
get { return _Drawer3; }
set { SetProperty(ref _Drawer3, value); }
}
/// <summary>
/// 4号抽屉
/// </summary>
private bool _Drawer4 = false;
public bool Drawer4
{
get { return _Drawer4; }
set { SetProperty(ref _Drawer4, value); }
}
/// <summary>
/// 5号抽屉
/// </summary>
private bool _Drawer5 = false;
public bool Drawer5
{
get { return _Drawer5; }
set { SetProperty(ref _Drawer5, value); }
}
/// <summary>
/// 6号抽屉
/// </summary>
private bool _Drawer6 = false;
public bool Drawer6
{
get { return _Drawer6; }
set { SetProperty(ref _Drawer6, value); }
}
/// <summary>
/// 7号抽屉
/// </summary>
private bool _Drawer7 = false;
public bool Drawer7
{
get { return _Drawer7; }
set { SetProperty(ref _Drawer7, value); }
}
/// <summary>
/// 8号抽屉
/// </summary>
private bool _Drawer8 = false;
public bool Drawer8
{
get { return _Drawer8; }
set { SetProperty(ref _Drawer8, value); }
}
#endregion
private List<ChannelStock> _channelStocks = new List<ChannelStock>();
public List<ChannelStock> ChannelStocks
@ -71,6 +144,10 @@ namespace DM_Weight.ViewModels
{
Status = 3;
}
//保存库存
SaveStock();
RequestData();
Status = 0;
break;
// 数量变化
case EventType.UPDATEQUANTITY:
@ -136,8 +213,19 @@ namespace DM_Weight.ViewModels
if (Status == 0)
{
Status = 1;
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
//_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
IEnumerable<string> strDrugName = ChannelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + ";";
}
}
int sumQuantity = ChannelStocks.Sum(cs => cs.TakeQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
@ -152,18 +240,12 @@ namespace DM_Weight.ViewModels
});
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
//保存库存
private void SaveStock()
{
get => new DelegateCommand(() =>
try
{
if (!_isFinishClick)
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity != 0).ToList();
logger.Info("点击完成按钮,库位数据:" + JsonConvert.SerializeObject(record));
if (record.Count > 0)
{
string InvoiceId = "DRAWER_" + CurrentTimeMillis();
@ -173,6 +255,8 @@ namespace DM_Weight.ViewModels
for (int i = 0; i < record.Count; i++)
{
ChannelStock it = record[i];
it.ManuNo = it.ManuNo;
it.EffDate = it.EffDate;
// 更新数据 库存信息
@ -183,82 +267,211 @@ namespace DM_Weight.ViewModels
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(it.MachineId))
.Where(cs => cs.DrugId.Equals(it.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
// 保存数据 出库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = it.MachineId,
DrawerNo = it.DrawerNo,
ColNo = it.ColNo,
DrugId = it.DrugId,
ManuNo = it.ManuNo,
EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = it.TakeQuantity,
Type = 2,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
logger.Info($"抽屉取药保存->库位【{it.DrawerNo}-{it.ColNo}】取出药品【{it.DrugInfo.DrugName}】个数【{it.TakeQuantity}】,取药前库存【{it.Quantity}】");
logger.Info($"库存已更新{it.DrugId},{it.Quantity - it.TakeQuantity}");
}
return true;
});
if (f.Data)
{
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
}
else
{
_isFinishClick = false;
AlertMsg alertMsg = new AlertMsg
{
Message = "没有填写取药数量",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
});
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
catch (Exception ex)
{
logger.Info($"保存库存异常{ex.Message}");
}
}
//private bool _isFinishClick = false;
//// 完成按钮
//public DelegateCommand TakeFinish
//{
// get => new DelegateCommand(() =>
// {
// if (!_isFinishClick)
// {
// _isFinishClick = true;
// List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity != 0).ToList();
// logger.Info("点击完成按钮,库位数据:" + JsonConvert.SerializeObject(record));
// if (record.Count > 0)
// {
// string InvoiceId = "DRAWER_" + CurrentTimeMillis();
// var f = SqlSugarHelper.Db.UseTran(() =>
// {
// for (int i = 0; i < record.Count; i++)
// {
// ChannelStock it = record[i];
// // 更新数据 库存信息
// SqlSugarHelper.Db.Updateable(new ChannelStock()
// {
// Quantity = it.Quantity - it.TakeQuantity,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// Id = it.Id,
// }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
// // 获取更新完库存后的药品库存
// List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Where(cs => cs.MachineId.Equals(it.MachineId))
// .Where(cs => cs.DrugId.Equals(it.DrugId))
// .Where(cs => cs.DrawerType == 1)
// .ToList();
// // 保存数据 出库记录
// SqlSugarHelper.Db.Insertable(new MachineRecord()
// {
// MachineId = it.MachineId,
// DrawerNo = it.DrawerNo,
// ColNo = it.ColNo,
// DrugId = it.DrugId,
// ManuNo = it.ManuNo,
// EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
// Operator = HomeWindowViewModel.Operator?.Id,
// Reviewer = HomeWindowViewModel.Reviewer?.Id,
// OperationTime = DateTime.Now,
// Quantity = it.TakeQuantity,
// Type = 2,
// InvoiceId = InvoiceId
// //,StockQuantity = nowChannels.Sum(it => it.Quantity)
// }).ExecuteCommand();
// //保存账册
// SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 2,
// Department = ConfigurationManager.AppSettings["department"].ToString(),
// InvoiceNo = InvoiceId,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// OutQuantity = it.TakeQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// CreateTime = DateTime.Now
// }).ExecuteCommand();
// //修改凌晨生成的日结存数据
// AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
// .Where(ab => ab.MachineId.Equals(it.MachineId))
// .Where(ab => ab.Type == 3)
// .Where(ab => ab.DrugId == it.DrugId)
// .Where(ab => ab.ManuNo == it.ManuNo)
// .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
// if (accountBookG2Day != null)
// {
// accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
// SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
// }
// else
// {
// //生成日结存时可能没有该库位的绑定信息,需要写入日结存
// int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 3,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// YQuantity = 0,
// ManuStock = it.TakeQuantity,
// TotalStock = it.TakeQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// InvoiceNo = "日结存"
// }).ExecuteCommand();
// if (iDayResult <= 0)
// {
// logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
// }
// }
// //修改凌晨生成的总结存数据
// AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
// .Where(ab => ab.MachineId.Equals(it.MachineId))
// .Where(ab => ab.Type == 4)
// .Where(ab => ab.DrugId == it.DrugId)
// .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
// if (accountBookG2Total != null)
// {
// accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
// SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
// }
// else
// {
// //生成总结存时可能没有该库位的绑定信息,需要写入总结存
// int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
// {
// DrugId = it.DrugId,
// Type = 4,
// YQuantity = 0,
// ManuStock = it.TakeQuantity,
// TotalStock = it.TakeQuantity,
// UserId1 = HomeWindowViewModel.Operator?.Id,
// UserId2 = HomeWindowViewModel.Reviewer?.Id,
// MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
// CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
// InvoiceNo = "总结存"
// }).ExecuteCommand();
// if (iTotalResult <= 0)
// {
// logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
// }
// }
// logger.Info($"抽屉取药保存->库位【{it.DrawerNo}-{it.ColNo}】取出药品【{it.DrugInfo.DrugName}】个数【{it.TakeQuantity}】,取药前库存【{it.Quantity}】");
// }
// return true;
// });
// if (f.Data)
// {
// RequestData();
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "抽屉取药完成,库存已更新",
// Type = MsgType.SUCCESS,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// if (!f.IsSuccess)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "抽屉取药完成,库存更新失败!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// Status = 0;
// _isFinishClick = false;
// }
// else
// {
// _isFinishClick = false;
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "没有填写取药数量",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// }
// });
//}
//// 取消按钮
//public DelegateCommand CancleTake
//{
// get => new DelegateCommand(() =>
// {
// _portUtil.ResetData();
// Status = 0;
// });
//}
public long CurrentTimeMillis()
{
@ -273,12 +486,12 @@ namespace DM_Weight.ViewModels
if (ConfigurationManager.AppSettings["MultiBatch"].ToString().Equals("1"))
{
count = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cs => cs.DrawerType != 3)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
}
else
{
count = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType != 3)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
}
Is8Drawer = count < 9;
Is16Drawer = count >= 16;
@ -299,7 +512,7 @@ namespace DM_Weight.ViewModels
.Includes(cs => cs.DrugInfo)
.Where(cs => cs.DrawerNo == DrawerNo)
.Where(cs => cs.DrugId != null)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.Quantity > 0)
.OrderBy(cs => cs.ColNo)
@ -313,8 +526,52 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
FindDrawerCount();
RequestData();
GetDrawer();
}
/// <summary>
/// 查询当前用户对应角色的抽屉权限
/// </summary>
void GetDrawer()
{
string drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
if (!string.IsNullOrEmpty(drawerAuthority))
{
string[] iList = drawerAuthority.Split(',');
foreach (string i in iList)
{
switch (i)
{
case "1":
Drawer1 = true;
break;
case "2":
Drawer2 = true;
break;
case "3":
Drawer3 = true;
break;
case "4":
Drawer4 = true;
break;
case "5":
Drawer5 = true;
break;
case "6":
Drawer6 = true;
break;
case "7":
Drawer7 = true;
break;
case "8":
Drawer8 = true;
break;
}
}
}
}
/// <param name="navigationContext"></param>
/// <returns></returns>
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class DrugBaseWindowViewModel
{
}
}

View File

@ -12,6 +12,10 @@ using DM_Weight.select;
using DM_Weight.util;
using log4net.Repository.Hierarchy;
using log4net;
using DM_Weight.msg;
using Prism.Events;
using System.Configuration;
using static Unity.Storage.RegistrationSet;
namespace DM_Weight.ViewModels
{
@ -58,6 +62,13 @@ namespace DM_Weight.ViewModels
}
}
IEventAggregator _eventAggregator;
public DrugListWindowViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
private List<DrugInfo> _drugInfos;
public List<DrugInfo> DrugInfos
{
@ -68,7 +79,10 @@ namespace DM_Weight.ViewModels
private DrugInfo _selectedDrug = new();
public DrugInfo SelectedDrug
{
get { return _selectedDrug; }
get
{
return _selectedDrug;
}
set
{
@ -81,6 +95,7 @@ namespace DM_Weight.ViewModels
{
SetProperty(ref _selectedDrug, new());
Manunos = null;
SelectedDrug.drugBase = new();
}
}
@ -182,51 +197,229 @@ namespace DM_Weight.ViewModels
try
{
//SelectedDrug.DrugId = 0;
//查询最大药品id并+1赋值给新增药品
string maxDrugId = SqlSugarHelper.Db.Queryable<DrugInfo>().Max(it => it.DrugId);
SelectedDrug.DrugId = maxDrugId + 1;
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Insertable(SelectedDrug).ExecuteCommand();
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId.ToString(),
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "新增成功",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "新增失败",
Type = MsgType.INFO,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
RequestData();
}
catch (Exception ex)
{
ILog logger = LogManager.GetLogger(typeof(DrugListWindowViewModel));
logger.Info($"添加数据异常:{ex.ToString()}");
AlertMsg alertMsg = new AlertMsg
{
Message = $"添加数据异常:{ex.ToString()}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
});
}, () => SelectedDrug.DrugId ==null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand EditDrugCommand
{
get => new DelegateCommand(() =>
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Updateable(SelectedDrug).UpdateColumns(d => new { d.DrugName, d.Manufactory, d.PyCode, d.PackUnit, d.MaxStock, d.DrugSpec }).ExecuteCommand();
if (SelectedDrug.drugBase == null || SelectedDrug.drugBase.BaseId == 0)
{
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId.ToString(),
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
}
else
{
//查询药品基数是否存在,存在则修改不存在则新增
DrugBase drugBase = SqlSugarHelper.Db.Queryable<DrugBase>()
.Where(db => db.BaseId == SelectedDrug.drugBase.BaseId).First();
if (drugBase == null)
{
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId.ToString(),
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
}
else
{
SqlSugarHelper.Db.Updateable(new DrugBase() { BaseQuantity = SelectedDrug.drugBase.BaseQuantity }).UpdateColumns(bs => new { bs.BaseQuantity }).Where(bs => bs.BaseId == SelectedDrug.drugBase.BaseId).ExecuteCommand();
}
}
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "修改完成",
Type = MsgType.INFO,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "修改失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
RequestData();
}, () => SelectedDrug.DrugId > 0).ObservesProperty(() => SelectedDrug);
}, () => SelectedDrug.DrugId!=null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand AddManuCommand
{
get => new DelegateCommand(() =>
{
try
{
if (!string.IsNullOrEmpty(SelectedManuno.EffDate) && !string.IsNullOrEmpty(SelectedManuno.ManuNo))
{
string dt = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
int repeatCount = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(dm => dm.DrugId == SelectedDrug.DrugId.ToString() && dm.EffDate == dt && dm.ManuNo == SelectedManuno.ManuNo).Count();
if (repeatCount > 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "批次重复,请勿重复添加!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
SelectedManuno.Id = Guid.NewGuid().ToString();
SelectedManuno.DrugId = SelectedDrug.DrugId.ToString();
SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
SqlSugarHelper.Db.Insertable(SelectedManuno).ExecuteCommand();
GetManuNos();
int iResult = SqlSugarHelper.Db.Insertable(SelectedManuno).ExecuteCommand();
AlertMsg alertMsg = new AlertMsg();
if (iResult > 0)
{
alertMsg = new AlertMsg
{
Message = "保存成功!",
Type = MsgType.SUCCESS,
};
}
else
{
alertMsg = new AlertMsg
{
Message = "保存失败!",
Type = MsgType.SUCCESS,
};
}
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
//GetManuNos();
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请输入批次及效期!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}, () => SelectedDrug.DrugId > 0).ObservesProperty(() => SelectedDrug);
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"添加失败{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}, () => SelectedDrug.DrugId != null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand EditManuCommand
{
get => new DelegateCommand(() =>
{
try
{
string dt = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
int repeatCount = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(dm => dm.DrugId == SelectedDrug.DrugId.ToString() && dm.EffDate == dt && dm.ManuNo == SelectedManuno.ManuNo).Count();
if (repeatCount > 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "批次重复,请勿重复添加!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
SqlSugarHelper.Db.Updateable(SelectedManuno).UpdateColumns(m => new { m.ManuNo, m.EffDate }).ExecuteCommand();
GetManuNos();
AlertMsg alertMsg = new AlertMsg
{
Message = "修改成功!",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "修改失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}, () => !string.IsNullOrEmpty(SelectedManuno.DrugId)).ObservesProperty(() => SelectedManuno);
}
@ -257,13 +450,22 @@ namespace DM_Weight.ViewModels
{
int totalCount = 0;
DrugInfos = SqlSugarHelper.Db.Queryable<DrugInfo>()
.Includes(di => di.drugBase)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (di) => di.DrugId.ToString().Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (di) => di.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (di) => di.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (di) => di.DrugBarcode.Contains(SearchValue))
.Select(di => di)
.ToPageList(PageNum, PageSize, ref totalCount)
;
//.Select(di => di)
.ToPageList(PageNum, PageSize, ref totalCount);
foreach (DrugInfo di in DrugInfos)
{
if (di.drugBase == null)
{
di.drugBase = new DrugBase();
}
}
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}

View File

@ -14,6 +14,7 @@ using DM_Weight.Finger;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.util;
using SqlSugar;
namespace DM_Weight.ViewModels
{
@ -37,6 +38,10 @@ namespace DM_Weight.ViewModels
}
public List<RoleDm> Roles { get; set; }
//交接柜用户
private UserList JiaojieUser;
private string UserName;
//private RoleDm JiaojieRole;
private string _oldPass;
public string OldPass
@ -98,11 +103,15 @@ namespace DM_Weight.ViewModels
// 修改密码
if (OnlyPassword)
{
JiaojieUser= SqlSugarHelper.Db.Queryable<UserList>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"]??"DM5")&&r.UserName== UserName).OrderBy(r => r.Id).First();
if (MD5.GetMD5Hash(OldPass).ToLower().Equals(UserList.PassWord.ToLower()))
{
// 旧密码输入正确
UserList.PassWord = MD5.GetMD5Hash(NewPass);
SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.PassWord }).ExecuteCommand();
//修改交接柜用户密码
JiaojieUser.PassWord = UserList.PassWord;
SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.PassWord }).ExecuteCommand();
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
@ -116,25 +125,47 @@ namespace DM_Weight.ViewModels
{
if (UserList.Id > 0)
{
JiaojieUser = SqlSugarHelper.Db.Queryable<UserList>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && r.UserName == UserName).OrderBy(r => r.Id).First();
// 更新
// 没有写密码
if (string.IsNullOrEmpty(NewPass))
{
SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.Nickname, u.UserName, u.UserBarcode, u.RoleId }).ExecuteCommand();
//更新交接柜用户
JiaojieUser.Nickname = UserList.Nickname;
JiaojieUser.UserName= UserList.UserName;
JiaojieUser.UserBarcode= UserList.UserBarcode;
SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.Nickname, u.UserName, u.UserBarcode, u.RoleId }).ExecuteCommand();
}
// 更改了密码
else
{
UserList.PassWord = MD5.GetMD5Hash(NewPass);
SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId }).ExecuteCommand();
JiaojieUser.PassWord= UserList.PassWord;
JiaojieUser.Nickname= UserList.Nickname;
JiaojieUser.UserName= UserList.UserName;
JiaojieUser.UserBarcode= UserList.UserBarcode;
SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId }).ExecuteCommand();
}
}
else
{
UserList.PassWord = MD5.GetMD5Hash(NewPass);
UserList.MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1";
UserList.MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM3";
// 插入
SqlSugarHelper.Db.Insertable<UserList>(UserList).InsertColumns(u => new { u.Id, u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId, u.MachineId }).ExecuteCommand();
// 插入交接柜用户
int? roleId = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5")).OrderBy(r => r.Id).Select(r=>r.Id).First();
JiaojieUser = UserList;
JiaojieUser.MachineId = ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5";
JiaojieUser.RoleId= roleId;
SqlSugarHelper.Db.Insertable<UserList>(JiaojieUser).InsertColumns(u => new { u.Id, u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId, u.MachineId }).ExecuteCommand();
}
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
@ -154,7 +185,7 @@ namespace DM_Weight.ViewModels
void GetAllRole()
{
Roles = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM1")).OrderBy(r => r.Id).ToList();
Roles = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3")).OrderBy(r => r.Id).ToList();
RaisePropertyChanged("Roles");
}
@ -189,12 +220,15 @@ namespace DM_Weight.ViewModels
OnlyPassword = parameters.GetValue<bool>("EditPass");
EditUser = false;
Title = "修改密码";
UserName=UserList.UserName;
}
else
{
if (parameters.ContainsKey("User"))
{
UserList = parameters.GetValue<UserList>("User");
UserName = UserList.UserName;
}
if (UserList.Id == null)
{

View File

@ -0,0 +1,266 @@
using DM_Weight.Common;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using log4net.Repository.Hierarchy;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
namespace DM_Weight.ViewModels
{
public class FridgeOnlyWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
{
private readonly ILog logger = LogManager.GetLogger(typeof(FridgeOnlyWindowViewModel));
//温度区间
private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
public string TemperatureRange
{
get => _temperatureRange;
set
{
SetProperty(ref _temperatureRange, value);
}
}
//温度不在范围超时时间
private string _outRangeTime = CommonClass.ReadAppSetting("OutRangeTime").ToString();
public string OutRangeTime
{
get => _outRangeTime; set
{
SetProperty(ref _outRangeTime, value);
}
}
private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
//温度值
private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
public float TemperatureValue
{
get => _temperatureValue;
set => SetProperty(ref _temperatureValue, value);
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可点击
/// </summary>
private bool _isInvalid;
public bool IsInvalid
{
get => _isInvalid;
set
{
SetProperty(ref _isInvalid, value);
BtnIsEnable = !IsInvalid;
}
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可用
/// </summary>
private bool _btnIsEnable = true;
public bool BtnIsEnable
{
get => _btnIsEnable;
set => SetProperty(ref _btnIsEnable, value);
}
//冰箱状态:true关1;false开0
private bool _fridgeState;
public bool FridgeState
{
get => _fridgeState;
set => SetProperty(ref _fridgeState, value);
}
//报警状态:true关1;false开0
private bool _alarmState;
public bool AlarmState
{
get => _alarmState;
set => SetProperty(ref _alarmState, value);
}
private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public FridgeOnlyWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
/// <summary>
/// 保存按钮
/// </summary>
public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); }
public bool KeepAlive => false;
private async void SaveAction()
{
try
{
_portUtil.FridgeOperate = true;
//设置温度值验证不通过则直接返回不保存
//获取冰箱温度
//if (_fridgeState != _defaultLoginMode.Equals(1))
//{
// ConfigurationManager.RefreshSection("FridgeState");
//发送冰箱使能/失能指令
if (FridgeState)
{
await _portUtil.FridgeOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "1");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["FridgeState"].Value = "1";
//_configuration.Save();
//ConfigurationManager.RefreshSection("FridgeState");
}
else
{
await _portUtil.FridegOpen(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "0");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["FridgeState"].Value = "0";
//_configuration.Save();
//ConfigurationManager.RefreshSection("FridgeState");
//冰箱打开定时获取冰箱温度
_eventAggregator.GetEvent<FridgeEvent>().Publish();
}
//发送警报使能/失能指令
if (AlarmState)
{
await _portUtil.FridgeAlarmOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "1");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["AlarmState"].Value = "1";
//_configuration.Save();
//ConfigurationManager.RefreshSection("AlarmState");
}
else
{
await _portUtil.FridgeAlarmOn(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "0");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["AlarmState"].Value = "0";
//_configuration.Save();
//ConfigurationManager.RefreshSection("AlarmState");
}
//设定冰箱1温度区间
//string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
string[] newRange = TemperatureRange.Split('-');
if (newRange.Length >= 2)
{
bool bMix = float.TryParse(newRange[0], out float Min);
bool bMax = float.TryParse(newRange[1], out float Max);
if (bMix && bMax)
{
if (Min != Convert.ToSingle(newRange[0]))
{
//设定冰箱温度最小值
await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
Thread.Sleep(100);
}
if (Max != Convert.ToSingle(newRange[1]))
{
Thread.Sleep(100);
//设定冰箱温度最大值
await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
Thread.Sleep(100);
}
}
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["TemperatureRange"].Value = c;
//_configuration.Save();
//ConfigurationManager.RefreshSection("TemperatureRange");
CommonClass.SaveAppSetting("TemperatureRange", TemperatureRange);
}
//超时时间
if (OutRangeTime != null)
{
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["OutRangeTime"].Value = OutRangeTime;
//_configuration.Save();
//ConfigurationManager.RefreshSection("OutRangeTime");
CommonClass.SaveAppSetting("OutRangeTime", OutRangeTime);
}
_portUtil.FridgeOperate = false;
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存成功",
Type = MsgType.SUCCESS
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存异常{ex.ToString}",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
_portUtil.FridgeOperate = false;
}
}
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
//public int ReadAppSetting(string key)
//{
// string xPath = "/configuration/appSettings//add[@key='" + key + "']";
// XmlDocument doc = new XmlDocument();
// string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
// doc.Load(exeFileName + ".dll.config");
// XmlNode node = doc.SelectSingleNode(xPath);
// logger.Info($"xPath:{xPath} exeFileName:{exeFileName} ReadAppSetting key:{key} value:{node.Attributes["value"].Value}");
// return Convert.ToInt32(node.Attributes["value"].Value);
//}
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
FridgeState =CommonClass.ReadAppSetting("FridgeState").Equals("1");
AlarmState = CommonClass.ReadAppSetting("AlarmState").Equals("1");
GetTemperature();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
//获取冰箱温度值,如有更改则保存更改
private async Task GetTemperature()
{
//float retT = await _portUtil.GetFridgeTemperature();
}
}
}

View File

@ -0,0 +1,345 @@
using DM_Weight.Common;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Xml;
namespace DM_Weight.ViewModels
{
public class FridgeWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
{
//温度区间
private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
public string TemperatureRange
{
get => _temperatureRange;
set
{
SetProperty(ref _temperatureRange, value);
//更新配置文件中冰箱温度区间
CommonClass.SaveAppSetting("temperatureRange", _temperatureRange);
}
}
//冰箱2温度区间
private string _temperatureRange2 = CommonClass.ReadAppSetting("temperatureRange2").ToString();
public string TemperatureRange2
{
get => _temperatureRange2;
set
{
SetProperty(ref _temperatureRange2, value);
//更新配置文件中冰箱温度区间
CommonClass.SaveAppSetting("temperatureRange2", _temperatureRange2);
}
}
private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
//温度值
private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
public float TemperatureValue
{
get => _temperatureValue;
set => SetProperty(ref _temperatureValue, value);
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可点击
/// </summary>
private bool _isInvalid;
public bool IsInvalid
{
get => _isInvalid;
set
{
SetProperty(ref _isInvalid, value);
BtnIsEnable = !IsInvalid;
}
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可用
/// </summary>
private bool _btnIsEnable = true;
public bool BtnIsEnable
{
get => _btnIsEnable;
set => SetProperty(ref _btnIsEnable, value);
}
//冰箱状态:true关;false开
private bool _fridgeState;
public bool FridgeState
{
get => _fridgeState;
set => SetProperty(ref _fridgeState, value);
}
//报警状态:true关;false开
private bool _alarmState;
public bool AlarmState
{
get => _alarmState;
set => SetProperty(ref _alarmState, value);
}
//冰箱2状态:true关;false开
private bool _fridgeState2;
public bool FridgeState2
{
get => _fridgeState2;
set => SetProperty(ref _fridgeState2, value);
}
//冰箱2报警状态:true关;false开
private bool _alarmState2;
public bool AlarmState2
{
get => _alarmState2;
set => SetProperty(ref _alarmState2, value);
}
private int _defaultLoginMode;//1开0关
private int _defaultAlarmMode;//1开0关
private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public FridgeWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
/// <summary>
/// 保存按钮
/// </summary>
public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); }
public bool KeepAlive => false;
private async void SaveAction()
{
try
{
_portUtil.FridgeOperate = true;
//设置温度值验证不通过则直接返回不保存
//获取冰箱温度
//if (_fridgeState != _defaultLoginMode.Equals(1))
//{
// ConfigurationManager.RefreshSection("FridgeState");
//发送冰箱使能/失能指令
if (_fridgeState)
{
await _portUtil.FridgeOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "0");
}
else
{
await _portUtil.FridegOpen(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "1");
}
//冰箱2 发送冰箱使能/失能指令
if (_fridgeState2)
{
await _portUtil.FridgeOff(2);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState2", "0");
}
else
{
await _portUtil.FridegOpen(2);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState2", "1");
}
//}
//温度报警设定
//if (AlarmState != _defaultAlarmMode.Equals(1))
//{
//发送警报使能/失能指令
if (_alarmState)
{
await _portUtil.FridgeAlarmOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "0");
}
else
{
await _portUtil.FridgeAlarmOn(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "1");
}
//冰箱2 发送警报使能/失能指令
if (_alarmState2)
{
await _portUtil.FridgeAlarmOff(2);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState2", "0");
}
else
{
await _portUtil.FridgeAlarmOn(2);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState2", "1");
}
//}
//if (retTemperature != TemperatureValue)
//{
// //设定冰箱温度
// await _portUtil.SetFridgeTemperature(TemperatureValue);
// CommonClass.SaveAppSetting("temperatureValue", TemperatureValue.ToString());
//}
//设定冰箱1温度区间
string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
string[] newRange = TemperatureRange.Split('-');
if (range.Length >= 2)
{
bool bMix = float.TryParse(range[0], out float Min);
bool bMax = float.TryParse(range[1], out float Max);
if (bMix && bMax)
{
if (Min != Convert.ToSingle(newRange[0]))
{
//设定冰箱温度最小值
await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
Thread.Sleep(100);
}
if (Max != Convert.ToSingle(newRange[1]))
{
Thread.Sleep(100);
//设定冰箱温度最大值
await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
Thread.Sleep(100);
}
}
}
//设定冰箱2温度区间
string[] range2 = ConfigurationManager.AppSettings["temperatureRange2"].Split('-');
string[] newRange2 = TemperatureRange2.Split('-');
if (range2.Length >= 2)
{
bool bMix = float.TryParse(range2[0], out float Min);
bool bMax = float.TryParse(range2[1], out float Max);
if (bMix && bMax)
{
if (Min != Convert.ToSingle(newRange2[0]))
{
//设定冰箱温度最小值
await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange2[0]), 2);
Thread.Sleep(100);
}
if (Max != Convert.ToSingle(newRange2[1]))
{
Thread.Sleep(100);
//设定冰箱温度最大值
await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange2[1]), 2);
Thread.Sleep(100);
}
}
}
_portUtil.FridgeOperate = false;
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存成功",
Type = MsgType.SUCCESS
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
//_fridgeState = ReadAppSetting("FridgeState").Equals(1);
//_defaultLoginMode = ReadAppSetting("FridgeState");
//_defaultAlarmMode = ReadAppSetting("AlarmState");
//_alarmState = ReadAppSetting("AlarmState").Equals(1);
//_temperatureRange = CommonClass.ReadAppSetting("temperatureRange");
//_temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存异常{ex.ToString}",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
_portUtil.FridgeOperate = false;
}
}
public FridgeWindowViewModel()
{
}
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
public int ReadAppSetting(string key)
{
string xPath = "/configuration/appSettings//add[@key='" + key + "']";
XmlDocument doc = new XmlDocument();
string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
doc.Load(exeFileName + ".dll.config");
XmlNode node = doc.SelectSingleNode(xPath);
return Convert.ToInt32(node.Attributes["value"].Value);
}
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
_fridgeState = ReadAppSetting("FridgeState").Equals(0);
_defaultLoginMode = ReadAppSetting("FridgeState");
_defaultAlarmMode = ReadAppSetting("AlarmState");
_alarmState = ReadAppSetting("AlarmState").Equals(0);
GetTemperature();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
//public void OnNavigatedTo(NavigationContext navigationContext)
//{
// GetTemperature();
//}
//public bool IsNavigationTarget(NavigationContext navigationContext)
//{
// return true;
//}
//public void OnNavigatedFrom(NavigationContext navigationContext)
//{
//}
//获取冰箱温度值,如有更改则保存更改
private async Task GetTemperature()
{
//float retT = await _portUtil.GetFridgeTemperature();
}
}
}

View File

@ -22,7 +22,10 @@ using Unity;
using System.Windows.Threading;
using Newtonsoft.Json.Linq;
using DM_Weight.msg;
using DM_Weight.HIKVISION;
using System.Threading;
using DM_Weight.Common;
using System.Windows.Media;
using MaterialDesignThemes.Wpf;
namespace DM_Weight.ViewModels
{
@ -34,6 +37,38 @@ namespace DM_Weight.ViewModels
private UserList? _userList;
private UserList? _userList2;
/// <summary>
/// 冰箱温度
/// </summary>
private string _wd = "恒温冷藏抽屉当前温度2.8(非真实数据)";
public string WD { get => _wd; set => SetProperty(ref _wd, value); }
private SolidColorBrush _alertColor = Brushes.White;
public SolidColorBrush AlertColor
{
get => _alertColor;
set => SetProperty(ref _alertColor, value);
}
/// <summary>
/// 是否有冰箱抽屉
/// </summary>
private string hasFridge = ConfigurationManager.AppSettings["hasFridge"].ToString().Equals("1") ? "Visible" : "Collapsed";
public string HasFridge { get => hasFridge; set => SetProperty(ref hasFridge, value); }
//温度区间
private string TemperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
//温度不在区间计时器(超过配置文件中的时间后要报警)
public DateTime? FridgeTime { get; set; }
//冰箱是否异常状态:0正常1异常
//public string FridgeWorkingState = ConfigurationManager.AppSettings["FridgeworkingState"].ToString();
//冰箱开关状态:0开1关
public string FridgeState = ConfigurationManager.AppSettings["FridgeState"].ToString();
//冰箱渡不在区间超时时间
private string _outRangeTime = ConfigurationManager.AppSettings["OutRangeTime"].ToString();
public string OutRangeTime { get => _outRangeTime; set => SetProperty(ref _outRangeTime, value); }
private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
public bool MultiLogin
{
@ -51,76 +86,87 @@ namespace DM_Weight.ViewModels
get { return _selectedChildMenu; }
set
{
if (!_portUtil.Operate)
{
if (value != null)
{
if (value.PremissionPath.Equals("TakeRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//if (!_portUtil.Operate)
//{
// if (value != null)
// {
// if (value.PremissionPath.Equals("TakeRecordWindow"))
// {
// //定义传参变量
// NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 2);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (value.PremissionPath.Equals("AddRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
// //添加参数,键值对格式
// keys.Add("Type", 2);
// _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
// }
// else if (value.PremissionPath.Equals("AddRecordWindow"))
// {
// //定义传参变量
// NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 1);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (value.PremissionPath.Equals("ReturnRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
// //添加参数,键值对格式
// keys.Add("Type", 1);
// _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
// }
// else if (value.PremissionPath.Equals("ReturnRecordWindow"))
// {
// //定义传参变量
// NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 3);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (value.PremissionPath.Equals("RetrunEmptyRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
// //添加参数,键值对格式
// keys.Add("Type", 3);
// _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
// }
// else if (value.PremissionPath.Equals("RetrunEmptyRecordWindow"))
// {
// //定义传参变量
// NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 3);
_regionManager.RequestNavigate("ContentRegion", value.PremissionPath, keys);
}
else if (value.PremissionPath.Equals("CheckRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
// //添加参数,键值对格式
// keys.Add("Type", 3);
// _regionManager.RequestNavigate("ContentRegion", value.PremissionPath, keys);
// }
// else if (value.PremissionPath.Equals("CheckRecordWindow"))
// {
// //定义传参变量
// NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 4);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else
{
if (value.PremissionPath.Equals("ReturnDrugWindow") || value.PremissionPath.Equals("ReturnDrugWindow2"))
{
if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
{
_regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
}
else
{
_regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
}
}
else
{
_regionManager.RequestNavigate("ContentRegion", value.PremissionPath);
}
}
}
// //添加参数,键值对格式
// keys.Add("Type", 4);
// _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
// }
// else
// {
// if (value.PremissionPath.Equals("ReturnDrugWindow") || value.PremissionPath.Equals("ReturnDrugWindow2"))
// {
// if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
// {
// _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
// }
// else
// {
// _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
// }
// }
// else if (value.PremissionPath.Equals("SettingMainWindow") || value.PremissionPath.Equals("SettingWindow"))
// {
// //if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"])>0)
// //{
// // _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
// //}
// //else
// {
// _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
// }
// }
// else
// {
// _regionManager.RequestNavigate("ContentRegion", value.PremissionPath);
// }
// }
// }
SetProperty(ref _selectedChildMenu, value);
}
//}
}
}
@ -146,19 +192,47 @@ namespace DM_Weight.ViewModels
SetProperty(ref _selectedMenu, value);
}
}
PremissionDm? PreSelectedMenu;
#region
private DelegateCommand<ListBox> _selectionCommon;
public DelegateCommand<ListBox> SelectionCommon
#endregion
private DelegateCommand _selectionCommon;
public DelegateCommand SelectionCommon
{
get => _selectionCommon ?? (_selectionCommon = new DelegateCommand<ListBox>(SelectionMethod));
get => _selectionCommon ?? (_selectionCommon = new DelegateCommand(SelectionMethod));
}
private void SelectionMethod(ListBox viewName)
{
SelectedMenu = viewName.SelectedItem as PremissionDm;
if (SelectedMenu.PremissionName == "退出")
private void SelectionMethod()
{
_chkFunction.HIKStopDVRRecord();
if (SelectedMenu != null && SelectedMenu.PremissionName != "退出")
{
PreSelectedMenu = SelectedMenu;
}
if (_portUtil.Operate)
{
if (PreSelectedMenu != null)
{
SelectedMenu = PreSelectedMenu;
}
}
//SelectedMenu = viewName.SelectedItem as PremissionDm;
//if (SelectedMenu.PremissionName == "退出")
//{
// _chkFunction.HIKStopDVRRecord();
// logger.Info($"用户【{Operator?.Nickname}】退出登录");
// Operator = null;
// Reviewer = null;
// _regionManager.RequestNavigate("MainRegion", "LoginWindow");
//}
//else
//{
// //SelectedMenu.Children = SelectedMenu.Children;
// SelectedChildMenu = SelectedMenu.Children[0];
//}
logger.Info("开始进入父菜单");
if (SelectedMenu != null && SelectedMenu.PremissionName == "退出" && !_portUtil.Operate)
{
logger.Info($"用户【{Operator?.Nickname}】退出登录");
Operator = null;
Reviewer = null;
@ -166,10 +240,110 @@ namespace DM_Weight.ViewModels
}
else
{
//SelectedMenu.Children = SelectedMenu.Children;
SelectedChildMenu = SelectedMenu.Children[0];
if (!_portUtil.Operate)
{
_regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath);
}
}
logger.Info("结束父菜单");
}
#region
private DelegateCommand _selectionChildCommon;
public DelegateCommand SelectionChildCommon
{
get => _selectionChildCommon ?? (_selectionChildCommon = new DelegateCommand(SelectionChildMethod));
}
private void SelectionChildMethod()
{
SelectChildNavigate(SelectedChildMenu);
}
private void SelectChildNavigate(PremissionDm SelectedChildMenu)
{
if (!_portUtil.Operate)
{
if (SelectedChildMenu != null)
{
if (SelectedChildMenu.PremissionPath.Equals("TakeRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 2);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (SelectedChildMenu.PremissionPath.Equals("AddRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 1);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (SelectedChildMenu.PremissionPath.Equals("ReturnRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 3);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else if (SelectedChildMenu.PremissionPath.Equals("RetrunEmptyRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 3);
_regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath, keys);
}
else if (SelectedChildMenu.PremissionPath.Equals("CheckRecordWindow"))
{
//定义传参变量
NavigationParameters keys = new NavigationParameters();
//添加参数,键值对格式
keys.Add("Type", 4);
_regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
}
else
{
if (SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow") || SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow2"))
{
if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
{
_regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
}
else
{
_regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
}
}
//else if (SelectedChildMenu.PremissionPath.Equals("SettingMainWindow") || SelectedChildMenu.PremissionPath.Equals("SettingWindow"))
//{
// if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 0)
// {
// _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
// }
// else
// {
// _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
// }
//}
else
{
_regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath);
}
}
}
}
}
#endregion
public List<PremissionDm> PremissionDmList { get { return _premissionDmList; } set { SetProperty(ref _premissionDmList, value); } }
@ -186,16 +360,17 @@ namespace DM_Weight.ViewModels
public bool Is16Drawer { get => _is16Drawer; set => SetProperty(ref _is16Drawer, value); }
public bool KeepAlive => false;
private PortUtil _portUtil;
private CHKFunction _chkFunction;
//private CHKFunction _chkFunction;
IEventAggregator _eventAggregator;
public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator,CHKFunction cHKFunction)
bool IsLeave = false;
public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_regionManager = iRegionManager;
_dialogService = dialogService;
_container = container;
this._eventAggregator = eventAggregator;
_chkFunction= cHKFunction;
//_chkFunction = cHKFunction;
}
public DelegateCommand<string> OpenFingerDialog
@ -262,6 +437,90 @@ namespace DM_Weight.ViewModels
}
Is16Drawer = count == 16;
}
/// <summary>
/// 获取温度信息
/// </summary>
private async void GetWD(object sender, ElapsedEventArgs e)
{
if (!_portUtil.FridgeOperate)
{
string retStr = string.Empty;
byte[] data = null;
float retT = await _portUtil.GetFridgeTemperature(1);
Thread.Sleep(80);
WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃";
}
}
private async void GetWD()
{
if (!_portUtil.FridgeOperate && FridgeState.Equals("0"))
{
string retStr = string.Empty;
byte[] data = null;
float retT = await _portUtil.GetFridgeTemperature(1);
Thread.Sleep(80);
WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃";
logger.Info(WD);
//if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1)
//{
// float retTemp = await _portUtil.GetFridgeTemperature(2);
// Thread.Sleep(80);
// WD += $"{retTemp}℃";
//}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"正在获取冰箱温度或已关闭冰箱制冷功能!!!",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
/// <summary>
/// 将收到的返回转换成具体温度数值
/// </summary>
/// <param name="receiveData"></param>
/// <returns></returns>
public string GetResultWD(string receiveData)
{
try
{
//string newStrWD = receiveData.Substring(10, 4);
//logger.Info($"截取后数据newStrWD{newStrWD}");
int iWD = Convert.ToInt32(receiveData, 16);
logger.Info($"截取后数据iWD{iWD}");
float fWD = 0;
if (iWD != 0)
{
fWD = iWD * 1.0f / 10;
}
logger.Info($"截取后数据fWD{fWD}");
string strRet = $"恒温冷藏抽屉当前温度:{fWD}℃;";
return strRet;
}
catch (Exception ex)
{
logger.Info("GetResultWD异常", new Exception($"{ex.ToString()}"));
}
return "数据异常";
}
/// <summary>
/// 查看冰箱温度
/// </summary>
public DelegateCommand CheckWDCommand { get => new DelegateCommand(CheckAction); }
private void CheckAction()
{
GetWD();
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
@ -305,37 +564,293 @@ namespace DM_Weight.ViewModels
//.ToTree(pd => pd.Children, pd => pd.ParentId, 0);
PremissionDmList = premissions;
SelectedMenu = premissions[0];
PreSelectedMenu = premissions[0];
SelectedChildMenu = premissions[0].Children[0];
_regionManager.RequestNavigate("ContentRegion", premissions[0].Children[0].PremissionPath);
FindDrawerCount();
int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
if (autoExit > 0)
{
Timer timer = new Timer();
timer.Interval = 1000;
timer.Elapsed += (sender, e) =>
//int interval = autoExit * 1000;
new PromiseUtil<int>().taskAsyncLoop(1000, 0, async (options, next, stop) =>
{
try
{
// 串口无人操作
if (!_portUtil.Operate)
{
// 30秒内无人操作鼠标键盘
// 无人操作鼠标键盘
if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)
{
logger.Info($"设备30秒内无人操作,用户【{Operator?.Nickname}】自动退出登录");
_chkFunction.HIKStopDVRRecord();
logger.Info($"设备{autoExit}内无人操作,用户【{Operator?.Nickname}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoExit:{autoExit}");
Operator = null;
Reviewer = null;
Application.Current.Dispatcher.Invoke(() =>
//Application.Current.Dispatcher.Invoke(() =>
//{
stop();
System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
DialogHost.Close("RootDialog");
_regionManager.RequestNavigate("MainRegion", "LoginWindow");
timer.Stop();
}));
//});
//timer.Dispose();
}
else
{
if (Operator == null)
{
stop();
}
else
{
next();
}
}
}
else
{
_portUtil.dateTime = DateTime.Now;
next();
}
}
catch (Exception ex)
{
logger.Info($"自动退出异常:{ex.Message}");
}
});
}
//int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
//int stopRecord = Convert.ToInt32(ConfigurationManager.AppSettings["stopRecord"] ?? "0");
//if (autoExit > 0)
//{
// System.Timers.Timer timer = new System.Timers.Timer();
// timer.Interval = 1000;
// timer.Elapsed += (sender, e) =>
// {
// // 串口无人操作
// if (!_portUtil.Operate)
// {
// // 30秒内无人操作鼠标键盘
// if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)
// {
// logger.Info($"设备30秒内无人操作用户【{Operator?.Nickname}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoExit:{autoExit}");
// //_chkFunction.HIKStopDVRRecord();
// Operator = null;
// Reviewer = null;
// Application.Current.Dispatcher.Invoke(() =>
// {
// _regionManager.RequestNavigate("MainRegion", "LoginWindow");
// timer.Stop();
// });
// }
// }
// };
// timer.Start();
//}
//#region 温度查询定时
//int interval = Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]);
//if (interval > 0)
//{
// WDTimer = new System.Timers.Timer();
// WDTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetWD);
// WDTimer.Interval = interval;
// //WDTimer.Start();
// //WDTimer.AutoReset = true;
// //WDTimer.Enabled = true;
//}
//#endregion
//GetWD();
//if (stopRecord > 0)
//{
// System.Timers.Timer timer = new System.Timers.Timer();
// timer.Interval = 1000;
// timer.Elapsed += (sender, e) =>
// {
// //指定时间内无人操作鼠标键盘则停止录像
// if (!_portUtil.Operate && CheckComputerFreeState.GetLastInputTime() > stopRecord)
// {
// _chkFunction.HIKStopDVRRecord();
// }
// };
// timer.Start();
//}
//logger.Info($"当前时间:{DateTime.Now}\r\n获取录像机的时间");
////获取录像机的时间
//_chkFunction.HIK_DVR_TIME();
//_chkFunction.HIKStartDVRRecord();
GetFridgeTemperature();
_eventAggregator.GetEvent<FridgeEvent>().Subscribe(GetFridgeTemperature);
}
};
timer.Start();
//获取冰箱温度定时
private void GetFridgeTemperature()
{
string[] tempRange = TemperatureRange.Split('-');
new PromiseUtil<int>().taskAsyncLoop(10000, 0, async (options, next, stop) =>
{
try
{
FridgeState = CommonClass.ReadAppSetting("FridgeState");
if (!_portUtil.FridgeOperate && FridgeState.Equals("0"))
{
string retStr = string.Empty;
byte[] data = null;
float retT = await _portUtil.GetFridgeTemperature(1);
Thread.Sleep(80);
WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃;";
AlertColor = Brushes.White;
logger.Info(WD);
if (tempRange != null && tempRange.Count() >= 2)
{
if (retT < Convert.ToSingle(tempRange[0]) || retT > Convert.ToSingle(tempRange[1]))
{
//查询制冷片温度
float retT2 = await _portUtil.GetFridgeTemperature2();
if (retT2 > 65)
{
if (!FridgeState.Equals("1"))
{
//停掉冰箱
await _portUtil.FridgeOff(1);
CommonClass.SaveAppSetting("FridgeState", "1");
//AlertMsg alertMsg = new AlertMsg
//{
// Message = $"冰箱制冷片温度超过65度已关闭冰箱制冷功能!!!",
// Type = MsgType.ERROR
//};
//_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("warnMessage", "冰箱制冷片温度超过65度已关闭冰箱制冷功能!!!");
DialogServiceExtensions.ShowDialogHost(_dialogService, "WarnDialog", dialogParameters, DoDialogResult, "RootDialog");
}));
}
_chkFunction.HIKStartDVRRecord();
logger.Info($"制冷片温度超过65度");
Thread.Sleep(100);
//给出提示
WD += "冰箱温度异常,已关闭冰箱制冷功能";
AlertColor = Brushes.Red;
FridgeTime = null;
stop();
}
else
{
if (FridgeTime == null)
{
FridgeTime = DateTime.Now;
//温度不在范围,但没有超过时间
if (IsLeave)
{
FridgeTime = null;
stop();
}
else
{
next();
}
}
else
{
if ((DateTime.Now - FridgeTime.Value).TotalMinutes > Convert.ToInt32(OutRangeTime))
{
logger.Info($"冰箱温度不在范围内,超过{OutRangeTime}分钟");
//停掉冰箱
await _portUtil.FridgeOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "0");
//给出提示
WD += "冰箱温度异常,已关闭冰箱制冷功能;";
AlertColor = Brushes.Red;
FridgeState = "1";
CommonClass.SaveAppSetting("FridgeState", "1");
//AlertMsg alertMsg = new AlertMsg
//{
// Message = $"冰箱温度异常,已关闭冰箱制冷功能!!!",
// Type = MsgType.ERROR
//};
//_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("warnMessage", "冰箱温度异常,已关闭冰箱制冷功能!!!");
DialogServiceExtensions.ShowDialogHost(_dialogService, "WarnDialog", dialogParameters, DoDialogResult, "RootDialog");
}));
FridgeTime = null;
stop();
}
else
{
//温度不在范围,但没有超过时间
if (IsLeave)
{
FridgeTime = null;
stop();
}
else
{
next();
}
}
}
}
}
else
{
if (IsLeave)
{
FridgeTime = null;
stop();
}
else
{
next();
}
}
}
else
{
logger.Info($"获取冰箱温度范围有误{TemperatureRange}");
//if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1)
//{
// float retTemp = await _portUtil.GetFridgeTemperature(2);
// Thread.Sleep(80);
// WD += $"{retTemp}℃";
//}
if (IsLeave)
{
FridgeTime = null;
stop();
}
else
{
next();
}
}
}
else
{
WD = $"恒温冷藏抽屉串口关闭或冰箱制冷异常制冷关闭!!!";
AlertColor = Brushes.Red;
FridgeTime = null;
stop();
}
}
catch (Exception ex)
{
logger.Info($"获取冰箱异常:{ex.Message}");
next();
}
});
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
@ -347,7 +862,10 @@ namespace DM_Weight.ViewModels
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
IsLeave = true;
navigationContext.NavigationService.Region.RegionManager.Regions.Remove(PrismManager.SettingViewRegionName);
_eventAggregator.GetEvent<FridgeEvent>().Unsubscribe(GetFridgeTemperature);
}
}
}

View File

@ -11,6 +11,7 @@ using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
@ -174,6 +175,22 @@ namespace DM_Weight.ViewModels
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
@ -188,7 +205,18 @@ namespace DM_Weight.ViewModels
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + " ; ";
}
}
int sumQuantity = channelStocks.Sum(cs => cs.AddQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请加药 {strNames} ,数量共计 {sumQuantity}个");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
@ -275,9 +303,94 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = it.AddQuantity,
Type = 1,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 1,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
AddQuantity = it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.ManuNo == it.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 3,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
YQuantity = 0,
ManuStock = it.AddQuantity,
TotalStock = it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = it.AddQuantity,
TotalStock = it.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
}
}
}
return true;
});

View File

@ -325,8 +325,8 @@ namespace DM_Weight.ViewModels
var sb = new StringBuilder();
sb.Append("select i.invoice_no as InvoiceNo, i.invoice_date as InvoiceDate, COUNT(i.id) as `Count`, SUM(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name as PharmacyName2 from in_out_invoice i");
sb.Append(" inner join ( select c.drug_id as drug_id from channel_stock c where c.machine_id = '" + (ConfigurationManager.AppSettings["machineId"] ?? "DM1") + "' group by c.drug_id ) di on di.drug_id = i.drug_id");
sb.Append(" left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id");
sb.Append(" left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id");
sb.Append(" left join pharmacy_info p1 on p1.pharmacy = i.in_pharmacy_id");
sb.Append(" left join pharmacy_info p2 on p2.pharmacy = i.out_pharmacy_id");
sb.Append(" where i.status=@Status ");
sb.Append(" and i.type!=@type ");
sb.Append(" and i.cancel_flag=@CancelFlag ");

View File

@ -211,8 +211,8 @@ namespace DM_Weight.ViewModels
var sb = new StringBuilder();
sb.Append("select i.invoice_no as InvoiceNo, i.invoice_date as InvoiceDate, COUNT(i.id) as `Count`, SUM(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name as PharmacyName2 from in_out_invoice i");
sb.Append(" inner join ( select c.drug_id as drug_id from channel_stock c where c.machine_id = '" + (ConfigurationManager.AppSettings["machineId"] ?? "DM1") + "' group by c.drug_id ) di on di.drug_id = i.drug_id");
sb.Append(" left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id");
sb.Append(" left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id");
sb.Append(" left join pharmacy_info p1 on p1.pharmacy = i.in_pharmacy_id");
sb.Append(" left join pharmacy_info p2 on p2.pharmacy = i.out_pharmacy_id");
sb.Append(" where i.status=@Status ");
sb.Append(" and i.type!=@type ");
sb.Append(" and i.cancel_flag=@CancelFlag ");

View File

@ -250,6 +250,22 @@ namespace DM_Weight.ViewModels
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
@ -266,7 +282,17 @@ namespace DM_Weight.ViewModels
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + " ; ";
}
}
int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
@ -337,9 +363,97 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = it.TakeQuantity,
Type = 2,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 2,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
OutQuantity = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.ManuNo == it.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 3,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
YQuantity = 0,
ManuStock = it.TakeQuantity,
TotalStock = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = it.TakeQuantity,
TotalStock = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
}
}
}
return true;
});

View File

@ -24,7 +24,6 @@ using System.Collections.ObjectModel;
using Microsoft.Win32;
using System.Xml;
using System.Diagnostics;
using DM_Weight.HIKVISION;
using System.Security.AccessControl;
namespace DM_Weight.ViewModels
@ -54,10 +53,17 @@ namespace DM_Weight.ViewModels
//get => loginMode == 2;
get => ReadAppSetting("loginMode") == "2";
}
public string LoginUserCheck
{
get => ReadAppSetting("loginUser");
}
private HkcChangeShifts listHkcChangeShifts=new HkcChangeShifts();
private FingerprintUtil _fingerprintUtil;
private PortUtil _portUtil;
private CHKFunction _chkFunction;
public Boolean LoginBtnEnable { get { return _loginBtnEnable; } set { SetProperty(ref _loginBtnEnable, value); } }
public string Password { get { return password; } set { SetProperty(ref password, value); } }
@ -76,20 +82,24 @@ namespace DM_Weight.ViewModels
get => _portUtil._canBusExsit && !_portUtil.canBusSerial.IsOpen;
}
private bool _fingerMsg= CHKFunction.HKUserId>=0;
private bool _fingerMsg = false;// CHKFunction.HKUserId>=0;
public bool FingerMsg
{
get => _fingerMsg;
set => SetProperty(ref _fingerMsg, value);
}
//录像机登录状态
private bool _hikMsg;
public bool HIKMsg
public bool FridgePortMsg
{
get=>_hikMsg;
set=>SetProperty(ref _hikMsg, value);
get => !_portUtil.fridgeSerial.IsOpen;
}
//录像机登录状态
//private bool _hikMsg;
//public bool HIKMsg
//{
// get=>_hikMsg;
// set=>SetProperty(ref _hikMsg, value);
//}
//public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, FingerprintUtil fingerprintUtil)
//{
@ -98,11 +108,11 @@ namespace DM_Weight.ViewModels
// _regionManager = regionManager;
// _eventAggregator = eventAggregator;
//}
public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, CHKFunction chcFunction)
public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil)
{
//_fingerprintUtil = fingerprintUtil;
_portUtil = portUtil;
_chkFunction= chcFunction;
//_chkFunction= chcFunction;
_regionManager = regionManager;
_eventAggregator = eventAggregator;
}
@ -180,6 +190,29 @@ _exitCommand ??= new DelegateCommand(Exit);
}
else
{
//1仅当班人、审核人可登录
//if (LoginUserCheck.Equals("1"))
//{
// //检查当前登录人是否是值班人 (审核人与发药人)
// listHkcChangeShifts = SqlSugarHelper.Db.Queryable<HkcChangeShifts>()
// .Where(cs => cs.State == "0").First();
// if (listHkcChangeShifts != null)
// {
// if(!listHkcChangeShifts.FromOperator.Equals(userList.UserName) && !listHkcChangeShifts.FromRviewer.Equals(userList.UserName))
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "仅值班人可登录,当前登录人非值班人",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// Username = "";
// Password = "";
// return;
// }
// }
//}
if (userList.PassWord == MD5.GetMD5Hash(Password))
{
@ -214,6 +247,7 @@ _exitCommand ??= new DelegateCommand(Exit);
void SetUser(UserList user)
{
logger.Info("SetUser");
// 单人登录模式
if (SingleLogin)
{
@ -221,6 +255,7 @@ _exitCommand ??= new DelegateCommand(Exit);
keys.Add("operator", user);
System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
logger.Info("跳转Home");
_regionManager.RequestNavigate("MainRegion", "HomeWindow", keys);
}));
}
@ -278,6 +313,28 @@ _exitCommand ??= new DelegateCommand(Exit);
// 第一个用户登录
else
{
//1仅当班人、审核人可登录
if (LoginUserCheck.Equals("1"))
{
if(listHkcChangeShifts!=null)
{
if(listHkcChangeShifts.FromOperator.Equals(user.UserName))
{
keys.Add("operator", user);
Operator = user;
RaisePropertyChanged("Operator");
}
else
{
keys.Add("reviewer", user);
Reviewer = user;
RaisePropertyChanged("Reviewer");
}
Username = string.Empty;
Password = string.Empty;
return;
}
}
if (firstLogin.Equals("operator"))
{
keys.Add("operator", user);
@ -298,7 +355,6 @@ _exitCommand ??= new DelegateCommand(Exit);
void Exit()
{
_chkFunction.HIKLoginOut();
Process.GetCurrentProcess().Kill();
Environment.Exit(0);
}
@ -310,6 +366,7 @@ _exitCommand ??= new DelegateCommand(Exit);
{
FingerMsg = !msg.Result;
}
logger.Info($"LoginBtnEnable:{LoginBtnEnable}");
if (LoginBtnEnable)
{
if (msg.Message.Equals("LOGIN"))
@ -343,6 +400,29 @@ _exitCommand ??= new DelegateCommand(Exit);
}
else
{
//1仅当班人、审核人可登录
//if (LoginUserCheck.Equals("1"))
//{
//检查当前登录人是否是值班人 (审核人与发药人)
//listHkcChangeShifts = SqlSugarHelper.Db.Queryable<HkcChangeShifts>()
// .Where(cs => cs.State == "0").First();
//if (listHkcChangeShifts != null)
//{
// if (!listHkcChangeShifts.FromOperator.Equals(userList.UserName) && !listHkcChangeShifts.FromRviewer.Equals(userList.UserName))
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "仅值班人可登录,当前登录人非值班人",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// Username = "";
// Password = "";
// return;
// }
//}
//}
SetUser(userList);
}
}

View File

@ -15,7 +15,9 @@ using DM_Weight.util;
using DM_Weight.Finger;
using DM_Weight.Views;
using Unity;
using DM_Weight.HIKVISION;
using log4net.Repository.Hierarchy;
using log4net;
using System.Windows;
namespace DM_Weight.ViewModels
{
@ -30,7 +32,7 @@ namespace DM_Weight.ViewModels
//private PortUtil _portUtil;
private ScreenUtil _screenUtil;
//private ScreenUtil _screenUtil;
public SolidColorBrush Background
{
@ -63,17 +65,16 @@ namespace DM_Weight.ViewModels
private FingerprintUtil _fingerprintUtil;
IRegionManager _regionManager;
IUnityContainer _container;
private CHKFunction _cHKFunction;
public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil, CHKFunction cHKFunction)
private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil)
{
//_portUtil = portUtil;
this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent<SnackbarEvent>().Subscribe(doMyPrismEvent2);
_screenUtil = screenUtil;
_fingerprintUtil = fingerprintUtil;
_regionManager = regionManager;
_container = container;
_cHKFunction = cHKFunction;
System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
{
@ -81,9 +82,12 @@ namespace DM_Weight.ViewModels
_regionManager.RequestNavigate("MainRegion", "LoginWindow");
}));
}
void doMyPrismEvent2(AlertMsg msg)
{
Application.Current.Dispatcher.BeginInvoke(() =>
{
switch (msg.Type)
{
@ -97,7 +101,9 @@ namespace DM_Weight.ViewModels
this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
break;
}
SnackbarMessageQueue.Enqueue(msg.Message);
});
}
}

View File

@ -399,8 +399,8 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = orderTakeQuantity,
Type = 2,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
}
//更新处方状态

View File

@ -311,7 +311,7 @@ namespace DM_Weight.ViewModels
//}
List<OrderInfo> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
.WhereIF(OrderDate != null, oi => oi.OrderDate.ToString("yyyy-MM-dd") == OrderDate)
.WhereIF(!(OrderDepartment.DeptName.Equals("全部")), oi => oi.DeptName == OrderDepartment.DeptName)
//.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PatientId"), oi => oi.PatientId == SearchValue)

View File

@ -245,6 +245,22 @@ namespace DM_Weight.ViewModels
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
@ -261,11 +277,24 @@ namespace DM_Weight.ViewModels
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
//_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
IEnumerable<string> strDrugName = singleChannels.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name;
}
}
int sumQuantity = singleChannels.Sum(cs => cs.ReturnQuantity);
_portUtil.SpeakAsync($"正在打开{DrawerNo}号抽屉,请加药{strNames},数量共计{sumQuantity}个");
// 发送还药数量
singleChannels.ForEach(it =>
{
@ -297,7 +326,7 @@ namespace DM_Weight.ViewModels
{
SqlSugarHelper.Db.Updateable(new OrderInfo()
{
DmStatus = 2,
DmStatus = 0,
OrderNo = OrderInfo.OrderNo
}).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
for (int i = 0; i < record.Count; i++)
@ -334,9 +363,94 @@ namespace DM_Weight.ViewModels
//Quantity = it.TakeQuantity,
Quantity = it.ReturnQuantity,
Type = 31,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 1,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
AddQuantity = it.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.ManuNo == it.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.ReturnQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 3,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
YQuantity = 0,
ManuStock = it.ReturnQuantity,
TotalStock = it.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.ReturnQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = it.ReturnQuantity,
TotalStock = it.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
}
}
}
return true;
});

View File

@ -0,0 +1,636 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.select;
using DM_Weight.util;
using log4net;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class OrderTakeAllDrugDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
public string Title => "处方取药";
public event Action<IDialogResult> RequestClose;
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public OrderTakeAllDrugDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "OrderTakeDrugWindow")
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
}
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位取药数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
private OrderInfo? _orderInfo;
public OrderInfo? OrderInfo
{
get => _orderInfo;
set => SetProperty(ref _orderInfo, value);
}
private List<OrderDetail> orderDetails { get; set; }
private List<OrderInfo> orderInfos { get; set; }
private List<ChannelStock> _channelStocks;
public List<ChannelStock> ChannelStocks
{
get => _channelStocks;
set => SetProperty(ref _channelStocks, value);
}
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
string orderDate;
OrderTakeSelect selectedItem;
string? searchValue;
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
orderDate = parameters.GetValue<string>("OrderDate");
selectedItem = parameters.GetValue<OrderTakeSelect>("SelectedItem");
searchValue = parameters.GetValue<string>("SearchValue");
//OrderInfo = o;
RequestData();
}
public async void RequestData()
{
try
{
orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
.InnerJoin<OrderInfo>((od, oi) => oi.DmStatus == 0 && oi.HisDispFlag == 0 && oi.CancelFlag == 0 && od.OrderNo == oi.OrderNo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (od, oi, t) => od.DrugId == t.DrugId)
.WhereIF(orderDate != null, (od, oi) => oi.OrderDate.ToString("yyyy-MM-dd") == orderDate)
.WhereIF(!String.IsNullOrEmpty(searchValue) && selectedItem.Code.Equals("OrderNo"), (od, oi) => oi.OrderNo == searchValue)
.WhereIF(!String.IsNullOrEmpty(searchValue) && selectedItem.Code.Equals("PatientId"), (od, oi) => oi.PatientId == searchValue)
.WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), (od, oi) => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
.Includes<DrugInfo>(od => od.DrugInfo)
.ToList();
if (orderDetails == null || orderDetails.Count <= 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有处方数据",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
IEnumerable<IGrouping<string, OrderDetail>> groupOrderDetails = orderDetails.GroupBy(it => it.DrugId);
List<ChannelStock> channelStocks = new List<ChannelStock>();
List<string> msg = new List<string>();
foreach (var orderGroup in groupOrderDetails)
{
int quantity = orderGroup.Sum(it => it.Quantity);
foreach (var orderDetail in orderGroup)
{
List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetEffDate), cs => cs.EffDate.Equals(orderDetail.SetEffDate))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetManuNo), cs => cs.ManuNo.Equals(orderDetail.SetManuNo))
.Where(cs => cs.DrugId == orderDetail.DrugId)
.OrderBy(cs => cs.EffDate)
.OrderBy(cs => cs.DrawerNo)
.ToList();
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = quantity;
// 说明数量足够
if (total >= TakeQ)
{
for (int j = 0; TakeQ > 0; j++)
{
ChannelStock stock = HasQChannels[j];
if (TakeQ > stock.Quantity)
{
stock.TakeQuantity = stock.Quantity;
channelStocks.Add(stock);
TakeQ -= stock.Quantity;
orderDetail.DrawerNo += stock.DrawerNo + ",";
orderDetail.ColNo += stock.ColNo + ",";
orderDetail.SetManuNo += stock.ManuNo + ",";
orderDetail.SetEffDate += stock.EffDate + ",";
}
else
{
stock.TakeQuantity = TakeQ;
channelStocks.Add(stock);
TakeQ = 0;
orderDetail.DrawerNo += stock.DrawerNo + ",";
orderDetail.ColNo += stock.ColNo + ",";
orderDetail.SetManuNo += stock.ManuNo + ",";
orderDetail.SetEffDate += stock.EffDate + ",";
}
}
break;
}
else
{
msg.Add($"药品【{orderDetail.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
}
}
}
if (msg.Count > 0)
{
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//MessageBox.Show(string.Join("\n", msg));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("msgInfo", msg);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
}
else
{
channelStocks.Sort((a, b) =>
{
if ((a.DrawerNo - b.DrawerNo) == 0)
{
return a.ColNo - b.ColNo;
}
return a.DrawerNo - b.DrawerNo;
});
ChannelStocks = channelStocks;
}
}
catch (Exception ex)
{
logger.Info($"处方取药异常:{ex.Message}");
}
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(async () =>
{
if (Status == 0)
{
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
});
}
private void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + ";";
}
}
int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
singleChannels.ForEach(it =>
{
try
{
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"打开抽屉异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
_portUtil.WindowName = "OrderTakeDrugWindow";
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
{
get => new DelegateCommand(() =>
{
if (!_isFinishClick)
{
_isFinishClick = true;
if (orderDetails == null || orderDetails.Count <= 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有处方数据",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
IEnumerable<IGrouping<string, OrderDetail>> enumerableOrderDetails = orderDetails.GroupBy(it => it.OrderNo);
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < ChannelStocks.Count; i++)
{
ChannelStock it = ChannelStocks[i];
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = it.Quantity - it.TakeQuantity,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
}
foreach (var orderGroup in enumerableOrderDetails)
{
int iQuantity = 0;
foreach (var orderDetail in orderGroup)
{
OrderInfo orderInfo = SqlSugarHelper.Db.Queryable<OrderInfo>().Where(oi => oi.OrderNo == orderDetail.OrderNo).First();
SqlSugarHelper.Db.Updateable(new OrderInfo()
{
DmStatus = 1,
OrderNo = orderDetail.OrderNo
}).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
SqlSugarHelper.Db.Insertable(new OrderFinish()
{
OrderNo = orderDetail.OrderNo,
PatientId = orderDetail.PatientId,
Pharmacy = orderInfo.Pharmacy,
State = 1,
Operator = HomeWindowViewModel.Operator?.Nickname,
});
//查询药品对应库存表的库位及批次、效期信息
List<ChannelStock> stockList= ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId).OrderBy(cs=>cs.EffDate).ToList();
int iOrderDetailQuantity = -1;
string manuNo = string.Empty;
string effDate = string.Empty;
int drawerNo = 0;
int colNo = 0;
if (stockList.Count> 1)
{
iOrderDetailQuantity = orderDetail.Quantity;
for (int i = 0; i < stockList.Count; i++)
{
if (iOrderDetailQuantity>0&&stockList[i].Quantity- iOrderDetailQuantity > 0)
{
stockList[i].Quantity = stockList[i].Quantity - iOrderDetailQuantity;
break;
}
else
{
iOrderDetailQuantity = iOrderDetailQuantity - stockList[i].Quantity;
stockList[i].Quantity = 0;
if(iOrderDetailQuantity==0)
{
manuNo = stockList[i].ManuNo;
effDate = stockList[i].EffDate;
drawerNo = stockList[i].DrawerNo;
colNo= stockList[i].ColNo;
break;
}
}
}
}
ChannelStock cs = null;
if (iOrderDetailQuantity==0)
{
cs = ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId && cs.ManuNo == manuNo&&cs.EffDate==effDate&&cs.DrawerNo==drawerNo&&cs.ColNo==colNo).OrderBy(cs => cs.EffDate).FirstOrDefault();
}
else
{
cs = ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId && cs.Quantity > 0).OrderBy(cs => cs.EffDate).FirstOrDefault();
}
if (cs != null)
{
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
DrawerNo = cs.DrawerNo,
ColNo = cs.ColNo,
DrugId = cs.DrugId,
ManuNo = cs.ManuNo,
EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = orderDetail.Quantity,
Type = 2,
InvoiceId = orderDetail.OrderNo
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
}
//保存账册
int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = orderDetail.DrugId,
Type = 2,
Department = orderInfo.DeptName,
OrderNo = orderDetail.OrderNo,
ManuNo = cs.ManuNo,
EffDate = cs.EffDate,
OutQuantity = orderDetail.Quantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now,
InvoiceNo = orderDetail.OrderNo
}).ExecuteCommand();
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(ConfigurationManager.AppSettings["machineId"].ToString()))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == orderDetail.DrugId)
.Where(ab => ab.ManuNo == cs.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - orderDetail.Quantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = orderDetail.DrugId,
Type = 3,
ManuNo = cs.ManuNo,
EffDate = cs.EffDate,
YQuantity = 0,
ManuStock = orderDetail.Quantity,
TotalStock = orderDetail.Quantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{orderDetail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
}
}
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(ConfigurationManager.AppSettings["machineId"].ToString()))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == orderDetail.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - orderDetail.Quantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = orderDetail.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = orderDetail.Quantity,
TotalStock = orderDetail.Quantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{orderDetail.DrugId}-{orderDetail.Quantity}");
}
}
}
}
return true;
});
if (f.Data)
{
// 更新屏显库存
List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType == 5);
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
{
singleChannels.ForEach(it =>
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
});
}
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
else
{
_isFinishClick = false;
AlertMsg alertMsg = new AlertMsg
{
Message = "正在操作,请稍后",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
if (Status != 0)
{
_portUtil.ResetData();
Status = 0;
}
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public bool KeepAlive => false;
}
}

View File

@ -58,8 +58,6 @@ namespace DM_Weight.ViewModels
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
@ -166,12 +164,11 @@ namespace DM_Weight.ViewModels
OrderInfo = o;
RequestData();
}
public async void RequestData()
{
orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
.Includes<DrugInfo>(od => od.DrugInfo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
.Where(od => od.OrderNo == OrderInfo.OrderNo)
.ToList();
@ -185,7 +182,7 @@ namespace DM_Weight.ViewModels
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetEffDate), cs => cs.EffDate.Equals(orderDetail.SetEffDate))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetManuNo), cs => cs.ManuNo.Equals(orderDetail.SetManuNo))
.Where(cs => cs.DrugId == orderDetail.DrugId)
@ -249,6 +246,24 @@ namespace DM_Weight.ViewModels
{
if (Status == 0)
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
@ -265,7 +280,19 @@ namespace DM_Weight.ViewModels
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
string strNames = string.Empty;
foreach (string name in strDrugName)
{
if (!strNames.Contains(name))
{
strNames += name + ";";
}
}
int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
_portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
@ -358,16 +385,103 @@ namespace DM_Weight.ViewModels
OperationTime = DateTime.Now,
Quantity = it.TakeQuantity,
Type = 2,
InvoiceId = InvoiceId,
StockQuantity = nowChannels.Sum(it => it.Quantity)
InvoiceId = InvoiceId
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 2,
Department = OrderInfo.DeptName,
OrderNo = OrderInfo.OrderNo,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
OutQuantity = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now,
InvoiceNo = OrderInfo.OrderNo
}).ExecuteCommand();
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.ManuNo == it.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 3,
ManuNo = it.ManuNo,
EffDate = it.EffDate,
YQuantity = 0,
ManuStock = it.TakeQuantity,
TotalStock = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
}
}
//修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(it.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == it.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = it.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = it.TakeQuantity,
TotalStock = it.TakeQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
}
}
}
return true;
});
if (f.Data)
{
// 更新屏显库存
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType == 5);
if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
{
singleChannels.ForEach(it =>

View File

@ -0,0 +1,295 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.select;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class OrderTakeDrugNewWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private int _pageNum = 1;
public int PageNum
{
get => _pageNum;
set
{
SetProperty(ref _pageNum, value);
RequestData();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 8;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
private int _totalCount = 0;
public int TotalCount
{
get => _totalCount;
set
{
SetProperty(ref _totalCount, value);
}
}
IDialogService _dialogService;
IEventAggregator _eventAggregator;
private DelegateCommand _rowSelected;
public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
public OrderTakeDrugNewWindowViewModel(IDialogService DialogService, IEventAggregator eventAggregator)
{
_dialogService = DialogService;
_eventAggregator = eventAggregator;
}
public static List<OrderTakeSelect> StaticOrderTakeSelects = new()
{
new OrderTakeSelect
{
Code = "OrderNo",
Name = "处方号"
},
new OrderTakeSelect
{
Code = "PatientId",
Name = "患者编号"
}
};
private List<OrderTakeSelect> _orderTakeSelects = StaticOrderTakeSelects;
public List<OrderTakeSelect> OrderTakeSelects
{
get { return _orderTakeSelects; }
set
{
SetProperty(ref _orderTakeSelects, value);
}
}
private OrderTakeSelect _selectedItem = StaticOrderTakeSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
private OrderInfo? _selectedOrder;
public OrderInfo? SelectedOrder
{
get { return _selectedOrder; }
set
{
SetProperty(ref _selectedOrder, value);
//OpenOrderDialog();
}
}
private string _orderDate = DateTime.Now.ToString("yyyy-MM-dd");
/// <summary>
/// 查询条件 处方日期
/// </summary>
public string OrderDate
{
get { return _orderDate; }
set
{
if (!String.IsNullOrEmpty(value))
{
SetProperty(ref _orderDate, DateTime.Parse(value).ToString("yyyy-MM-dd"));
}
else
{
SetProperty(ref _orderDate, value);
}
RequestData();
}
}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
private List<OrderInfo> _orderInfos = new();
public List<OrderInfo> OrderInfos { get { return _orderInfos; } set { SetProperty(ref _orderInfos, value); } }
public bool KeepAlive => false;
public async void OpenOrderDialog()
{
if (SelectedOrder != null && SelectedOrder.DmStatus == 0 && SelectedOrder.CancelFlag == 0 && SelectedOrder.HisDispFlag == 0)
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("orderInfo", SelectedOrder);
DialogServiceExtensions.ShowDialogHost(_dialogService, "OrderTakeNewDialog", dialogParameters, DoDialogResult, "RootDialog");
}
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
SelectedOrder = null;
RequestData();
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
public DelegateCommand QueryCommand
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
//取药按钮事件
public DelegateCommand TakeDrug
{
get => new DelegateCommand(() => {
if(OrderInfos is null|| OrderInfos.Count<=0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有处方数据",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("OrderDate", OrderDate);
dialogParameters.Add("SelectedItem", SelectedItem);
dialogParameters.Add("SearchValue", SearchValue);
DialogServiceExtensions.ShowDialogHost(_dialogService, "OrderTakeAllDrugDialog", dialogParameters, DoDialogResult, "RootDialog");
});
}
public void RequestData()
{
OrderInfos.Clear();
int totalCount = 0;
//string SearchValue = null;
//if (SearchValue != null)
//{
// strSearchValue = SearchValue.Trim().Replace("\r", "");
//}
List<OrderInfo> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
.WhereIF(OrderDate != null, oi => oi.OrderDate.ToString("yyyy-MM-dd") == OrderDate)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("OrderNo"), oi => oi.OrderNo == SearchValue)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PatientId"), oi => oi.PatientId == SearchValue)
.WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), oi => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
.Where(oi => oi.DmStatus == 0)
.Where(oi => oi.HisDispFlag == 0)
.Where(oi => oi.CancelFlag == 0)
.Where(oi => oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
.GroupBy(oi => oi.OrderDate)
.Select(oi => oi)
.ToPageList(PageNum, PageSize, ref totalCount);
//.ToList();
OrderInfos = queryData;
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
RequestData();
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.EventType == EventType.CODESCAN)
{
SearchValue = msg.Code;
}
}
}
}

View File

@ -232,6 +232,7 @@ namespace DM_Weight.ViewModels
.Where(oi => oi.DmStatus == 0)
.Where(oi => oi.HisDispFlag == 0)
.Where(oi => oi.CancelFlag == 0)
.Where(oi=>oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
.GroupBy(oi => oi.OrderDate)
.Select(oi => oi)
.ToPageList(PageNum, PageSize, ref totalCount);

View File

@ -0,0 +1,185 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class OrderTakeNewDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
public string Title => "处方取药";
public event Action<IDialogResult> RequestClose;
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
IDialogService _dialogService;
public OrderTakeNewDialogViewModel(IDialogService DialogService)
{
_dialogService = DialogService;
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
private OrderInfo? _orderInfo;
public OrderInfo? OrderInfo
{
get => _orderInfo;
set => SetProperty(ref _orderInfo, value);
}
private List<OrderDetail> orderDetails { get; set; }
private List<ChannelStock> _channelStocks;
public List<ChannelStock> ChannelStocks
{
get => _channelStocks;
set => SetProperty(ref _channelStocks, value);
}
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
OrderInfo o = parameters.GetValue<OrderInfo>("orderInfo");
OrderInfo = o;
RequestData();
}
public async void RequestData()
{
orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
.Includes<DrugInfo>(od => od.DrugInfo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
.Where(od => od.OrderNo == OrderInfo.OrderNo)
.ToList();
List<ChannelStock> channelStocks = new List<ChannelStock>();
List<string> msg = new List<string>();
for (int i = 0; i < orderDetails.Count; i++)
{
OrderDetail orderDetail = orderDetails[i];
List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetEffDate), cs => cs.EffDate.Equals(orderDetail.SetEffDate))
.WhereIF(!string.IsNullOrEmpty(orderDetail.SetManuNo), cs => cs.ManuNo.Equals(orderDetail.SetManuNo))
.Where(cs => cs.DrugId == orderDetail.DrugId)
.OrderBy(cs => cs.EffDate)
.OrderBy(cs => cs.DrawerNo)
.ToList();
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = orderDetail.Quantity;
// 说明数量足够
if (total >= TakeQ)
{
for (int j = 0; TakeQ > 0; j++)
{
ChannelStock stock = HasQChannels[j];
if (TakeQ > stock.Quantity)
{
stock.TakeQuantity = stock.Quantity;
channelStocks.Add(stock);
TakeQ -= stock.Quantity;
}
else
{
stock.TakeQuantity = TakeQ;
channelStocks.Add(stock);
TakeQ = 0;
}
}
}
else
{
msg.Add($"药品【{orderDetail.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
}
}
if (msg.Count > 0)
{
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//MessageBox.Show(string.Join("\n", msg));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("msgInfo", msg);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
}
else
{
channelStocks.Sort((a, b) =>
{
if ((a.DrawerNo - b.DrawerNo) == 0)
{
return a.ColNo - b.ColNo;
}
return a.DrawerNo - b.DrawerNo;
});
ChannelStocks = channelStocks;
}
}
private bool _isFinishClick = false;
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
if (Status != 0)
{
Status = 0;
}
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
public bool KeepAlive => false;
}
}

View File

@ -0,0 +1,223 @@
using DM_Weight.Common;
using DM_Weight.Models;
using DM_Weight.Port;
using DM_Weight.util;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Unity;
namespace DM_Weight.ViewModels
{
public class ReportDrugNameDialogViewModel : BindableBase, IRegionMemberLifetime, IDialogAware
{
private string? _reportDrugName;
public string? ReportDrugName
{
get => _reportDrugName;
set => SetProperty(ref _reportDrugName, value);
}
private DrugInfo? _leftDrug;
public DrugInfo? LeftDrug
{
get => _leftDrug;
set => SetProperty(ref _leftDrug, value);
}
private ObservableCollection<DrugInfo> _rightDrugNameList = new ObservableCollection<DrugInfo>();
public ObservableCollection<DrugInfo> RightDrugNameList
{
get => _rightDrugNameList;
set => SetProperty(ref _rightDrugNameList, value);
}
private DrugInfo? _rightDrugName;
public DrugInfo? RightDrugName
{
get => _rightDrugName;
set => SetProperty(ref _rightDrugName, value);
}
public static ReportDrugNameDialogViewModel vm;
public static ObservableCollection<DrugInfo> defaultAll = new ObservableCollection<DrugInfo>();
private ObservableCollection<DrugInfo> _allPremissions = defaultAll;
public event Action<IDialogResult> RequestClose;
public ReportDrugNameDialogViewModel()
{
vm = this;
}
public ObservableCollection<DrugInfo> AllPremissions
{
get => _allPremissions;
set => SetProperty(ref _allPremissions, value);
}
public bool KeepAlive => false;
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
void RequestData()
{
AllPremissions = new ObservableCollection<DrugInfo>();
//string str = "SELECT d.drug_id,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
//if (ConfigurationManager.AppSettings["DrugNames"] != null)
//{
// str += " where d.drug_id not in (" + CommonClass.ReadAppSetting("DrugNames") + ")";
//}
//List<DrugInfo> DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugId).ToList();
//AllPremissions.AddRange(DrugInfos);
string strRight = "SELECT d.drug_id,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
if (ConfigurationManager.AppSettings["DrugNames"] != null)
{
strRight += " where d.drug_id in (" + CommonClass.ReadAppSetting("DrugNames")+ ")";
}
List<DrugInfo> DrugInfosRight = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(strRight).OrderBy(di => di.DrugId).ToList();
RightDrugNameList.AddRange(DrugInfosRight);
}
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
//查询报表中的药品名称
RequestData();
GetAllDrugInfos();
}
public DelegateCommand<DrugInfo> RightSelectedItemChangedCommand
{
get => new DelegateCommand<DrugInfo>((DrugInfo _selected) =>
{
RightDrugName = _selected;
});
}
public DelegateCommand ToRight => new DelegateCommand(() =>
{
if (LeftDrug != null)
{
RightDrugNameList.Insert(0, LeftDrug);
AllPremissions.RemoveAt(AllPremissions.ToList().FindIndex(it => it.DrugId == LeftDrug.DrugId));
}
});
public DelegateCommand ToLeft => new DelegateCommand(() =>
{
if (RightDrugName != null)
{
AllPremissions.Insert(0, RightDrugName);
RightDrugNameList.RemoveAt(RightDrugNameList.ToList().FindIndex(it => it.DrugId == RightDrugName.DrugId));
}
});
public DelegateCommand<DrugInfo> LeftSelectedItemChangedCommand
{
get => new DelegateCommand<DrugInfo>((DrugInfo _selected) =>
{
LeftDrug = _selected;
});
}
//保存
public DelegateCommand AddRole
{
get=>new DelegateCommand(()=>
{
if(RightDrugNameList!=null&& RightDrugNameList.Count>0)
{
string strDrugInfo = string.Empty;
for (int i = 0; i < RightDrugNameList.Count; i++)
{
strDrugInfo +="'"+ RightDrugNameList[i].DrugId+"',";
}
if (!string.IsNullOrEmpty(strDrugInfo))
{
strDrugInfo = strDrugInfo.Substring(0, strDrugInfo.Length - 1);
CommonClass.SaveAppSetting("DrugNames", strDrugInfo);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
}
});
}
public string Title => "";
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
private ObservableCollection<DrugInfo>? _drugInfos= defaultAll;
public ObservableCollection <DrugInfo>? DrugInfos
{
get => _drugInfos;
set => SetProperty(ref _drugInfos, value);
}
private DrugInfo? _drugInfo;
public DrugInfo? DrugInfo
{
get => _drugInfo;
set
{
SetProperty(ref _drugInfo, value);
if (_drugInfo != null)
{
AllPremissions.Add(_drugInfo);// = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
}
}
}
private void GetAllDrugInfos()
{
//var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
//DrugInfos = list;
string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
var DrugInfoslist = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
DrugInfos.AddRange(DrugInfoslist);
//DrugInfos_PY = list;
}
public void UpdateComboBoxItems(string text)
{
string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
if (string.IsNullOrEmpty(text))
{
var DrugInfosLst = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
DrugInfos.AddRange(DrugInfosLst);
return;
}
if (DrugInfos != null)
{
DrugInfos.Clear();
}
var DrugInfosList = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
DrugInfos.AddRange(DrugInfosList);
}
}
}

View File

@ -148,6 +148,8 @@ namespace DM_Weight.ViewModels
}
}
string drawerAuthority = string.Empty;
string[] drawerAuthorityList;
public bool CanCloseDialog()
{
@ -191,18 +193,51 @@ namespace DM_Weight.ViewModels
{
get => new DelegateCommand(() =>
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
// if (bDrawer)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
bool hasAuthority = Array.Exists(drawerAuthorityList, element => element == ChannelStock.DrawerNo.ToString());
if (!hasAuthority)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"当前用户没有打开{ChannelStock.DrawerNo}号抽屉的权限!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
if (ChannelStock != null)
{
Status = 1;
_portUtil.SpeakAsync("正在打开" + ChannelStock.DrawerNo + "号抽屉");
//_portUtil.SpeakAsync("正在打开" + ChannelStock.DrawerNo + "号抽屉");
_portUtil.SpeakAsync($"正在打开 {ChannelStock.DrawerNo} 号抽屉,请加药 {MachineRecord.DrugInfo.DrugName} ,数量共计 {ReturnQuantity}个");
_portUtil.WindowName = WindowName;
_portUtil.BoardType = ChannelStock.BoardType;
_portUtil.ColNos = new int[] { ChannelStock.ColNo };
_portUtil.DrawerNo = ChannelStock.DrawerNo;
_portUtil.Start();
} else
}
else
{
AlertMsg alertMsg = new AlertMsg
{
@ -264,9 +299,96 @@ namespace DM_Weight.ViewModels
Quantity = ReturnQuantity,
Type = 31,
InvoiceId = InvoiceId,
GetId = MachineRecord.Id,
StockQuantity = nowChannels.Sum(it => it.Quantity)
GetId = MachineRecord.Id
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = ChannelStock.DrugId,
Type = 1,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = ChannelStock.ManuNo,
EffDate = ChannelStock.EffDate,
AddQuantity = ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(ChannelStock.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == ChannelStock.DrugId)
.Where(ab => ab.ManuNo == ChannelStock.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + ChannelStock.ReturnQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = ChannelStock.DrugId,
Type = 3,
ManuNo = ChannelStock.ManuNo,
EffDate = ChannelStock.EffDate,
YQuantity = 0,
ManuStock = ChannelStock.ReturnQuantity,
TotalStock = ChannelStock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{ChannelStock.DrugId}-{ChannelStock.ManuNo}-{ChannelStock.EffDate}-{ChannelStock.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(ChannelStock.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == ChannelStock.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + ChannelStock.ReturnQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = ChannelStock.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = ChannelStock.ReturnQuantity,
TotalStock = ChannelStock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{ChannelStock.DrugId}-{ChannelStock.AddQuantity}");
}
}
return true;
});
if (f.Data)

View File

@ -216,7 +216,7 @@ namespace DM_Weight.ViewModels
int totalCount = 0;
List<OrderInfo> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
.InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
.WhereIF(OrderDate != null, oi => oi.OrderDate.ToString("yyyy-MM-dd") == OrderDate)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("OrderNo"), oi => oi.OrderNo == SearchValue)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PatientId"), oi => oi.PatientId == SearchValue)

View File

@ -184,7 +184,7 @@ namespace DM_Weight.ViewModels
.Includes<UserList>(mr => mr.User)
.Where(mr => mr.Type == 2)
.Where(mr => mr.Status < 2)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
//.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))

View File

@ -0,0 +1,310 @@
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Report;
using DM_Weight.util;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class ReturnEmptyDestoryWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
private List<ChannelStock>? _channelStocks;
public List<ChannelStock>? Channels
{
get { return _channelStocks; }
set { SetProperty(ref _channelStocks, value); }
}
private ChannelStock _channelStock;
public ChannelStock Channel
{
get { return _channelStock; }
set { SetProperty(ref _channelStock, value); }
}
private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
public DateTime? StartDate
{
get => _startDate;
set
{
if (value != null)
{
SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0));
}
else
{
SetProperty(ref _startDate, value);
}
RequestData();
}
}
private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
public DateTime? EndDate
{
get => _endDate;
set
{
if (value != null)
{
TimeSpan ershisi = new TimeSpan(23, 59, 59);
SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59));
}
else
{
SetProperty(ref _endDate, value);
}
RequestData();
}
}
IDialogService _dialogService;
IEventAggregator _eventAggregator;
public ReturnEmptyDestoryWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator)
{
_dialogService = dialogService;
_eventAggregator = eventAggregator;
}
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (Channel != null && Channel.DrugId == null)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("DrawerNo", Channel.DrawerNo);
DialogServiceExtensions.ShowDialogHost(_dialogService, "BindingChannelDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else if (Channel != null && Channel.CanReturnQuantity > 0)
{
Channels = Channels.Select(x =>
{
if (x.Id == Channel.Id)
{
x.IsSelected = !x.IsSelected;
}
return x;
}).ToList();
//DialogParameters dialogParameters = new DialogParameters();
//dialogParameters.Add("channel", Channel);
//DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
});
}
private List<ChannelStock> csList = new List<ChannelStock>();
//销毁
public DelegateCommand DestoryCommand
{
get => new DelegateCommand(() =>
{
if (Channels != null && Channels.Count > 0)
{
csList = Channels.FindAll(it => it.IsSelected && it.Quantity > 0).ToList();
if (csList != null && csList.Count > 0)
{
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//DialogParameters dialogParameters = new DialogParameters();
//List<string> msg = new List<string>();
//msg.Add("确认");
//msg.Add("确认要销毁吗?");
//dialogParameters.Add("msgInfo", msg);
//DialogServiceExtensions.ShowDialogHost(_dialogService, "ConfirmMessageDialog", dialogParameters, DestoryDialogResult, "RootDialog");
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < csList.Count; i++)
{
ChannelStock channelStock = csList[i];
channelStock.Quantity = 0;
SqlSugarHelper.Db.Updateable(channelStock).ExecuteCommand();
MachineRecord machines = SqlSugarHelper.Db.Queryable<MachineRecord>()
//.InnerJoin<ChannelStock>((mr, cs) => mr.DrugId == cs.DrugId)
//.Where(mr => mr.DrugId.Contains(csList.Select(it => it.DrugId).ToList()) && mr.Type = 32)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(mr => mr.DrugId == channelStock.DrugId)
.Where(mr => mr.Type == 32)
.First();
SqlSugarHelper.Db.Updateable(machines).ReSetValue(mr =>
{
mr.IsDestroy = 1;
mr.TakeUser = HomeWindowViewModel.Operator?.Id.ToString();
mr.DestoryReviewerUser = HomeWindowViewModel.Reviewer?.Id.ToString();
}).ExecuteCommand();
}
return true;
});
if (f.Data)
{
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = "销毁完成",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "销毁失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "未勾选要销毁的数据或勾选的数据库存为0",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有要操作销毁的数据",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
//空瓶销毁(根据还的空瓶)
public DelegateCommand DestoryEmptyCommand { get => new DelegateCommand(DestoryEmptyAction); }
private void DestoryEmptyAction()
{
//List<ChannelStock> records = Channels.FindAll(it => it.IsSelected).ToList();
//if (records.Count > 0)
if (Channel != null && Channel.DrugId != null && Channel.Quantity > 0)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("channel", Channel);
DialogServiceExtensions.ShowDialogHost(_dialogService, "DestoryEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请选择有库存的数据",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
RequestData();
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
//导出回收销毁记录
public DelegateCommand DownloadRecordCommand
{
get => new DelegateCommand(() => {
GridReportUtil.PrintEmptyDestoryReport(StartDate, EndDate);
});
}
public bool KeepAlive => false;
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
//接收导航传过来的参数
public void OnNavigatedTo(NavigationContext navigationContext)
{
//查询表格数据
RequestData();
}
void RequestData()
{
Channels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.LeftJoin<DrugInfo>((cs, di) => cs.DrugId == di.DrugId.ToString())
.Where((cs) => cs.DrawerType != 1).Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"])
.Where(cs=>cs.Quantity>0)
.Select((cs, di) => new ChannelStock
{
CanReturnQuantity = SqlFunc.Subqueryable<MachineRecord>().Where(mr => mr.DrugId == cs.DrugId && mr.MachineId == ConfigurationManager.AppSettings["machineId"]).Where(mr => mr.Type == 2).Where(mr => mr.Status != 2).Select(mr => SqlFunc.IsNull(SqlFunc.AggregateSumNoNull(mr.Quantity - mr.ReturnQuantity1 - mr.ReturnQuantity2), 0)),
DrugInfo = new DrugInfo
{
DrugId = di.DrugId,
DrugName = di.DrugName,
DrugSpec = di.DrugSpec,
Manufactory = di.Manufactory,
PackUnit = di.PackUnit,
},
Quantity = cs.Quantity
}, true)
.OrderBy(cs => cs.DrawerNo)
.OrderBy(cs => cs.ColNo)
.ToList()
;
_ = Channels.Count;
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}

View File

@ -132,7 +132,16 @@ namespace DM_Weight.ViewModels
SetProperty(ref _machineRecords, value);
}
}
private MachineRecord _machineRecord = new();
public MachineRecord _MachineRecord
{
get => _machineRecord;
set
{
SetProperty(ref _machineRecord, value);
}
}
private ChannelStock _channelStock;
public ChannelStock ChannelStock
@ -169,19 +178,54 @@ namespace DM_Weight.ViewModels
List<MachineRecord> queryData = SqlSugarHelper.Db.Queryable<MachineRecord>()
.Includes<UserList>(mr => mr.User)
.Where(mr => mr.DrugId == ChannelStock.DrugId)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(mr => mr.Type == 2)
.Where(mr => mr.Status != 2)
.OrderBy(mr => mr.OperationTime)
.OrderByDescending(mr => mr.OperationTime)
.OrderBy(mr => mr.Id)
.ToList();
MachineRecords = queryData;
}
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (_MachineRecord != null && _MachineRecord.Quantity > 0)
{
MachineRecords = MachineRecords.Select(x =>
{
if (x.Id == _MachineRecord.Id)
{
x.IsSelected = !x.IsSelected;
}
return x;
}).ToList();
//DialogParameters dialogParameters = new DialogParameters();
//dialogParameters.Add("channel", Channel);
//DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
});
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(() =>
{
//if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
//{
// //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
// if (ChannelStock.DrawerNo>3)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "当前用户没有打开抽屉的权限!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
//}
if (ChannelStock != null)
{
if (Status == 0)
@ -255,7 +299,7 @@ namespace DM_Weight.ViewModels
ReturnQuantity2 = _MachineRecord.Quantity - _MachineRecord.ReturnQuantity1,
Id = _MachineRecord.Id,
Status = 2,
}).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand();
}).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand();
// 保存数据 还药空瓶记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
@ -269,11 +313,11 @@ namespace DM_Weight.ViewModels
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = ReturnQuantity,
Quantity = _MachineRecord.Quantity, //ReturnQuantity,
Type = 32,
InvoiceId = InvoiceId,
GetId = _MachineRecord.Id,
StockQuantity = nowChannels.Sum(it => it.Quantity)
GetId = _MachineRecord.Id
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
}

View File

@ -10,6 +10,11 @@ using System.Text;
using System.Threading.Tasks;
using DM_Weight.Models;
using DM_Weight.util;
using DM_Weight.msg;
using Prism.Events;
using System.Configuration;
using System.Reflection.PortableExecutable;
using DM_Weight.Report;
namespace DM_Weight.ViewModels
{
@ -34,10 +39,53 @@ namespace DM_Weight.ViewModels
set { SetProperty(ref _channelStock, value); }
}
private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
public DateTime? StartDate
{
get => _startDate;
set
{
if (value != null)
{
SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0));
}
else
{
SetProperty(ref _startDate, value);
}
RequestData();
}
}
private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
public DateTime? EndDate
{
get => _endDate;
set
{
if (value != null)
{
TimeSpan ershisi = new TimeSpan(23, 59, 59);
SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59));
}
else
{
SetProperty(ref _endDate, value);
}
RequestData();
}
}
IDialogService _dialogService;
public ReturnEmptyWindowViewModel(IDialogService dialogService)
IEventAggregator _eventAggregator;
public ReturnEmptyWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator)
{
_dialogService = dialogService;
_eventAggregator = eventAggregator;
}
public DelegateCommand RowSelected
@ -53,6 +101,14 @@ namespace DM_Weight.ViewModels
}
else if (Channel != null && Channel.CanReturnQuantity > 0)
{
//Channels = Channels.Select(x =>
//{
// if (x.Id == Channel.Id)
// {
// x.IsSelected = !x.IsSelected;
// }
// return x;
//}).ToList();
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("channel", Channel);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
@ -61,6 +117,172 @@ namespace DM_Weight.ViewModels
}
//还空瓶
public DelegateCommand ReturnEmptyCommand
{
get => new DelegateCommand(() =>
{
//List<ChannelStock> records = Channels.FindAll(it => it.IsSelected).ToList();
//if (records.Count > 0)
if (Channel != null && Channel.DrugId == null)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("DrawerNo", Channel.DrawerNo);
DialogServiceExtensions.ShowDialogHost(_dialogService, "BindingChannelDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else if(Channel!=null&&Channel.CanReturnQuantity>0)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("channel", Channel);
DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请选择要还的空瓶",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
private List<ChannelStock> csList = new List<ChannelStock>();
//销毁
public DelegateCommand DestoryCommand
{
get => new DelegateCommand(() =>
{
if (Channels != null && Channels.Count > 0)
{
csList = Channels.FindAll(it => it.IsSelected && it.Quantity > 0).ToList();
if (csList != null && csList.Count > 0)
{
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//DialogParameters dialogParameters = new DialogParameters();
//List<string> msg = new List<string>();
//msg.Add("确认");
//msg.Add("确认要销毁吗?");
//dialogParameters.Add("msgInfo", msg);
//DialogServiceExtensions.ShowDialogHost(_dialogService, "ConfirmMessageDialog", dialogParameters, DestoryDialogResult, "RootDialog");
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < csList.Count; i++)
{
ChannelStock channelStock = csList[i];
channelStock.Quantity = 0;
SqlSugarHelper.Db.Updateable(channelStock).ExecuteCommand();
MachineRecord machines = SqlSugarHelper.Db.Queryable<MachineRecord>()
//.InnerJoin<ChannelStock>((mr, cs) => mr.DrugId == cs.DrugId)
//.Where(mr => mr.DrugId.Contains(csList.Select(it => it.DrugId).ToList()) && mr.Type = 32)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
.Where(mr => mr.DrugId == channelStock.DrugId)
.Where(mr => mr.Type == 32)
.First();
SqlSugarHelper.Db.Updateable(machines).ReSetValue(mr =>
{
mr.IsDestroy = 1;
mr.TakeUser = HomeWindowViewModel.Operator?.Id.ToString();
mr.DestoryReviewerUser = HomeWindowViewModel.Reviewer?.Id.ToString();
}).ExecuteCommand();
}
return true;
});
//csList.ForEach(it => it.Quantity = 0);
//var f = SqlSugarHelper.Db.UseTran(() =>
//{
// SqlSugarHelper.Db.Updateable(csList).ExecuteCommand();
// string[] str = new string[csList.Count];
// str = csList.Select(t => t.DrugId).ToArray();
// List<MachineRecord> machines = SqlSugarHelper.Db.Queryable<MachineRecord>()
// //.InnerJoin<ChannelStock>((mr, cs) => mr.DrugId == cs.DrugId)
// //.Where(mr => mr.DrugId.Contains(csList.Select(it => it.DrugId).ToList()) && mr.Type = 32)
// .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
// .In(mr => mr.DrugId, str)
// .Where(mr => mr.Type == 32)
// .ToList();
// SqlSugarHelper.Db.Updateable(machines).ReSetValue(mr =>
// {
// mr.IsDestroy = 1;
// }).ExecuteCommand();
// return true;
//});
if (f.Data)
{
RequestData();
AlertMsg alertMsg = new AlertMsg
{
Message = "销毁完成",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "销毁失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "未勾选要销毁的数据或勾选的数据库存为0",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有要操作销毁的数据",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
}
//空瓶销毁(根据还的空瓶)
public DelegateCommand DestoryEmptyCommand { get => new DelegateCommand(DestoryEmptyAction); }
private void DestoryEmptyAction()
{
//List<ChannelStock> records = Channels.FindAll(it => it.IsSelected).ToList();
//if (records.Count > 0)
if (Channel != null && Channel.DrugId != null&&Channel.Quantity>0)
{
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("channel", Channel);
DialogServiceExtensions.ShowDialogHost(_dialogService, "DestoryEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "请选择有库存的数据",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
@ -69,6 +291,13 @@ namespace DM_Weight.ViewModels
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
//导出回收销毁记录
public DelegateCommand DownloadRecordCommand { get => new DelegateCommand(() => {
GridReportUtil.PrintEmptyDestoryReport(StartDate, EndDate);
}); }
public bool KeepAlive => false;
@ -99,9 +328,10 @@ namespace DM_Weight.ViewModels
Channels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.LeftJoin<DrugInfo>((cs, di) => cs.DrugId == di.DrugId.ToString())
.Where((cs) => cs.DrawerType != 1)
.Select((cs, di) => new ChannelStock{
CanReturnQuantity = SqlFunc.Subqueryable<MachineRecord>().Where(mr => mr.DrugId == cs.DrugId).Where(mr => mr.Type == 2).Where(mr => mr.Status != 2).Select(mr => SqlFunc.IsNull(SqlFunc.AggregateSumNoNull(mr.Quantity - mr.ReturnQuantity1 - mr.ReturnQuantity2), 0)) ,
.Where((cs) => cs.DrawerType != 1).Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"])
.Select((cs, di) => new ChannelStock
{
CanReturnQuantity = SqlFunc.Subqueryable<MachineRecord>().Where(mr => mr.DrugId == cs.DrugId && mr.MachineId == ConfigurationManager.AppSettings["machineId"]).Where(mr => mr.Type == 2).Where(mr => mr.Status != 2).Select(mr => SqlFunc.IsNull(SqlFunc.AggregateSumNoNull(mr.Quantity - mr.ReturnQuantity1 - mr.ReturnQuantity2), 0)),
DrugInfo = new DrugInfo
{
DrugId = di.DrugId,

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