From 9c40f7215701ab14eb82b6bea6e47f27366eeb18 Mon Sep 17 00:00:00 2001
From: maqiao <625215135@qq.com>
Date: Tue, 25 Jun 2024 11:36:56 +0800
Subject: [PATCH 1/3] =?UTF-8?q?secondMaster=E5=88=86=E6=94=AF=E5=85=A8?=
=?UTF-8?q?=E9=83=A8=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DM_Weight/App.config | 4 +-
DM_Weight/App.xaml.cs | 8 +-
DM_Weight/DM_Weight.csproj | 4 +-
DM_Weight/Finger/FingerprintUtil.cs | 4 +-
DM_Weight/Services/UserService.cs | 154 +++++++++---------
.../ViewModels/AddDrugControlViewModel.cs | 13 +-
.../BindingChannelDialogViewModel.cs | 9 +-
.../BindingChannelNewDialogViewModel.cs | 4 +-
.../CheckRecordDetailDialogViewModel.cs | 4 +
.../CheckRecordNewWindowViewModel.cs | 4 +
.../CheckStockNew2WindowViewModel.cs | 4 +-
.../CheckStockNewWindowViewModel.cs | 6 +-
.../DrawerAddDrugWindowViewModel.cs | 1 +
.../DrawerTakeDrugWindowViewModel.cs | 1 +
.../ViewModels/InvoiceInNewWindowViewModel.cs | 5 +-
DM_Weight/ViewModels/LoginWindowViewModel.cs | 16 +-
.../ViewModels/OrderTakeDialogViewModel.cs | 17 +-
.../OrderTakeDrugWindowViewModel.cs | 8 +-
.../ViewModels/ReturnDrugWindow2ViewModel.cs | 3 +-
.../ViewModels/ReturnDrugWindowViewModel.cs | 3 +-
.../SelfAddWindowViewModel - 复制.cs | 3 +-
.../ViewModels/SelfAddWindowViewModel.cs | 54 +++++-
.../ViewModels/SelfTakeDrugWindowViewModel.cs | 57 ++++++-
.../ViewModels/StockListWindowViewModel.cs | 50 +++++-
DM_Weight/Views/LoginWindow.xaml | 2 +-
DM_Weight/Views/SelfAddWindow.xaml | 9 +-
DM_Weight/Views/SelfTakeDrugWindow.xaml | 13 +-
DM_Weight/Views/StockListWindow.xaml | 8 +
DM_Weight/util/SqlSugarHelper.cs | 2 +-
29 files changed, 333 insertions(+), 137 deletions(-)
diff --git a/DM_Weight/App.config b/DM_Weight/App.config
index eab09b1..6f88165 100644
--- a/DM_Weight/App.config
+++ b/DM_Weight/App.config
@@ -3,7 +3,7 @@
-
+
-
+
diff --git a/DM_Weight/App.xaml.cs b/DM_Weight/App.xaml.cs
index 94b1199..ef15acf 100644
--- a/DM_Weight/App.xaml.cs
+++ b/DM_Weight/App.xaml.cs
@@ -90,10 +90,10 @@ namespace DM_Weight
foreach (Exception item in e.Exception.InnerExceptions)
{
logger.Error($"异常类型:{item.StackTrace};{item.GetType()}{Environment.NewLine}来自:{item.Source}{Environment.NewLine}异常内容:{item.Message}");
- if (item.GetType() == typeof(SqlSugar.SqlSugarException))
- {
- UserList userList = new UserService().CheckUserByFingerPrinter(1);
- }
+ //if (item.GetType() == typeof(SqlSugar.SqlSugarException))
+ //{
+ // UserList userList = new UserService().CheckUserByFingerPrinter(1);
+ //}
}
//将异常标识为已经观察到
diff --git a/DM_Weight/DM_Weight.csproj b/DM_Weight/DM_Weight.csproj
index 58922b8..a1f2c7a 100644
--- a/DM_Weight/DM_Weight.csproj
+++ b/DM_Weight/DM_Weight.csproj
@@ -71,11 +71,9 @@
-
-
-
+
diff --git a/DM_Weight/Finger/FingerprintUtil.cs b/DM_Weight/Finger/FingerprintUtil.cs
index 6388b71..9922740 100644
--- a/DM_Weight/Finger/FingerprintUtil.cs
+++ b/DM_Weight/Finger/FingerprintUtil.cs
@@ -20,7 +20,7 @@ namespace DM_Weight.Finger
{
private readonly ILog logger = LogManager.GetLogger(typeof(FingerprintUtil));
- public zkemkeeper.CZKEMClass axCZKEM1;// = new zkemkeeper.CZKEMClass();
+ public zkemkeeper.CZKEMClass axCZKEM1= new zkemkeeper.CZKEMClass();
public bool bIsConnected = false;
private string fingerIp = ConfigurationManager.AppSettings["fingerIp"]?.ToString() ?? "";
@@ -42,7 +42,7 @@ namespace DM_Weight.Finger
{
try
{
- axCZKEM1 = new CZKEMClass();
+ //axCZKEM1 = new CZKEMClass();
bIsConnected = axCZKEM1.Connect_Net(fingerIp, fingerPort);
logger.Info($"连接指纹机,IP:{fingerIp},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
if (bIsConnected)
diff --git a/DM_Weight/Services/UserService.cs b/DM_Weight/Services/UserService.cs
index 1609283..08cb6fc 100644
--- a/DM_Weight/Services/UserService.cs
+++ b/DM_Weight/Services/UserService.cs
@@ -1,7 +1,7 @@
using DM_Weight.Models;
using log4net;
using log4net.Repository.Hierarchy;
-using MySql.Data.MySqlClient;
+//using MySql.Data.MySqlClient;
//using MySql.Data.MySqlClient;
//using MySqlConnector;
using Newtonsoft.Json;
@@ -17,86 +17,86 @@ namespace DM_Weight.Services
{
public class UserService
{
- private readonly ILog logger = LogManager.GetLogger(typeof(UserService));
- //public static string connStr = ConfigurationManager.AppSettings["database"].ToString();
- public static string connStr = ConfigurationManager.ConnectionStrings["database"].ToString();
- public UserList CheckUserByFingerPrinter(int fingerPrinterId)
- {
- UserList? user = null;
+ //private readonly ILog logger = LogManager.GetLogger(typeof(UserService));
+ ////public static string connStr = ConfigurationManager.AppSettings["database"].ToString();
+ //public static string connStr = ConfigurationManager.ConnectionStrings["database"].ToString();
+ //public UserList CheckUserByFingerPrinter(int fingerPrinterId)
+ //{
+ // UserList? user = null;
- using (MySqlConnection con = new MySqlConnection(connStr))
- {
- logger.Info($"connStr:{connStr}");
- try
- {
- con.Open();
- }
- catch (Exception ex)
- {
- con.Close();
- logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}");
- logger.Info("再次Open");
- con.Open();
- }
- //connOpen(con);
- //Thread.Sleep(10);
- //while (con.State != System.Data.ConnectionState.Open)
- //{
- // logger.Info($"再次Open:{con.State}");
- // connOpen(con);
- // Thread.Sleep(10);
- //}
+ // //using (MySqlConnection con = new MySqlConnection(connStr))
+ // //{
+ // // logger.Info($"connStr:{connStr}");
+ // // try
+ // // {
+ // // con.Open();
+ // // }
+ // // catch (Exception ex)
+ // // {
+ // // con.Close();
+ // // logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}");
+ // // logger.Info("再次Open");
+ // // con.Open();
+ // // }
+ // //connOpen(con);
+ // //Thread.Sleep(10);
+ // //while (con.State != System.Data.ConnectionState.Open)
+ // //{
+ // // logger.Info($"再次Open:{con.State}");
+ // // connOpen(con);
+ // // Thread.Sleep(10);
+ // //}
- logger.Info($"数据库连接状态{con.State}");
- //string sql = @"select ul.id as id,ul.User_name as userName,r.id,r.role_name,r.permissions,r.machine_id from user_list ul
- // INNER JOIN role r on ul.machine_role_id=r.id where ul.Id=@ID and ul.machine_id=@machine_id and r.machine_id=@machine_id;";
- //MySqlCommand cmd = new MySqlCommand(sql, con);
- //cmd.Parameters.Clear();
- //MySqlParameter[] mySqlParameter = new MySqlParameter[] { new MySqlParameter("ID", fingerPrinterId), new MySqlParameter("machine_id", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")) };
- //cmd.Parameters.AddRange(mySqlParameter);
- ////执行语句
- //MySqlDataReader reader = cmd.ExecuteReader();
- //logger.Info("MySqlDataReader读数据");
- //while (reader.Read())
- //{
- // user = new UserList();
- // user.Id = reader.GetInt32("id");
- // user.UserName = reader["userName"] is DBNull ? "" : reader.GetString("userName");
- // //user.UserName = reader["id"] is DBNull ? "" : reader.GetString("id");
- // user.Nickname = reader["userName"] is DBNull ? "" : reader.GetString("userName");
- // user.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id");
- // RoleDm role = new RoleDm();
- // role.Id = reader.GetInt32("id");
- // //role.Permissions = reader["permissions"] is DBNull ? "" : reader.GetString("permissions");
- // role.RoleName = reader["role_name"] is DBNull ? "" : reader.GetString("role_name");
- // role.Permissions = JsonConvert.DeserializeObject>(reader["permissions"] is DBNull ? "" : reader.GetString("permissions")); // JsonConvert.SerializeObject(reader.GetString("permissions")).ToList();
- // user.Role = role;
- //}
+ // //logger.Info($"数据库连接状态{con.State}");
+ // //string sql = @"select ul.id as id,ul.User_name as userName,r.id,r.role_name,r.permissions,r.machine_id from user_list ul
+ // // INNER JOIN role r on ul.machine_role_id=r.id where ul.Id=@ID and ul.machine_id=@machine_id and r.machine_id=@machine_id;";
+ // //MySqlCommand cmd = new MySqlCommand(sql, con);
+ // //cmd.Parameters.Clear();
+ // //MySqlParameter[] mySqlParameter = new MySqlParameter[] { new MySqlParameter("ID", fingerPrinterId), new MySqlParameter("machine_id", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")) };
+ // //cmd.Parameters.AddRange(mySqlParameter);
+ // ////执行语句
+ // //MySqlDataReader reader = cmd.ExecuteReader();
+ // //logger.Info("MySqlDataReader读数据");
+ // //while (reader.Read())
+ // //{
+ // // user = new UserList();
+ // // user.Id = reader.GetInt32("id");
+ // // user.UserName = reader["userName"] is DBNull ? "" : reader.GetString("userName");
+ // // //user.UserName = reader["id"] is DBNull ? "" : reader.GetString("id");
+ // // user.Nickname = reader["userName"] is DBNull ? "" : reader.GetString("userName");
+ // // user.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id");
+ // // RoleDm role = new RoleDm();
+ // // role.Id = reader.GetInt32("id");
+ // // //role.Permissions = reader["permissions"] is DBNull ? "" : reader.GetString("permissions");
+ // // role.RoleName = reader["role_name"] is DBNull ? "" : reader.GetString("role_name");
+ // // role.Permissions = JsonConvert.DeserializeObject>(reader["permissions"] is DBNull ? "" : reader.GetString("permissions")); // JsonConvert.SerializeObject(reader.GetString("permissions")).ToList();
+ // // user.Role = role;
+ // //}
- //reader.Close();
- //logger.Info($"sql:{sql}");
- return user;
- }
+ // //reader.Close();
+ // //logger.Info($"sql:{sql}");
+ // return user;
+ // }
- }
- private Task connOpen(MySqlConnection con)
- {
- return Task.Run(() =>
- {
- if (con.State != System.Data.ConnectionState.Closed)
- {
- con.Close();
- }
- try
- {
- con.Open();
- }
- catch (Exception ex)
- {
- logger.Info($"Open失败:{ex.Message}");
- }
- });
- }
+ //}
+ //private Task connOpen(MySqlConnection con)
+ //{
+ // return Task.Run(() =>
+ // {
+ // if (con.State != System.Data.ConnectionState.Closed)
+ // {
+ // con.Close();
+ // }
+ // try
+ // {
+ // con.Open();
+ // }
+ // catch (Exception ex)
+ // {
+ // logger.Info($"Open失败:{ex.Message}");
+ // }
+ // });
+ //}
}
}
diff --git a/DM_Weight/ViewModels/AddDrugControlViewModel.cs b/DM_Weight/ViewModels/AddDrugControlViewModel.cs
index 9ac77bc..dbbca7d 100644
--- a/DM_Weight/ViewModels/AddDrugControlViewModel.cs
+++ b/DM_Weight/ViewModels/AddDrugControlViewModel.cs
@@ -252,11 +252,13 @@ namespace DM_Weight.ViewModels
Id = it.Id,
DrugId= it.DrugId,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate,it.DrugId }).ExecuteCommand();
+
}
else
{
//如果批号重复则不让添加
List csCount = SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ManuNo == it.ManuNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).ToList();
+
if (csCount.Count > 0)
{
//repeatList.Add(it.ManuNo);
@@ -279,6 +281,8 @@ namespace DM_Weight.ViewModels
Id = Guid.NewGuid().ToString(),
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
}).ExecuteCommand();
+
+
}
// 获取更新完库存后的药品库存
List nowChannels = SqlSugarHelper.Db.Queryable()
@@ -307,7 +311,8 @@ namespace DM_Weight.ViewModels
}).ExecuteCommand();
}
return true;
- });
+ });
+
//ChannelStocks.Clear();
if (stockRepeats.Count == record.Count)
{
@@ -486,7 +491,9 @@ namespace DM_Weight.ViewModels
{
//删除ChannelStock表中该批次数据
int isOk = SqlSugarHelper.Db.Deleteable().Where(cs => cs.DrugId == cstock.DrugId && cs.ManuNo == cs.ManuNo).ExecuteCommand();
- if(isOk>0 )
+
+
+ if (isOk>0 )
{
logger.Info($"删除{cstock.DrawerNo}-{cstock.ColNo}抽屉中药品{cstock.DrugId}下的批次{cstock.ManuNo},");
AlertMsg alertMsg = new AlertMsg
@@ -519,6 +526,8 @@ namespace DM_Weight.ViewModels
Is8Drawer = count < 9;
Is16Drawer = count >= 16;
Is17Drawer = count > 16;
+
+
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
diff --git a/DM_Weight/ViewModels/BindingChannelDialogViewModel.cs b/DM_Weight/ViewModels/BindingChannelDialogViewModel.cs
index ef6f52a..3feeab6 100644
--- a/DM_Weight/ViewModels/BindingChannelDialogViewModel.cs
+++ b/DM_Weight/ViewModels/BindingChannelDialogViewModel.cs
@@ -23,7 +23,7 @@ namespace DM_Weight.ViewModels
{
public class BindingChannelDialogViewModel : BindableBase, IDialogAware
{
-
+ private readonly ILog logger = LogManager.GetLogger(typeof(HomeWindowViewModel));
public string Title => "库位绑定";
public event Action RequestClose;
@@ -112,6 +112,8 @@ namespace DM_Weight.ViewModels
{
//DrugList = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).Where(di => di.PyCode.Contains(pycode)).OrderBy(di => di.DrugId).ToList();
DrugList = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).Where(di => di.PyCode.Contains(pycode)).OrderBy(di => di.DrugId).ToList();
+
+
}
else
{
@@ -212,7 +214,8 @@ namespace DM_Weight.ViewModels
//var list = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
var list = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
- DrugInfos_PY = list;
+ DrugInfos_PY = list;
+
}
private void GetChannelsByDrawerNo()
@@ -235,6 +238,7 @@ namespace DM_Weight.ViewModels
.ToPageList(PageNum, PageSize, ref totalCount);
Channels = list;
TotalCount = totalCount;
+
}
public void OnDialogOpened(IDialogParameters parameters)
{
@@ -269,6 +273,7 @@ namespace DM_Weight.ViewModels
if (DrugInfo != null)
{
int count = SqlSugarHelper.Db.Queryable().Where(cs => cs.DrugId.Equals(DrugInfo.DrugId.ToString())).Where(cs => cs.DrawerType != 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Count();
+
if (count == 0)
{
var item = SelectChannels[0];
diff --git a/DM_Weight/ViewModels/BindingChannelNewDialogViewModel.cs b/DM_Weight/ViewModels/BindingChannelNewDialogViewModel.cs
index 343ed9d..33acdc1 100644
--- a/DM_Weight/ViewModels/BindingChannelNewDialogViewModel.cs
+++ b/DM_Weight/ViewModels/BindingChannelNewDialogViewModel.cs
@@ -26,6 +26,7 @@ namespace DM_Weight.ViewModels
{
public class BindingChannelNewDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
+ private readonly ILog logger = LogManager.GetLogger(typeof(HomeWindowViewModel));
public string Title => "库位绑定";
@@ -145,6 +146,7 @@ namespace DM_Weight.ViewModels
if (string.IsNullOrEmpty(text))
{
DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
+
return;
}
if (DrugInfos != null)
@@ -153,7 +155,7 @@ namespace DM_Weight.ViewModels
}
DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text) || di.DrugId.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
-
+
}
//private List? _drugInfos;
diff --git a/DM_Weight/ViewModels/CheckRecordDetailDialogViewModel.cs b/DM_Weight/ViewModels/CheckRecordDetailDialogViewModel.cs
index f2add79..b4d4f71 100644
--- a/DM_Weight/ViewModels/CheckRecordDetailDialogViewModel.cs
+++ b/DM_Weight/ViewModels/CheckRecordDetailDialogViewModel.cs
@@ -3,6 +3,7 @@ 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;
@@ -22,6 +23,8 @@ namespace DM_Weight.ViewModels
{
public class CheckRecordDetailDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
+ private readonly ILog logger = LogManager.GetLogger(typeof(CheckRecordDetailDialogViewModel));
+
public string Title => "盘点记录明细";
private int _pageNum = 1;
public int PageNum
@@ -159,6 +162,7 @@ namespace DM_Weight.ViewModels
List checkList = SqlSugarHelper.Db.Queryable()
.Includes(cs => cs.DrugInfo)
.Where(cs => cs.optdate == OptDate).OrderByDescending(cs => cs.optdate).ToList();
+
ICollectionView vw = CollectionViewSource.GetDefaultView(checkList);
vw.GroupDescriptions.Add(new PropertyGroupDescription("DrugInfo"));
obsCheckRecordStock = new ObservableCollection(checkList);
diff --git a/DM_Weight/ViewModels/CheckRecordNewWindowViewModel.cs b/DM_Weight/ViewModels/CheckRecordNewWindowViewModel.cs
index 2ca9778..9ea3683 100644
--- a/DM_Weight/ViewModels/CheckRecordNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckRecordNewWindowViewModel.cs
@@ -2,6 +2,7 @@
using DM_Weight.Port;
using DM_Weight.Report;
using DM_Weight.util;
+using log4net;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
@@ -21,6 +22,8 @@ namespace DM_Weight.ViewModels
{
public class CheckRecordNewWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
+ private readonly ILog logger = LogManager.GetLogger(typeof(CheckRecordNewWindowViewModel));
+
private int _pageNum = 1;
public int PageNum
{
@@ -168,6 +171,7 @@ namespace DM_Weight.ViewModels
OPTSTARTDATE = StartDate,
OPTENDDATE = EndDate
}).ToPageList(PageNum, PageSize, ref totalCount);
+
//SqlSugarHelper.Db.ThenMapper(checkList, item =>
//{
// //item.drugDetails = SqlSugarHelper.Db.Queryable().SetContext(x => x.optdate, () => item.optdate, item).ToList();
diff --git a/DM_Weight/ViewModels/CheckStockNew2WindowViewModel.cs b/DM_Weight/ViewModels/CheckStockNew2WindowViewModel.cs
index 23940db..b4057c0 100644
--- a/DM_Weight/ViewModels/CheckStockNew2WindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckStockNew2WindowViewModel.cs
@@ -590,8 +590,8 @@ namespace DM_Weight.ViewModels
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent().Subscribe(DoMyPrismEvent);
- Task.Factory.StartNew(() => { RequestData(); });
- //RequestData();
+ //Task.Factory.StartNew(() => { RequestData(); });
+ RequestData();
}
diff --git a/DM_Weight/ViewModels/CheckStockNewWindowViewModel.cs b/DM_Weight/ViewModels/CheckStockNewWindowViewModel.cs
index 1359dd3..5d18dc8 100644
--- a/DM_Weight/ViewModels/CheckStockNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckStockNewWindowViewModel.cs
@@ -721,8 +721,6 @@ namespace DM_Weight.ViewModels
{
ChannelStocks.Clear();
- ChannelStocks.Clear();
-
List q = SqlSugarHelper.Db.Queryable()
.Includes(cs => cs.DrugInfo)
.InnerJoin((cs, cl) => cs.Chnguid == cl.Id && cs.DrugId == cl.DrugId)
@@ -746,8 +744,8 @@ namespace DM_Weight.ViewModels
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent().Subscribe(DoMyPrismEvent);
- Task.Factory.StartNew(() => { RequestData(); });
- //RequestData();
+ //Task.Factory.StartNew(() => { RequestData(); });
+ RequestData();
}
diff --git a/DM_Weight/ViewModels/DrawerAddDrugWindowViewModel.cs b/DM_Weight/ViewModels/DrawerAddDrugWindowViewModel.cs
index 6bfd1f4..84887d1 100644
--- a/DM_Weight/ViewModels/DrawerAddDrugWindowViewModel.cs
+++ b/DM_Weight/ViewModels/DrawerAddDrugWindowViewModel.cs
@@ -385,6 +385,7 @@ namespace DM_Weight.ViewModels
return cs;
}).ToList();
+
//obChannelStock = new ObservableCollection(ChannelStocks);
}
diff --git a/DM_Weight/ViewModels/DrawerTakeDrugWindowViewModel.cs b/DM_Weight/ViewModels/DrawerTakeDrugWindowViewModel.cs
index e279ae9..be1482c 100644
--- a/DM_Weight/ViewModels/DrawerTakeDrugWindowViewModel.cs
+++ b/DM_Weight/ViewModels/DrawerTakeDrugWindowViewModel.cs
@@ -382,6 +382,7 @@ namespace DM_Weight.ViewModels
.OrderBy(cs => cs.EffDate)
.ToList();
ChannelStocks = queryData;
+
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
diff --git a/DM_Weight/ViewModels/InvoiceInNewWindowViewModel.cs b/DM_Weight/ViewModels/InvoiceInNewWindowViewModel.cs
index 7d04c32..7924364 100644
--- a/DM_Weight/ViewModels/InvoiceInNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/InvoiceInNewWindowViewModel.cs
@@ -533,7 +533,7 @@ namespace DM_Weight.ViewModels
if (!_isFinishClick)
{
_isFinishClick = true;
- List record = ChannelStocks.ToList();
+ List record = ChannelStocks.Where(it=>it.AddQuantity>0).ToList();
string InvoiceId = SelectedInvoice.InvoiceNo;
var f = SqlSugarHelper.Db.UseTran(() =>
{
@@ -569,6 +569,7 @@ namespace DM_Weight.ViewModels
List csCount = SqlSugarHelper.Db.Queryable().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)
{
+ logger.Info($"批号重复:{it.DrawerNo}-{it.ColNo}-{it.ManuNo}");
//repeatList.Add(it.ManuNo);
//stockRepeats.Add(it);
continue;
@@ -804,7 +805,7 @@ namespace DM_Weight.ViewModels
.Select(it => new Invoice())
.Select("*")
.ToPageList(PageNum, PageSize, ref totalCount);
-
+
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
diff --git a/DM_Weight/ViewModels/LoginWindowViewModel.cs b/DM_Weight/ViewModels/LoginWindowViewModel.cs
index ebaecc4..fc705c9 100644
--- a/DM_Weight/ViewModels/LoginWindowViewModel.cs
+++ b/DM_Weight/ViewModels/LoginWindowViewModel.cs
@@ -43,7 +43,7 @@ namespace DM_Weight.ViewModels
private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
private string firstLogin = ConfigurationManager.AppSettings["firstLogin"]?.ToString() ?? "operator";
-
+
public bool SingleLogin
{
get => ReadAppSetting("loginMode") == "1";
@@ -150,7 +150,7 @@ _exitCommand ??= new DelegateCommand(Exit);
.Includes(u => u.Role)
.First(u => u.UserName == username && ConfigurationManager.AppSettings["machineId"].ToString().Equals(u.MachineId));
-
+ //UserList userList =new UserService().CheckUserByFingerPrinter(msg.Id);
//UserList userList = SqlSugarHelper.Db.Queryable()
// .Includes(u => u.Role)
// .InnerJoin((u, r) => u.RoleId == r.Id)
@@ -342,7 +342,7 @@ _exitCommand ??= new DelegateCommand(Exit);
UserList userList = SqlSugarHelper.Db.Queryable()
.Includes(u => u.Role)
.First(u => u.Id == msg.Id);
-
+
//UserList userList = new UserService().CheckUserByFingerPrinter(msg.Id);
logger.Info($"userList是空?{userList == null}");
@@ -378,11 +378,11 @@ _exitCommand ??= new DelegateCommand(Exit);
}
catch (Exception e)
{
- logger.Info($"LoginEvent存在异常:{e.Message}");
- if(e.GetType().Name== "SqlSugarException")
- {
- UserList userList = new UserService().CheckUserByFingerPrinter(1);
- }
+ logger.Info($"LoginEvent存在异常:{e.Message};数据库连接字符串:{ConfigurationManager.ConnectionStrings["database"].ToString()}");
+ //if(e.GetType().Name== "SqlSugarException")
+ //{
+ // UserList userList = new UserService().CheckUserByFingerPrinter(1);
+ //}
}
}
diff --git a/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs b/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs
index 2518fa0..1854bda 100644
--- a/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs
+++ b/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs
@@ -21,6 +21,7 @@ using DM_Weight.Port;
using DM_Weight.select;
using DM_Weight.util;
using System.Threading;
+using System.Windows.Controls.Primitives;
namespace DM_Weight.ViewModels
{
@@ -171,6 +172,7 @@ namespace DM_Weight.ViewModels
public void RequestData()
{
+ //
orderDetails = SqlSugarHelper.Db.Queryable()
.Includes(od => od.DrugInfo)
.InnerJoin(SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
@@ -330,7 +332,7 @@ namespace DM_Weight.ViewModels
{
string InvoiceId = OrderInfo.OrderNo;
try
- {
+ {
SqlSugarHelper.Db.BeginTran();
logger.Info($"更新OrderInfo:{InvoiceId}");
SqlSugarHelper.Db.Updateable(new OrderInfo()
@@ -338,7 +340,9 @@ namespace DM_Weight.ViewModels
DmStatus = 1,
OrderNo = OrderInfo.OrderNo
}).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
-
+ logger.Info($"Task.Delay前:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
+ Task.Delay(4000).Wait();
+ logger.Info($"Task.Delay后:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
logger.Info("进入record循环");
for (int i = 0; i < record.Count; i++)
{
@@ -389,8 +393,8 @@ namespace DM_Weight.ViewModels
logger.Info("事务已提交");
// 更新屏显库存
//List singleChannels = record.FindAll(it => it.BoardType != 1);
- Task.Run(() =>
- {
+ //Task.Run(() =>
+ //{
List singleChannels = record.Where(it => it.BoardType == 5)
.GroupBy(it => new { it.DrawerNo, it.ColNo })
.Select(it =>
@@ -439,7 +443,7 @@ namespace DM_Weight.ViewModels
};
_eventAggregator.GetEvent().Publish(alertMsg);
}));
- });
+ //});
}
catch (Exception ex)
@@ -451,7 +455,8 @@ namespace DM_Weight.ViewModels
Message = "抽屉取药完成,库存更新失败!",
Type = MsgType.ERROR,
};
- _eventAggregator.GetEvent().Publish(alertMsg);
+ _eventAggregator.GetEvent().Publish(alertMsg);
+ _isFinishClick = false;
}
//var f = SqlSugarHelper.Db.UseTran(() =>
diff --git a/DM_Weight/ViewModels/OrderTakeDrugWindowViewModel.cs b/DM_Weight/ViewModels/OrderTakeDrugWindowViewModel.cs
index 5d971ef..25b3c8e 100644
--- a/DM_Weight/ViewModels/OrderTakeDrugWindowViewModel.cs
+++ b/DM_Weight/ViewModels/OrderTakeDrugWindowViewModel.cs
@@ -225,6 +225,8 @@ namespace DM_Weight.ViewModels
logger.Info("开始OrderTakeDrugWindowViewModel_查询数据");
OrderInfos.Clear();
int totalCount = 0;
+ //logger.Info($"SqlSugarHelper.Db.Ado.Connection.GetHashCode():{_db.Ado.Connection.GetHashCode()}");
+
List queryData = SqlSugarHelper.Db.Queryable()
.InnerJoin((oi, od) => oi.OrderNo == od.OrderNo)
.InnerJoin(SqlSugarHelper.Db.Queryable().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)
@@ -242,7 +244,7 @@ namespace DM_Weight.ViewModels
OrderInfos = queryData;
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
-
+ logger.Info($"_db.Ado.Connection.GetHashCode():{SqlSugarHelper.Db.Ado.Connection.GetHashCode()};{SqlSugarHelper.Db.Ado.GetHashCode()}");
logger.Info("结束OrderTakeDrugWindowViewModel_查询数据");
}
@@ -251,8 +253,8 @@ namespace DM_Weight.ViewModels
{
logger.Info("进入OrderTakeDrugWindowViewModel_OnNavigatedTo");
_eventAggregator.GetEvent().Subscribe(DoMyPrismEvent);
- //RequestData();
- Task.Factory.StartNew(() => RequestData());
+ RequestData();
+ //Task.Factory.StartNew(() => RequestData());
logger.Info("结束OrderTakeDrugWindowViewModel_OnNavigatedTo");
//Task t = new Task(() => { RequestData(); });
diff --git a/DM_Weight/ViewModels/ReturnDrugWindow2ViewModel.cs b/DM_Weight/ViewModels/ReturnDrugWindow2ViewModel.cs
index 280ec39..f088403 100644
--- a/DM_Weight/ViewModels/ReturnDrugWindow2ViewModel.cs
+++ b/DM_Weight/ViewModels/ReturnDrugWindow2ViewModel.cs
@@ -238,7 +238,8 @@ namespace DM_Weight.ViewModels
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
- Task.Factory.StartNew(() => RequestData());
+ //Task.Factory.StartNew(() => RequestData());
+ RequestData();
}
//每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
diff --git a/DM_Weight/ViewModels/ReturnDrugWindowViewModel.cs b/DM_Weight/ViewModels/ReturnDrugWindowViewModel.cs
index b319fa9..9a49513 100644
--- a/DM_Weight/ViewModels/ReturnDrugWindowViewModel.cs
+++ b/DM_Weight/ViewModels/ReturnDrugWindowViewModel.cs
@@ -192,7 +192,8 @@ namespace DM_Weight.ViewModels
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
- Task.Factory.StartNew(() => RequestData());
+ //Task.Factory.StartNew(() => RequestData());
+ RequestData();
}
//每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
diff --git a/DM_Weight/ViewModels/SelfAddWindowViewModel - 复制.cs b/DM_Weight/ViewModels/SelfAddWindowViewModel - 复制.cs
index f99da84..c35e9c0 100644
--- a/DM_Weight/ViewModels/SelfAddWindowViewModel - 复制.cs
+++ b/DM_Weight/ViewModels/SelfAddWindowViewModel - 复制.cs
@@ -192,7 +192,8 @@ namespace DM_Weight.ViewModels
public void OnNavigatedTo(NavigationContext navigationContext)
{
logger.Info("进入SelfAddWindowViewModel_OnNavigatedTo");
- Task.Factory.StartNew(() => RequestChannelData());
+ //Task.Factory.StartNew(() => RequestChannelData());
+ RequestChannelData();
logger.Info("结束SelfAddWindowViewModel_OnNavigatedTo");
}
diff --git a/DM_Weight/ViewModels/SelfAddWindowViewModel.cs b/DM_Weight/ViewModels/SelfAddWindowViewModel.cs
index 0fdf91c..604d439 100644
--- a/DM_Weight/ViewModels/SelfAddWindowViewModel.cs
+++ b/DM_Weight/ViewModels/SelfAddWindowViewModel.cs
@@ -21,6 +21,48 @@ namespace DM_Weight.ViewModels
{
public class SelfAddWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
+ private int _pageNum = 1;
+ public int PageNum
+ {
+ get => _pageNum;
+ set
+ {
+ SetProperty(ref _pageNum, value);
+ RequestChannelData();
+ }
+ }
+
+ private int _pageCount = 1;
+ public int PageCount
+ {
+ get => _pageCount;
+ set
+ {
+ SetProperty(ref _pageCount, value);
+ }
+ }
+
+ private int _pageSize = 3;
+ 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;
@@ -210,24 +252,28 @@ namespace DM_Weight.ViewModels
// .OrderBy(cs => cs.ColNo)
// .ToList();
//ChannelStocks = queryData;
+ int totalCount = 0;
List q = SqlSugarHelper.Db.Queryable()
.Includes(di => di.channelStocks.Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList())
- .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cs) => cs.DrugId.Contains(SearchValue))
+
+ .Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null)).WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cs) => cs.DrugId.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cs) => cs.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cs) => cs.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cs) => cs.DrugBarcode.Contains(SearchValue))
- .Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null))
.OrderBy(cs => cs.DrugId)
- .ToList();
+ .ToPageList(PageNum, PageSize, ref totalCount);
Drugs = q;
+ TotalCount = totalCount;
+ PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
logger.Info("结束SelfAddWindowViewModel_查询数据");
+
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
logger.Info("进入SelfAddWindowViewModel_OnNavigatedTo");
- Task.Factory.StartNew(() => RequestChannelData());
+ RequestChannelData();
logger.Info("结束SelfAddWindowViewModel_OnNavigatedTo");
}
diff --git a/DM_Weight/ViewModels/SelfTakeDrugWindowViewModel.cs b/DM_Weight/ViewModels/SelfTakeDrugWindowViewModel.cs
index 80769f9..d6a7e51 100644
--- a/DM_Weight/ViewModels/SelfTakeDrugWindowViewModel.cs
+++ b/DM_Weight/ViewModels/SelfTakeDrugWindowViewModel.cs
@@ -14,14 +14,59 @@ using DM_Weight.util;
using DM_Weight.msg;
using Prism.Events;
using SqlSugar;
+using log4net;
+using System.Drawing.Printing;
namespace DM_Weight.ViewModels
{
public class SelfTakeDrugWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
+ private int _pageNum = 1;
+ public int PageNum
+ {
+ get => _pageNum;
+ set
+ {
+ SetProperty(ref _pageNum, value);
+ RequestChannelData();
+ }
+ }
+
+ private int _pageCount = 1;
+ public int PageCount
+ {
+ get => _pageCount;
+ set
+ {
+ SetProperty(ref _pageCount, value);
+ }
+ }
+
+ private int _pageSize = 3;
+ 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 readonly ILog logger = LogManager.GetLogger(typeof(SelfTakeDrugWindowViewModel));
+
IDialogService _dialogService;
IEventAggregator _eventAggregator;
-
public static List StaticSelects = new()
{
new OrderTakeSelect
@@ -49,7 +94,7 @@ namespace DM_Weight.ViewModels
public SelfTakeDrugWindowViewModel(IDialogService DialogService, IEventAggregator eventAggregator, SqlSugarScope sqlSugarScope)
{
_dialogService = DialogService;
- _eventAggregator= eventAggregator;
+ _eventAggregator = eventAggregator;
//this.SqlSugarHelper.Db = sqlSugarScope;
}
@@ -195,6 +240,7 @@ namespace DM_Weight.ViewModels
// .OrderBy(cs => cs.ColNo)
// .ToList();
//ChannelStocks = queryData;
+ int totalCount = 0;
List q = SqlSugarHelper.Db.Queryable()
.Includes(di => di.channelStocks.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null&&cs.Quantity>0).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList())
@@ -202,11 +248,16 @@ namespace DM_Weight.ViewModels
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cs) => cs.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cs) => cs.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cs) => cs.DrugBarcode.Contains(SearchValue))
+ .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cs) => cs.DrugBarcode.Contains(SearchValue))
.Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null))
.OrderBy(cs => cs.DrugId)
- .ToList();
+ .ToPageList(PageNum, PageSize, ref totalCount);
+ //.ToList();
Drugs = q.Where(di => di.channelStocks.Count() > 0).ToList();
+ TotalCount = totalCount;
+ PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
+ logger.Info($"_db.Ado.Connection.GetHashCode():{SqlSugarHelper.Db.Ado.Connection.GetHashCode()};{SqlSugarHelper.Db.Ado.GetHashCode()}");
}
//接收导航传过来的参数 现在是在此处初始化了表格数据
diff --git a/DM_Weight/ViewModels/StockListWindowViewModel.cs b/DM_Weight/ViewModels/StockListWindowViewModel.cs
index 480340d..335a5c9 100644
--- a/DM_Weight/ViewModels/StockListWindowViewModel.cs
+++ b/DM_Weight/ViewModels/StockListWindowViewModel.cs
@@ -25,6 +25,47 @@ namespace DM_Weight.ViewModels
{
public class StockListWindowViewModel : 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 = 3;
+ 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 StockListWindowViewModel vm;
public string drugId;
public static List StaticSelects = new()
@@ -240,7 +281,7 @@ namespace DM_Weight.ViewModels
// .OrderBy(cs => cs.DrugId)
// .ToList();
//Drugs = q;
-
+ int totalCount = 0;
List q = SqlSugarHelper.Db.Queryable()
.Includes(di => di.channelStocks.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList())
@@ -250,9 +291,10 @@ namespace DM_Weight.ViewModels
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cs) => cs.DrugBarcode.Contains(SearchValue))
.Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null))
.OrderBy(cs => cs.DrugId)
- .ToList();
+ .ToPageList(PageNum, PageSize, ref totalCount);
Drugs = q;
-
+ TotalCount = totalCount;
+ PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
logger.Info("结束StockListWindowViewModel_查询数据");
}
@@ -261,7 +303,7 @@ namespace DM_Weight.ViewModels
{
logger.Info("进入StockListWindowViewModel_OnNavigatedTo");
//RequestData();
- Task.Factory.StartNew(() => RequestData());
+ RequestData();
logger.Info("结束StockListWindowViewModel_OnNavigatedTo");
}
diff --git a/DM_Weight/Views/LoginWindow.xaml b/DM_Weight/Views/LoginWindow.xaml
index 43a95d2..bd9abf2 100644
--- a/DM_Weight/Views/LoginWindow.xaml
+++ b/DM_Weight/Views/LoginWindow.xaml
@@ -196,7 +196,7 @@
-
+
diff --git a/DM_Weight/Views/SelfAddWindow.xaml b/DM_Weight/Views/SelfAddWindow.xaml
index 2a392fc..7d1fb88 100644
--- a/DM_Weight/Views/SelfAddWindow.xaml
+++ b/DM_Weight/Views/SelfAddWindow.xaml
@@ -8,6 +8,7 @@
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:convert="clr-namespace:DM_Weight.Converter"
xmlns:prism="http://prismlibrary.com/"
+ xmlns:pagination="clr-namespace:DM_Weight.Components.pagination"
mc:Ignorable="d">
@@ -20,6 +21,7 @@
+
@@ -254,7 +256,12 @@
-->
-
+
diff --git a/DM_Weight/Views/SelfTakeDrugWindow.xaml b/DM_Weight/Views/SelfTakeDrugWindow.xaml
index ae459e2..c97c302 100644
--- a/DM_Weight/Views/SelfTakeDrugWindow.xaml
+++ b/DM_Weight/Views/SelfTakeDrugWindow.xaml
@@ -9,6 +9,7 @@
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:convert="clr-namespace:DM_Weight.Converter"
xmlns:prism="http://prismlibrary.com/"
+ xmlns:pagination="clr-namespace:DM_Weight.Components.pagination"
mc:Ignorable="d">
@@ -22,6 +23,7 @@
+
@@ -103,7 +105,9 @@
+
+
+
diff --git a/DM_Weight/util/SqlSugarHelper.cs b/DM_Weight/util/SqlSugarHelper.cs
index 0f99316..740329f 100644
--- a/DM_Weight/util/SqlSugarHelper.cs
+++ b/DM_Weight/util/SqlSugarHelper.cs
@@ -11,7 +11,7 @@ namespace DM_Weight.util
ConnectionString = ConfigurationManager.ConnectionStrings["database"].ToString(),
DbType = DbType.MySql,
- IsAutoCloseConnection = true
+ IsAutoCloseConnection = false
},
db =>
{
From 636bc9cd57a67657fbe500f5c5db29c1cb7c45f1 Mon Sep 17 00:00:00 2001
From: maqiao <625215135@qq.com>
Date: Tue, 25 Jun 2024 13:24:48 +0800
Subject: [PATCH 2/3] =?UTF-8?q?portUtil=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DM_Weight/Port/PortUtil.cs | 1435 ++++++++++++++++++++++++++++++++++++
1 file changed, 1435 insertions(+)
create mode 100644 DM_Weight/Port/PortUtil.cs
diff --git a/DM_Weight/Port/PortUtil.cs b/DM_Weight/Port/PortUtil.cs
new file mode 100644
index 0000000..8474d61
--- /dev/null
+++ b/DM_Weight/Port/PortUtil.cs
@@ -0,0 +1,1435 @@
+using log4net;
+using log4net.Repository.Hierarchy;
+using NetTaste;
+using Prism.Events;
+using Prism.Ioc;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.Design;
+using System.Configuration;
+using System.IO.Ports;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Speech.Synthesis;
+using System.Text;
+using System.Threading.Channels;
+using System.Threading.Tasks;
+using System.Timers;
+using System.Windows;
+using System.Windows.Markup;
+using System.Windows.Media.Animation;
+using Unity;
+using DM_Weight.msg;
+using DM_Weight.Views;
+using System.Reflection;
+using System.Threading;
+
+namespace DM_Weight.Port
+{
+ public class PortUtil
+ {
+ private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
+ // 抽屉串口
+ public SerialPort drawerSerial;
+ // can总线串口
+ public SerialPort canBusSerial;
+
+ // 条码枪串口
+ public SerialPort scanCodeSerial;
+
+
+
+
+
+
+ // 抽屉串口协议232 | 485
+ private int _drawerProtocol = Convert.ToInt32(ConfigurationManager.AppSettings["DrawerProtocol"]);
+ // can总线耗材板地址
+ private int _doorAddr = Convert.ToInt32(ConfigurationManager.AppSettings["DoorAddr"]);
+ // 储物箱地址
+ private int _storageBoxAddr = Convert.ToInt32(ConfigurationManager.AppSettings["StorageBoxAddr"]);
+
+ // can总线串口是否存在
+ public bool _canBusExsit = Convert.ToBoolean(ConfigurationManager.AppSettings["CanBusExsit"]);
+
+ // 当前操作的抽屉号
+ public int DrawerNo { get; set; }
+ // 当前操作的库位号列表
+ public int[] ColNos { get; set; } = new int[] { };
+ // 当前操作的库位号列表
+ public int[] Stocks { get; set; } = new int[] { };
+
+
+
+ // 当前操作的窗口
+ public string WindowName { get; set; }
+ // 取药操作的窗口名【处方取药、抽屉取药、自选取药、调拨出库】
+ private string[] TakeNames = new string[] { "DrawerTakeDrugWindow", "OrderTakeDrugWindow", "SelfTakeDrugWindow", "InvoiceTakeDrugWindow" };
+ // 加药操作的窗口名【自选加药、抽屉加药、还药】
+ private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow", "AddDrugControl" };
+ // 盘点操作的窗口名【盘点】
+ private string[] CheckNames = new string[] { "CheckStockWindow", "CheckStockNewWindow" };
+ // 归还空瓶操作的窗口名【盘点】
+ private string[] ReturnEmptyNames = new string[] { "ReturnEmptyWindow" };
+
+ public int BoardType { get; set; } = 1;
+ public int DrawerType { get; set; } = 1;
+
+ private int[] BeforeQuantity { get; set; } = new int[] { };
+ private int[] AfterQuantity { get; set; } = new int[] { };
+
+ // 整体流程状态
+ private int statue { get; set; } = 0;
+
+
+ // 是否正在操作中
+ public bool Operate { get; set; }
+
+ public DateTime dateTime { get; set; } = DateTime.Now;
+
+
+ public async Task ResetData()
+ {
+ logger.Info($"重新设置串口数据状态【{statue}】,抽屉【{DrawerNo}】");
+ if (!"HomeWindow".Equals(WindowName) && statue == 1)
+ {
+ if (BoardType == 2)
+ {
+ // 灭灯
+ AllLightOff();
+ }
+ if (BoardType == 3)
+ {
+ // 失能
+ await BoxLockLightOff();
+ }
+ if (BoardType == 4)
+ {
+ // 失能
+ CloseStorage();
+ }
+ if (BoardType == 6)
+ {
+ // 失能
+ await BoxLockLightOff2();
+ }
+ if (BoardType == 5)
+ {
+ //await WriteQuantityArray();
+ }
+ }
+ Operate = false;
+ dateTime = DateTime.Now;
+ statue = 0;
+ BeforeQuantity = new int[9];
+ AfterQuantity = new int[9];
+ BoardType = 1;
+ DrawerType = 1;
+ WindowName = "";
+ DrawerNo = 0;
+ ColNos = new int[] { };
+ Stocks = new int[] { };
+ logger.Info($"重新设置串口数据状态结束");
+ }
+
+ public async void Start()
+ {
+ logger.Info($"进行抽屉操作抽屉号【{DrawerNo}】类型【{BoardType}】库位【{string.Join(",", ColNos)}】窗口【{WindowName}】");
+ Operate = true;
+
+ try
+ {
+ // 储物箱直接开
+ if (BoardType == 4)
+ {
+ byte[] result = await OpenStorage();
+ logger.Info($"储物箱使能返回:" + Convert.ToHexString(result));
+
+ int[] r = result.Select(it => Convert.ToInt32(it)).ToArray();
+ logger.Info($"储物箱使能返回:{Convert.ToHexString(result)}");
+ if (r[4] != 0)
+ {
+ logger.Info($"储物箱使能成功");
+ Thread.Sleep(50);
+ // 查询锁状态
+ GetBackDoorState();
+ }
+ else
+ {
+ string _WindowName = WindowName;
+ logger.Info($"储物箱使能失败r:" + string.Join("", r));
+ // 重新初始化数据
+ ResetData();
+ // 指令发送错误,未打开
+ // 返回消息 抽屉打开失败
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = _WindowName,
+ Message = "储物箱使能失败"
+ });
+ }
+ }
+ else
+ {
+ // 外置抽屉
+ if (DrawerType == 3)
+ {
+ if (BoardType == 2)
+ {
+ byte[] buffer = await OpenRecover();
+ int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
+ if ((ColNos[0] > 3 && r[4] == 1) || (ColNos[0] < 4 && r[3] == 1))
+ {
+
+ // 告诉前台打开成功
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWEROPEN,
+ WindowName = WindowName,
+ });
+ logger.Info($"回收箱打开成功");
+
+ // 查询是否关闭状态
+ GeRecoverStatus();
+ }
+ else
+ {
+ string _WindowName = WindowName;
+ logger.Info($"回收箱打开失败");
+ // 重新初始化数据
+ ResetData();
+ // 返回消息开启失败
+ // 返回消息 抽屉打开失败
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = _WindowName,
+ Message = "回收箱打开失败"
+ });
+ }
+ }
+ }
+ // 内置抽屉
+ else
+ {
+ if (BoardType == 2)
+ {
+ byte[] quantity = await CheckQuantityByDrawer();
+ BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
+ logger.Info($"BeforeQuantity{string.Join(",", BeforeQuantity)}");
+ }
+ if (BoardType == 6)
+ {
+ int[] quantity = await CheckQuantityByAddr2();
+ BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray();
+ logger.Info($"BeforeQuantity{string.Join(",", BeforeQuantity)}");
+ }
+
+
+ byte[] buffer = await OpenDrawer();
+ int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
+
+ logger.Info($"OpenDrawer{string.Join(",", r)}");
+ if (DrawerState(r))
+ {
+ statue = 1;
+ // 是不是单支抽屉
+ if (BoardType == 2)
+ {
+ // 取药
+ if (Array.IndexOf(TakeNames, WindowName) > -1)
+ {
+ // 有药位置亮灯
+ await HasLightOnByCol();
+ }
+ // 加药
+ if (Array.IndexOf(AddNames, WindowName) > -1)
+ {
+ // 无药位置亮灯
+ await NoLightOnByCol();
+ }
+ // 盘点
+ if (Array.IndexOf(CheckNames, WindowName) > -1)
+ {
+ // 不亮灯
+ }
+ // 空瓶
+ if (Array.IndexOf(ReturnEmptyNames, WindowName) > -1)
+ {
+ // 无药位置亮灯
+ await NoLightOnByCol();
+ }
+ }
+ // 药盒
+ if (BoardType == 3)
+ {
+ // 药盒指示灯使能
+ await BoxLockLightOn();
+ }
+ if (BoardType == 6)
+ {
+ // 药盒指示灯使能
+ await BoxLockLightOn2();
+ }
+ // 返回消息 抽屉已经打开
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWEROPEN,
+ WindowName = WindowName,
+ });
+ logger.Info($"抽屉【{DrawerNo}】打开成功");
+ // 查询抽屉状态
+ await Task.Delay(200);
+ GetDrawerStatus();
+
+ }
+ else
+ {
+ string _WindowName = WindowName;
+ // 重新初始化数据
+ ResetData();
+ // 返回消息 抽屉打开失败
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = _WindowName,
+ Message = $"抽屉【{DrawerNo}】打开失败"
+ });
+ logger.Info($"抽屉【{DrawerNo}】打开失败");
+ }
+ }
+
+ }
+ }
+ catch (Exception ex)
+ {
+ string _WindowName = WindowName;
+ statue = 1;
+ logger.Info(ex.Message);
+ // 重新初始化数据
+ ResetData();
+ // 返回消息 抽屉打开失败
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = _WindowName,
+ Message = $"操作异常{ex.Message}"
+ });
+ }
+
+ }
+
+ public async void GetDrawerStatus()
+ {
+ try
+ {
+
+ if (Operate)
+ {
+ // 查询抽屉状态
+ byte[] buffer = await CheckDrawerStatus();
+
+ int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
+
+ logger.Info($"GetDrawerStatus{string.Join(",", r)}");
+ // 抽屉没有关闭
+ if (DrawerState(r))
+ {
+ if (BoardType == 2)
+ {
+ // 继续查询抽屉药品数量
+ // 查询抽屉药品数量
+ byte[] quantity = await CheckQuantityByDrawer();
+ AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
+ logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}");
+ int[] Quantitys = new int[BeforeQuantity.Length];
+ for (int i = 0; i < BeforeQuantity.Length; i++)
+ {
+ // 取药
+ if (Array.IndexOf(TakeNames, WindowName) > -1)
+ {
+ Quantitys[i] = BeforeQuantity[i] - AfterQuantity[i];
+ }
+ // 加药
+ if (Array.IndexOf(AddNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+ // 盘点
+ if (Array.IndexOf(CheckNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+ // 空瓶
+ if (Array.IndexOf(CheckNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+
+ }
+ // 告诉前台数据变化
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.UPDATEQUANTITY,
+ WindowName = WindowName,
+ Quantitys = Quantitys
+ });
+ logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
+
+ }
+ if (BoardType == 6)
+ {
+ // 继续查询抽屉药品数量
+ // 查询抽屉药品数量
+ int[] quantity = await CheckQuantityByAddr2();
+ AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray();
+ logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}");
+ int[] Quantitys = new int[BeforeQuantity.Length];
+ for (int i = 0; i < BeforeQuantity.Length; i++)
+ {
+ // 取药
+ if (Array.IndexOf(TakeNames, WindowName) > -1)
+ {
+ Quantitys[i] = BeforeQuantity[i] - AfterQuantity[i];
+ }
+ // 加药
+ if (Array.IndexOf(AddNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+ // 盘点
+ if (Array.IndexOf(CheckNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+ // 空瓶
+ if (Array.IndexOf(CheckNames, WindowName) > -1)
+ {
+ Quantitys[i] = AfterQuantity[i] - BeforeQuantity[i];
+ }
+
+ }
+ // 告诉前台数据变化
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.UPDATEQUANTITY,
+ WindowName = WindowName,
+ Quantitys = Quantitys
+ });
+ logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
+
+ }
+ // 继续监听抽屉状态
+ await Task.Delay(200);
+ GetDrawerStatus();
+ }
+ else
+ {
+ statue = 2;
+ if (BoardType == 2)
+ {
+ // 关灯
+ AllLightOff();
+
+ }
+ // 药盒
+ if (BoardType == 3)
+ {
+ // 药盒指示灯失能
+ await BoxLockLightOff();
+ }
+ if (BoardType == 6)
+ {
+ // 药盒指示灯使能
+ await BoxLockLightOff2();
+ }
+ string _WindowName = WindowName;
+ logger.Info($"抽屉【{DrawerNo}】已关闭");
+
+ // 重新初始化数据
+ await ResetData();
+ // 返回消息 抽屉已经关闭
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWERCLOSE,
+ WindowName = _WindowName,
+ });
+ }
+ }
+
+ }
+ catch (Exception ex)
+ {
+
+ string _WindowName = WindowName;
+ logger.Info($"GetDrawerStatus异常:{ex.Message}");
+ // 重新初始化数据
+ ResetData();
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = _WindowName,
+ Message = $"GetDrawerStatus异常:{ex.Message}"
+ });
+ }
+ }
+
+
+ public async void GeRecoverStatus()
+ {
+ if (Operate)
+ {
+ byte[] buffer = await CheckRecoverStatus();
+ int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
+
+ logger.Info($"GeRecoverStatus{string.Join(",", r)}");
+
+ // 回收箱关闭成功
+ if ((ColNos[0] > 3 && r[4] == 0) || (ColNos[0] < 4 && r[3] == 0))
+ {
+ logger.Info($"回收箱关闭");
+ // 查询数量
+ byte[] bytes = await CheckRecoverQuantity();
+
+ int[] r1 = bytes.Select(it => Convert.ToInt32(it)).ToArray();
+ // 返回消息库位关闭,放入空瓶数量
+ int[] quantitys = r1.Skip(3).Take(3).ToArray();
+ int index = ColNos[0] % 3 > 0 ? ColNos[0] % 3 - 1 : 2;
+
+ // 指定库位放入的药品数量
+ int InCount = quantitys[index];
+ string _WindowName = WindowName;
+ // 重新初始化数据
+ ResetData();
+
+ logger.Info($"回收板数量变化【{string.Join(",", quantitys)}】");
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWERCLOSE,
+ Quantitys = new int[] { InCount },
+ WindowName = _WindowName,
+ });
+ }
+ else
+ {
+ // 查询是否关闭状态
+ await Task.Delay(200);
+ GeRecoverStatus();
+ }
+ }
+ }
+
+ public async void GetBackDoorState()
+ {
+ try
+ {
+ logger.Info($"Operate:{Operate}");
+ if (Operate)
+ {
+ byte[] result = await BackDoorState();
+
+ int[] r = result.Select(it => Convert.ToInt32(it)).ToArray();
+ int[] lockStates = CheckStorageStatus(r.Skip(3).Take(2).ToArray());
+ int[] lightStates = CheckStorageStatus(r.Skip(5).Take(2).ToArray());
+ logger.Info($"GetBackDoorState,lockStates:{string.Join(",", lockStates)},lightStates:{string.Join(",", lightStates)},_storageBoxAddr:{_storageBoxAddr},statue{statue}");
+
+ // 锁处于关闭状态
+ if (lockStates[_storageBoxAddr - 1] == 0)
+ {
+ // 锁还未打开过
+ if (statue == 0)
+ {
+ // 指示灯不闪烁了,说明规定时间内没有开锁,需要给前台提示
+ if (lightStates[_storageBoxAddr - 1] == 0)
+ {
+ // 打开失败
+ logger.Info($"储物箱指示灯不闪烁,使能过期");
+ }
+ else
+ {
+ // 灯在闪烁继续监听状态
+ GetBackDoorState();
+ }
+ }
+ else if (statue == 1)
+ {
+
+ // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭
+ statue = 2;
+
+ string _WindowName = WindowName;
+ logger.Info($"储物箱关闭");
+ // 重新初始化数据
+ ResetData();
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWERCLOSE,
+ WindowName = _WindowName,
+ });
+ }
+ }
+ // 锁处于打开状态
+ if (lockStates[_storageBoxAddr - 1] == 1)
+ {
+ // 锁还未打开过,说明打开成功了
+ if (statue == 0)
+ {
+ statue = 1;
+ // 告诉前台打开成功
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.DRAWEROPEN,
+ WindowName = WindowName,
+ });
+ logger.Info($"储物箱打开成功");
+ }
+ // 灯在闪烁继续监听状态
+ GetBackDoorState();
+ }
+ }
+
+
+ }
+ catch (Exception ex)
+ {
+ logger.Info($"GetBackDoorState异常{ex.Message}");
+ // 重新初始化数据
+ ResetData();
+ }
+ }
+
+
+ private readonly IEventAggregator _eventAggregator;
+
+ public PortUtil(IEventAggregator eventAggregator)
+ {
+ _eventAggregator = eventAggregator;
+ try
+ {
+ string DrawerPortPath = ConfigurationManager.AppSettings["DrawerPortPath"];
+ logger.Info($"打开抽屉串口【{DrawerPortPath}】");
+ drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8);
+ drawerSerial.Open();
+ logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
+ }
+ catch (Exception e)
+ {
+ logger.Error("抽屉串口打开错误" + e.Message);
+ }
+
+ try
+ {
+ string ScanCodePortPath = ConfigurationManager.AppSettings["ScanCodePortPath"];
+ logger.Info($"打开条码枪串口【{ScanCodePortPath}】");
+ scanCodeSerial = new SerialPort(ScanCodePortPath, 9600, Parity.None, 8);
+ scanCodeSerial.DataReceived += (object sender, System.IO.Ports.SerialDataReceivedEventArgs e) =>
+ {
+ string code = scanCodeSerial.ReadExisting();
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.CODESCAN,
+ Code = code,
+ });
+ };
+ scanCodeSerial.Open();
+ logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
+ }
+ catch (Exception e)
+ {
+ logger.Error("条码枪串口打开错误" + e.Message);
+ }
+ if (_canBusExsit)
+ {
+ try
+ {
+ string CanBusPortPath = ConfigurationManager.AppSettings["CanBusPortPath"];
+ logger.Info($"打开can总线串口【{CanBusPortPath}】");
+ canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8);
+ canBusSerial.Open();
+ logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
+ }
+ catch (Exception e)
+ {
+ logger.Error("can总线串口打开错误" + e.Message);
+ }
+
+ }
+
+ }
+
+
+ private byte[] GetBufferByPort(SerialPort serialPort, int length, int timeout)
+ {
+ byte[] buffer = new byte[length];
+ //try
+ //{
+ int _length = 0;
+ DateTime start = DateTime.Now;
+ DateTime end = DateTime.Now;
+ while (_length != length && end.Subtract(start).TotalMilliseconds < timeout)
+ {
+ _length = serialPort.BytesToRead;
+ end = DateTime.Now;
+ }
+ if (_length != length)
+ {
+ if (_length != 0)
+ {
+ byte[] _buffer = new byte[_length];
+ serialPort.Read(_buffer, 0, _length);
+ logger.Info($"交互超时回复:{Convert.ToHexString(buffer)}");
+ }
+ throw new TimeoutException($"串口【{serialPort.PortName}】交互超时");
+ }
+ serialPort.Read(buffer, 0, length);
+ //}
+ //catch (Exception ex)
+ //{
+ // logger.Error($"GetBufferByPort:{ex.Message}");
+ //}
+ return buffer;
+ }
+ private byte[] GetBufferByPort(SerialPort serialPort, int length, int timeout, string operation)
+ {
+ byte[] buffer = new byte[length];
+ //try
+ //{
+ int _length = 0;
+ DateTime start = DateTime.Now;
+ DateTime end = DateTime.Now;
+ while (_length != length && end.Subtract(start).TotalMilliseconds < timeout)
+ {
+ _length = serialPort.BytesToRead;
+ if (_length == 0&& operation.Equals("开储物箱"))
+ {
+
+ _length = serialPort.BytesToRead;
+ if (_length == 0)
+ {
+ Thread.Sleep(500);
+ byte[] bufferWrite = new byte[] { 0xaa, (byte)(_doorAddr), 0x01, (byte)_storageBoxAddr, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(bufferWrite, 0, 8);
+ logger.Info($"再次发送OpenStorage:{Convert.ToHexString(bufferWrite)};{end}");
+ }
+ }
+ end = DateTime.Now;
+ }
+ if (_length != length)
+ {
+ if (_length != 0)
+ {
+ byte[] _buffer = new byte[_length];
+ serialPort.Read(_buffer, 0, _length);
+ logger.Info($"交互超时回复:{Convert.ToHexString(buffer)},{operation}");
+ }
+ throw new TimeoutException($"串口【{serialPort.PortName}】交互超时,操作为{operation}");
+ }
+ serialPort.Read(buffer, 0, length);
+ //}
+ //catch (Exception ex)
+ //{
+ // logger.Error($"GetBufferByPort:{ex.Message}");
+ //}
+ return buffer;
+ }
+ private Task GetBufferByPort(SerialPort serialPort, int length)
+ {
+
+ return Task.Run(() => GetBufferByPort(serialPort, length, 3000));
+ }
+
+ private Task GetBufferByPort(SerialPort serialPort, int length, string operation)
+ {
+
+ return Task.Run(() => GetBufferByPort(serialPort, length, 3000, operation));
+ }
+
+ public static SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
+ public void SpeakAsync(string textinfo)
+ {
+ speechSynthesizer.SpeakAsync(textinfo);
+ }
+
+
+
+ #region 抽屉串口操作
+ // 打开抽屉
+ public async Task OpenDrawer()
+ {
+ drawerSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, 0x41, (byte)DrawerNo, 0xee };
+ if (_drawerProtocol == 485)
+ {
+ if (DrawerNo > 8)
+ {
+ buffer = new byte[] { 0xaa, 0x21, (byte)(DrawerNo - 8), 0xee };
+ }
+ else
+ {
+ buffer = new byte[] { 0xaa, 0x11, (byte)DrawerNo, 0xee };
+ }
+
+ }
+ logger.Info($"打开抽屉,串口数据:{Convert.ToHexString(buffer)}");
+ drawerSerial.Write(buffer, 0, 4);
+
+ return await GetBufferByPort(drawerSerial, 11);
+ }
+
+ private bool DrawerState(int[] r)
+ {
+ int index = DrawerNo > 8 ? DrawerNo - 7 : DrawerNo + 1;
+ return r[index] == 0;
+ }
+
+ // 查询抽屉状态
+ public async Task CheckDrawerStatus()
+ {
+ drawerSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, 0x42, 0xee };
+ if (_drawerProtocol == 485)
+ {
+ if (DrawerNo > 8)
+ {
+ buffer = new byte[] { 0xaa, 0x22, 0xee };
+ }
+ else
+ {
+ buffer = new byte[] { 0xaa, 0x12, 0xee };
+ }
+
+ }
+
+ logger.Info($"查询抽屉状态,串口数据:{Convert.ToHexString(buffer)}");
+ drawerSerial.Write(buffer, 0, 3);
+
+ return await GetBufferByPort(drawerSerial, 11);
+ }
+ #endregion
+
+ #region can总线串口操作
+ #region 耗材板操作
+ // 后门状态
+ public async Task BackDoorState()
+ {
+
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8);
+
+ }
+ // 打开电控门储物箱(有灯使能)
+ public async Task OpenStorage()
+ {
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x01, (byte)_storageBoxAddr, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ logger.Info($"OpenStorage:{Convert.ToHexString(buffer)}");
+
+
+
+ return await GetBufferByPort(canBusSerial, 8, "开储物箱");
+ }
+ // 关闭电控门储物箱(有灯失能)
+ public void CloseStorage()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(_doorAddr), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 打开普通储物箱(无灯)
+ public void OpenStorageBox()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(_storageBoxAddr), 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 关闭普通储物箱(无灯)
+ public void CloseStorageBox()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(_storageBoxAddr), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+
+ private int[] CheckStorageStatus(int[] data)
+ {
+ int a = data[0];
+ int b = data[1];
+ int[] intA = Decimal2Chunks(a);
+ int[] intB = Decimal2Chunks(b);
+ int[] r = new int[intA.Length + intB.Length];
+ Array.Copy(intA, 0, r, 0, intA.Length);
+ Array.Copy(intB, 0, r, intA.Length, intB.Length);
+ return r;
+ }
+ private int[] Decimal2Chunks(int d)
+ {
+ string s = Convert.ToString(d, 2);
+ int[] chars = new int[8];
+ char[] schar = s.ToCharArray();
+ Array.Reverse(schar);
+ int[] iArray = Array.ConvertAll(schar, c => (int)Char.GetNumericValue(c));
+ int[] addArray = new int[8 - iArray.Length];
+ if (iArray.Length < 8)
+ {
+ for (int i = 0; i < 8 - iArray.Length; i++)
+ {
+ addArray[i] = 0;
+ }
+ chars = iArray.Concat(addArray).ToArray();
+ }
+ else
+ {
+ chars = iArray[0..iArray.Length];
+ }
+ return chars;
+ //List t = s.Split().Select(it => Convert.ToInt32(it)).Reverse().ToList();
+ //while (t.Count < 8)
+ //{
+ // t.Add(0);
+ //}
+ //return t.ToArray();
+ }
+
+ #endregion
+
+ #region 单支操作
+ // 以抽屉为单位获取抽屉内所有库位的药品数量
+ public async Task CheckQuantityByDrawer()
+ {
+ canBusSerial.DiscardInBuffer();
+
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x01, 0x00, 0x00, 0x00, 0x00, 0xee };
+
+ logger.Info($"单支板发送库位数量查询【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 13);
+ }
+ // 获取单个单支板药品数量
+ public async Task CheckQuantityByCol(int DrawerNo, int colNo)
+ {
+ canBusSerial.DiscardInBuffer();
+
+ var channel = Convert.ToInt32((DrawerNo * 10 + colNo).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x08, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8);
+
+ }
+ // 以抽屉为单位有药位置亮灯
+ public void HasLightOnByDrawer()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 以抽屉为单位无药位置亮灯
+ public void NoLightOnByDrawer()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 以抽屉为单位灭灯
+ public void LightOffByDrawer()
+ {
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x06, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 以单支板为单位有药位置亮灯
+ public async Task HasLightOnByCol()
+ {
+
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+
+ var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(20));
+ }
+
+ }
+ // 以单支板为单位无药位置亮灯
+ public async Task NoLightOnByCol()
+ {
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(20));
+ }
+ }
+ // 广播灭灯
+ public void AllLightOff()
+ {
+ byte[] buffer = new byte[] { 0xaa, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ #endregion
+
+ #region 药盒操作
+ // 指定药盒指示灯开启使能开锁
+ public async Task BoxLockLightOn()
+ {
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+
+ var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x03, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(20));
+ }
+ }
+ // 指定药盒指示灯开启失能开锁
+ public async Task BoxLockLightOff()
+ {
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ var channel = Convert.ToInt32((DrawerNo * 10 + ColNos[i]).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(20));
+ }
+ }
+ // 指定药盒状态查询
+ public async Task BoxLockState(int ColNo)
+ {
+ canBusSerial.DiscardInBuffer();
+ var channel = Convert.ToInt32((DrawerNo * 10 + ColNo).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x02, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8);
+
+ }
+ // 以抽屉为单位药盒指示灯开启使能开锁
+ public void BoxLockLightOnByDrawer()
+ {
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x04, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 以抽屉为单位药盒指示灯开启失能开锁
+ public void BoxLockLightOffByDrawer()
+ {
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xaa, (byte)(0xf0 + DrawerNo), 0x05, 0x00, 0x00, 0x00, 0x00, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ #endregion
+
+ private string trim(string text)
+ {
+ //此处使用了转义字符如:\',\",\\,分别表示单引号,双引号,反斜杠
+ char[] TrimChar = { ' ', '-', '\'', '\"', '\\', '(', ')', '(', ')', '①', '②' };
+ return text.Trim(TrimChar);
+ }
+
+ #region 2.4寸汉显屏
+ // 基础数据写入方法
+ public void WriteChannelInfo(int type, string content, int drawerNo, int colNo)
+ {
+ try
+ {
+ logger.Info($"写标签数据:{type}-{content}-{drawerNo}-{colNo}");
+ canBusSerial.DiscardInBuffer();
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ byte[] contentBuf = Encoding.GetEncoding("gb2312").GetBytes(trim(content));
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ if (contentBuf.Length % 2 != 0)
+ {
+ Array.Resize(ref contentBuf, contentBuf.Length + 1);
+ }
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 1, (byte)type, 0, 0, 0, 0xee };
+ logger.Info($"buffer:{Convert.ToHexString(buffer)}");
+ canBusSerial.Write(buffer, 0, 8);
+ //await Task.Delay(20);
+ Thread.Sleep(20);
+ buffer[4] = 1;
+ for (int i = 0; i < contentBuf.Length; i += 2)
+ {
+ buffer[5] = contentBuf[i];
+ buffer[6] = contentBuf[i + 1];
+ canBusSerial.Write(buffer, 0, 8);
+ logger.Info($"buffer:{Convert.ToHexString(buffer)}");
+ //await Task.Delay(20);
+ Thread.Sleep(20);
+ }
+ buffer[4] = 2;
+ buffer[5] = 0;
+ buffer[6] = 0;
+ canBusSerial.Write(buffer, 0, 8);
+ //await Task.Delay(20);
+ Thread.Sleep(20);
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"2.4寸汉显屏异常{ex.Message}"
+ });
+ logger.Info($"2.4寸汉显屏异常:ex:{ex.Message}");
+ }
+ }
+
+ // 清除显示内容
+ public void ClearContent(int drawerNo, int colNo)
+ {
+ canBusSerial.DiscardInBuffer();
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 4, 0, 0, 0, 0, 0xee };
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ // 刷新显示内容
+ public void ShowContent(int drawerNo, int colNo)
+ {
+ try
+ {
+
+ canBusSerial.DiscardInBuffer();
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 2, 0, 0, 0, 0, 0xee };
+ logger.Info($"刷新显示内容buffer:{Convert.ToHexString(buffer)}");
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"刷新显示内容异常{ex.Message}"
+ });
+ logger.Info($"刷新显示内容异常:ex:{ex.Message}");
+ }
+ }
+ // 取药或者加药亮灯
+ public void TakeQuantity(int drawerNo, int colNo, int quantity, int stock)
+ {
+ try
+ {
+ logger.Info($"TakeQuantity{drawerNo}-{colNo},操作数量{quantity},操作后数量{stock}");
+
+ canBusSerial.DiscardInBuffer();
+ //int channel = (drawerNo * 10 + colNo);
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 6, 0, 0, 0, 0, 0xee };
+ buffer[3] = (byte)(quantity >> 8);
+ buffer[4] = (byte)(quantity & 0xff);
+ buffer[5] = (byte)(stock >> 8);
+ buffer[6] = (byte)(stock & 0xff);
+ canBusSerial.Write(buffer, 0, 8);
+
+
+
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message}");
+ }
+ }
+ // 写入数量
+ public void WriteQuantity(int drawerNo, int colNo, int quantity)
+ {
+ try
+ {
+ logger.Info($"写入数量:{drawerNo}-{colNo}-{quantity}");
+ canBusSerial.DiscardInBuffer();
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x21, 0, 0, 0, 0, 0xee };
+ buffer[5] = (byte)(quantity >> 8);
+ buffer[6] = (byte)(quantity & 0xff);
+ logger.Info($"写入数量buffer:{Convert.ToHexString(buffer)}");
+ canBusSerial.Write(buffer, 0, 8);
+ //Task task = GetBufferByPort(canBusSerial, 8);
+ //if (task.Status == TaskStatus.Created)
+ //{
+ // task.Start();
+
+ //}
+ //byte[] bytes = task.Result;
+ //logger.Info($"写入数量返回:" + Convert.ToHexString(bytes));
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.InnerException}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.InnerException}");
+ }
+ }
+ // 写入数量
+ public async void WriteQuantityAsync(int drawerNo, int colNo, int quantity)
+ {
+ try
+ {
+ canBusSerial.DiscardInBuffer();
+ int channel = ((drawerNo > 8 ? (drawerNo - 8) * 2 : (drawerNo * 2 - 1)) - 1) * this.labelCount + 10 + colNo;
+ byte[] buffer = new byte[] { 0xaa, (byte)channel, 0x21, 0, 0, 0, 0, 0xee };
+ buffer[5] = (byte)(quantity >> 8);
+ buffer[6] = (byte)(quantity & 0xff);
+ canBusSerial.Write(buffer, 0, 8);
+ byte[] bufferReturn = await GetBufferByPort(canBusSerial, 8);
+ logger.Info($"写入数量返回:" + Convert.ToHexString(bufferReturn));
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message}");
+ }
+ }
+ public async Task WriteQuantityArray()
+ {
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ WriteQuantity(DrawerNo, ColNos[i], Stocks[i]);
+ await Task.Delay(TimeSpan.FromMilliseconds(20));
+ }
+ }
+
+
+ #endregion
+
+ #region 回收箱操作
+ // 打开回收箱
+ public async Task OpenRecover()
+ {
+ try
+ {
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xAA, 0x9A, 0x04, 0x00, 0x00, 0x00, 0x00, 0xEE };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8, "打开回收箱");
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message}");
+ return null;
+ }
+
+ }
+ // 回收箱状态查询
+ public async Task CheckRecoverStatus()
+ {
+ try
+ {
+
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xAA, 0x9A, 0x03, 0x00, 0x00, 0x00, 0x00, 0xEE };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8);
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message}");
+ return null;
+
+ }
+ }
+ // 回收箱回收数量查询
+ public async Task CheckRecoverQuantity()
+ {
+ try
+ {
+ canBusSerial.DiscardInBuffer();
+ byte[] buffer = new byte[] { 0xAA, 0x9A, (byte)(ColNos[0] > 3 ? 2 : 1), 0x00, 0x00, 0x00, 0x00, 0xEE };
+ canBusSerial.Write(buffer, 0, 8);
+
+ return await GetBufferByPort(canBusSerial, 8);
+
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message}");
+ return null;
+ }
+ }
+ #endregion
+
+ #region 称重操作
+ // 以板子为单位获取抽屉内所有库位的药品数量
+ public async Task CheckQuantityByAddr()
+ {
+
+ canBusSerial.DiscardInBuffer();
+ var channel = Convert.ToInt32((DrawerNo * 10 + 1).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x28, 0x00, 0x00, 0x00, 0x00, 0xee };
+ logger.Info($"称重发送库位数量查询1【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ byte[] result1 = await GetBufferByPort(canBusSerial, 8);
+
+
+ var channel2 = Convert.ToInt32((DrawerNo * 10 + 2).ToString(), 16);
+ byte[] buffer2 = new byte[] { 0xaa, (byte)(channel2), 0x28, 0x00, 0x00, 0x00, 0x00, 0xee };
+ logger.Info($"称重发送库位数量查询2【{Convert.ToHexString(buffer2)}】");
+ canBusSerial.Write(buffer2, 0, 8);
+ byte[] result2 = await GetBufferByPort(canBusSerial, 8);
+
+ byte[] res = new byte[6];
+ Array.Copy(result1, 3, res, 0, 3);
+ Array.Copy(result2, 3, res, 3, 3);
+
+ return res;
+
+ }
+
+ // 以板子为单位获取抽屉内所有库位的药品数量
+ public async Task CheckQuantityByAddr2()
+ {
+
+
+ int[] res = new int[6];
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ canBusSerial.DiscardInBuffer();
+ var index = ColNos[i] > 3 ? 2 : 1;
+ var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
+ var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
+
+ logger.Info($"称重发送库位数量查询1【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ byte[] result = await GetBufferByPort(canBusSerial, 8);
+ logger.Info($"称重发送库位数量查询1返回结果【{Convert.ToHexString(result)}】");
+ byte[] hl = result.Skip(3).Take(2).ToArray();
+ int quantity = BitConverter.ToInt16(hl.Reverse().ToArray(), 0);
+ res[ColNos[i] - 1] = quantity;
+ }
+
+ return res;
+
+ }
+
+ // 指定药盒指示灯开启使能开锁
+ public async Task BoxLockLightOn2()
+ {
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ var index = ColNos[i] > 3 ? 2 : 1;
+ var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
+ var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x03, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
+ logger.Info($"称重发送药盒使能【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(500));
+ }
+ }
+ // 指定药盒指示灯开启失能开锁
+ public async Task BoxLockLightOff2()
+ {
+ canBusSerial.DiscardInBuffer();
+ for (int i = 0; i < ColNos.Length; i++)
+ {
+ var index = ColNos[i] > 3 ? 2 : 1;
+ var lock1 = ColNos[i] % 3 == 0 ? 3 : ColNos[i] % 3;
+ var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x04, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
+ logger.Info($"称重发送药盒失能【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ await Task.Delay(TimeSpan.FromMilliseconds(50));
+ }
+ }
+
+ public void ClearCount(int DrawerNo, int ColNo)
+ {
+ try
+ {
+ canBusSerial.DiscardInBuffer();
+ var index = ColNo > 3 ? 2 : 1;
+ var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
+ var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
+
+ logger.Info($"称重发送清空计数【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message},方法名:ClearCount;参数:{DrawerNo},{ColNo}");
+ }
+
+ }
+
+ public void SetNumCount(int DrawerNo, int ColNo, int Quantity)
+ {
+ try
+ {
+ canBusSerial.DiscardInBuffer();
+ var index = ColNo > 3 ? 2 : 1;
+ var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
+ var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
+ byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
+
+
+ buffer[4] = (byte)(Quantity >> 8);
+ buffer[5] = (byte)(Quantity & 0xff);
+
+
+ logger.Info($"称重发送数量【{Convert.ToHexString(buffer)}】");
+ canBusSerial.Write(buffer, 0, 8);
+ }
+ catch (Exception ex)
+ {
+ _eventAggregator.GetEvent().Publish(new util.DeviceMsg()
+ {
+ EventType = util.EventType.OPENERROR,
+ WindowName = WindowName,
+ Message = $"操作发生异常{ex.Message}"
+ });
+ logger.Info($"操作发生异常:ex:{ex.Message},方法名:SetNumCount;参数:{DrawerNo},{ColNo},{Quantity}");
+ }
+
+ }
+
+ #endregion
+ #endregion
+
+ public int labelCount = Convert.ToInt32(ConfigurationManager.AppSettings["labelCount"]);
+ }
+}
From 134f15941a417051379dc4b21b69a706cc8019aa Mon Sep 17 00:00:00 2001
From: maqiao <625215135@qq.com>
Date: Tue, 25 Jun 2024 13:25:20 +0800
Subject: [PATCH 3/3] gitignore
---
.gitignore | 1 -
1 file changed, 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 3822d4b..92c0c12 100644
--- a/.gitignore
+++ b/.gitignore
@@ -362,4 +362,3 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
/readme.txt
-/DM_Weight/Port/PortUtil.cs