Compare commits
2 Commits
1a0aced391
...
264a4bd0fc
Author | SHA1 | Date | |
---|---|---|---|
|
264a4bd0fc |
|
|
|
4a25695d53 |
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MasaBlazorApp3.DataAccess
|
||||
{
|
||||
public class ChannelStockWidthDrawerInfo<ChannelStock>
|
||||
{
|
||||
//抽屉信息(抽屉号,抽屉类型)
|
||||
public List<Dictionary<int,int>> DrawerInfo { get; set; }
|
||||
|
||||
public List<ChannelStock> ChannelStocks { get; set; } = new List<ChannelStock>();
|
||||
}
|
||||
}
|
|
@ -29,5 +29,7 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
|||
|
||||
//盘点
|
||||
public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
|
||||
//抽屉获取库存数据--药品绑定
|
||||
Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,5 +19,7 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
|||
bool ResetPassword(int id);
|
||||
|
||||
Task<bool> UpdateSign(int id, string sign);
|
||||
|
||||
bool UpdateUserPassword(User user);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,6 +178,39 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
//var EffDate = !stock.drugManuNo.ManuNo.Equals(stock.ManuNo) ? stock.drugManuNo.EffDate : stock.EffDate;
|
||||
var ManuNo = stock.ManuNo;
|
||||
var EffDate = stock.EffDate;
|
||||
if (!DateTime.TryParse(stock.EffDate, out DateTime dEffDate))
|
||||
{
|
||||
//效期转换出错
|
||||
if (stock.ManuNo != null)
|
||||
{
|
||||
string[] idate= stock.EffDate.Split('/');
|
||||
foreach (string iS in idate)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(iS.Replace(" ", "").Trim()))
|
||||
{
|
||||
switch (iS.Replace(" ", "").Trim().Length)
|
||||
{
|
||||
case 4:
|
||||
EffDate = iS.Replace(" ", "").Trim();
|
||||
break;
|
||||
case 2:
|
||||
EffDate += "-" + iS.Replace(" ", "").Trim();
|
||||
break;
|
||||
case 1:
|
||||
EffDate += "-0"+iS.Replace(" ", "").Trim();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EffDate=dEffDate.ToString("yyyy-MM-dd");
|
||||
}
|
||||
|
||||
// 出入库记录
|
||||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||
{
|
||||
|
@ -232,7 +265,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
if (mid > 0 && r > 0 && acid > 0)
|
||||
{
|
||||
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
flag = false;
|
||||
break;
|
||||
|
@ -248,7 +282,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
}
|
||||
return flag;
|
||||
|
||||
} catch (Exception ex)
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error($"抽屉{(type == 1 ? "加药" : "取药")}操作完成保存数据库失败,错误:" + ex.Message);
|
||||
_connection.RollbackTransaction();
|
||||
|
@ -278,10 +313,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
var q = _connection.ChannelStock
|
||||
.Where(cs => cs.Id == Stock.Id)
|
||||
.Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
|
||||
.Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString() ?? String.Empty)
|
||||
.Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().Substring(0, 10) ?? String.Empty)
|
||||
.Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty);
|
||||
|
||||
if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId)) {
|
||||
if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
|
||||
{
|
||||
q = q.Set(cs => cs.DrugId, Stock.Drug?.DrugId);
|
||||
}
|
||||
|
||||
|
@ -452,5 +488,30 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//抽屉获取库存数据--药品绑定
|
||||
public async Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity = 0)
|
||||
{
|
||||
var query = _connection.ChannelStock.AsQueryable()
|
||||
.LoadWith(cs => cs.Drug)
|
||||
.LoadWith(cs => cs.drugManuNo)
|
||||
.LoadWith(cs => cs.Drug.Manus)
|
||||
.Where(cs => cs.DrawerType == 1)
|
||||
.Where(cs => cs.MachineId == _setting.machineId);
|
||||
|
||||
if (DrawerNo > 0)
|
||||
{
|
||||
query = query.Where(cs => cs.DrawerNo == DrawerNo);
|
||||
}
|
||||
int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
|
||||
|
||||
|
||||
List<ChannelStock> channelStocks = await query
|
||||
.OrderBy((cs) => cs.DrawerNo)
|
||||
.ThenBy((cs) => cs.ColNo)
|
||||
.ToListAsync();
|
||||
return new ChannelStockWithDrawerCount<ChannelStock>() { DrawerArray = ints, ChannelStocks = channelStocks };
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -298,6 +298,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
for (var j = 0; j < stocks.Count; j++)
|
||||
{
|
||||
var ChannelStock = stocks[j];
|
||||
if (!DateTime.TryParse(ChannelStock.EffDate, out DateTime dEffDate))
|
||||
{
|
||||
//效期转换出错
|
||||
if (ChannelStock.EffDate != null)
|
||||
{
|
||||
string[] idate = ChannelStock.EffDate.Split('/');
|
||||
foreach (string iS in idate)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(iS.Trim()))
|
||||
{
|
||||
switch (iS.Trim().Length)
|
||||
{
|
||||
case 4:
|
||||
ChannelStock.EffDate = iS.Trim();
|
||||
break;
|
||||
case 2:
|
||||
ChannelStock.EffDate += "-" + iS.Trim();
|
||||
break;
|
||||
case 1:
|
||||
ChannelStock.EffDate += "-0" + iS.Trim();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ChannelStock.EffDate = dEffDate.ToString("yyyy-MM-dd");
|
||||
}
|
||||
// 出库记录
|
||||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||
{
|
||||
|
@ -327,6 +359,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
)
|
||||
.Where(cs => cs.DrugId.Equals(ChannelStock.DrugId))
|
||||
.ToListAsync();
|
||||
|
||||
// 保存账册
|
||||
int acid = _connection.InsertWithInt32Identity(new AccountBook()
|
||||
{
|
||||
|
@ -428,6 +461,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
.Set(cs => cs.EffDate, drugManuNo.EffDate.ToString());
|
||||
}
|
||||
int r = q.Update();
|
||||
if (!DateTime.TryParse(ChannelStock.EffDate, out DateTime dEffDate))
|
||||
{
|
||||
//效期转换出错
|
||||
if (ChannelStock.EffDate != null)
|
||||
{
|
||||
string[] idate = ChannelStock.EffDate.Split('/');
|
||||
foreach (string iS in idate)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(iS.Trim()))
|
||||
{
|
||||
switch (iS.Trim().Length)
|
||||
{
|
||||
case 4:
|
||||
ChannelStock.EffDate = iS.Trim();
|
||||
break;
|
||||
case 2:
|
||||
ChannelStock.EffDate += "-" + iS.Trim();
|
||||
break;
|
||||
case 1:
|
||||
ChannelStock.EffDate += "-0" + iS.Trim();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ChannelStock.EffDate = dEffDate.ToString("yyyy-MM-dd");
|
||||
}
|
||||
// 入库记录
|
||||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||
{
|
||||
|
|
|
@ -231,6 +231,39 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
for (var i = 0; i < datas.Count; i++)
|
||||
{
|
||||
var orderTakeVo = datas[i];
|
||||
var EffDate = orderTakeVo.ChannelStock.EffDate;
|
||||
if (!DateTime.TryParse(orderTakeVo.ChannelStock.EffDate, out DateTime dEffDate))
|
||||
{
|
||||
//效期转换出错
|
||||
if (orderTakeVo.ChannelStock.EffDate != null)
|
||||
{
|
||||
string[] idate = orderTakeVo.ChannelStock.EffDate.Split('/');
|
||||
foreach (string iS in idate)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(iS.Trim()))
|
||||
{
|
||||
switch (iS.Trim().Length)
|
||||
{
|
||||
case 4:
|
||||
EffDate = iS.Trim();
|
||||
break;
|
||||
case 2:
|
||||
EffDate += "-" + iS.Trim();
|
||||
break;
|
||||
case 1:
|
||||
EffDate += "-0" + iS.Trim();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EffDate = dEffDate.ToString("yyyy-MM-dd");
|
||||
}
|
||||
// 出库记录
|
||||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||
{
|
||||
|
@ -239,7 +272,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
ColNo = orderTakeVo.ChannelStock.ColNo,
|
||||
DrugId = orderTakeVo.ChannelStock.DrugId,
|
||||
ManuNo = orderTakeVo.ChannelStock.ManuNo,
|
||||
EffDate = !String.IsNullOrEmpty(orderTakeVo.ChannelStock.EffDate) ? DateTime.ParseExact(orderTakeVo.ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||
OperationTime = DateTime.Now,
|
||||
Type = 2,
|
||||
Quantity = orderTakeVo.GetQuantity,
|
||||
|
@ -266,7 +299,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
MachineId = _setting.machineId,
|
||||
DrugId = orderTakeVo.ChannelStock.DrugId,
|
||||
ManuNo = orderTakeVo.ChannelStock.ManuNo,
|
||||
EffDate = !String.IsNullOrEmpty(orderTakeVo.ChannelStock.EffDate) ? DateTime.ParseExact(orderTakeVo.ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||
OperationTime = DateTime.Now,
|
||||
Type = 2,
|
||||
OutQuantity = orderTakeVo.GetQuantity,
|
||||
|
|
|
@ -107,5 +107,13 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
|||
//}
|
||||
return (await statement.UpdateAsync()) > 0;
|
||||
}
|
||||
//修改密码
|
||||
public bool UpdateUserPassword(User user)
|
||||
{
|
||||
var statement = _connection.User
|
||||
.Where(u => u.Id == user.Id)
|
||||
.Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
|
||||
return statement.Update() > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,12 +32,11 @@ namespace MasaBlazorApp3.Finger
|
|||
// ConnectionMain();
|
||||
}
|
||||
|
||||
public async void ConnectionMain()
|
||||
public async Task<bool> ConnectionMain()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
try
|
||||
return await Task<bool>.Run(() =>
|
||||
{
|
||||
|
||||
bIsConnected = axCZKEM1.Connect_Net(_options.ip, fingerPort);
|
||||
logger.Info($"连接指纹机,IP:{_options.ip},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
|
||||
if (bIsConnected)
|
||||
|
@ -50,12 +49,10 @@ namespace MasaBlazorApp3.Finger
|
|||
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
return bIsConnected;
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
//If your fingerprint(or your card) passes the verification,this event will be triggered
|
||||
|
|
|
@ -30,6 +30,8 @@ namespace MasaBlazorApp3
|
|||
}
|
||||
}
|
||||
|
||||
public bool isInit { get; set; } = false;
|
||||
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
//protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0||!setting.Value.weigh.Contains(i))" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||
|
||||
}
|
||||
</div>
|
||||
|
@ -50,7 +50,14 @@
|
|||
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||
<HeaderTemplate>
|
||||
<RadzenRow JustifyContent="JustifyContent.End">
|
||||
<RadzenButton IsBusy="@(status>0)" BusyText="抽屉已打开。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="开抽屉" Click="@OpenDrawer" />
|
||||
@if (status < 3)
|
||||
{
|
||||
<RadzenButton IsBusy="@(status>0)" BusyText="抽屉已打开。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="开抽屉" Click="@OpenDrawer" />
|
||||
}
|
||||
@if (status > 0 && status <= 3)
|
||||
{
|
||||
<RadzenButton Visible="@CancleIsEnable" Variant="Variant.Flat" Text="取消" Click="@Cancel" Style="width: 120px" />
|
||||
}
|
||||
</RadzenRow>
|
||||
</HeaderTemplate>
|
||||
<Columns>
|
||||
|
@ -64,52 +71,17 @@
|
|||
<RadzenDataGridColumn Title="批次" Property="ManuNo">
|
||||
<Template Context="channel">
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate.ToString().Substring(0,10)</RadzenText>
|
||||
</Template>
|
||||
<EditTemplate Context="channel">
|
||||
|
||||
@if (channel.Quantity == 0 && !String.IsNullOrEmpty(channel.DrugId))
|
||||
{
|
||||
<RadzenDropDown TValue="DrugManuNo" Name="ManuNo" @bind-Value="channel.drugManuNo" Data="@channel.Drug?.Manus" Style="width:100%; display: block;">
|
||||
<Template>
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
|
||||
</Template>
|
||||
<ValueTemplate>
|
||||
<RadzenStack Orientation="Orientation.Horizontal">
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
|
||||
</RadzenStack>
|
||||
</ValueTemplate>
|
||||
</RadzenDropDown>
|
||||
<RadzenRequiredValidator Text="请选择批次" Component="ManuNo" Popup="true" />
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
|
||||
}
|
||||
</EditTemplate>
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn Title="库存" Property="Quantity">
|
||||
<Template Context="cs">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Info" Variant="Variant.Flat" Shade="Shade.Lighter" class="m-1" Text="@cs.Quantity.ToString()" />
|
||||
</Template>
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn MinWidth="100px" Title="加药数量" Property="AddQuantity">
|
||||
<EditTemplate Context="cs">
|
||||
@if (cs.BoardType == 2)
|
||||
{
|
||||
@cs.AddQuantity
|
||||
}
|
||||
else
|
||||
{
|
||||
<RadzenNumeric Min="0" Style="display: block" Name="Quantity" @bind-Value=@cs.AddQuantity />
|
||||
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的添加数量" Component="Quantity" Popup="true" />
|
||||
}
|
||||
</EditTemplate>
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenGridColumn Title="状态" Property="BiaoDingStatus">
|
||||
|
||||
</RadzenGridColumn>
|
||||
</Columns>
|
||||
</RadzenDataGrid>
|
||||
</RadzenStack>
|
||||
|
@ -119,8 +91,9 @@
|
|||
@inject PortUtil PortUtil;
|
||||
@inject NotificationService _message
|
||||
@inject IOptions<DrawerConfig> setting;
|
||||
@inject DialogService dialogService;
|
||||
int status = 0;
|
||||
int drawerNo = 1;
|
||||
int drawerNo = 0;
|
||||
RadzenDataGrid<ChannelStock> grid;
|
||||
private List<ChannelStock>? channels;
|
||||
bool isLoading;
|
||||
|
@ -128,11 +101,12 @@
|
|||
int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
|
||||
int[] BeforeQuantity = new int[9];
|
||||
int[] AfterQuantity = new int[9];
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(DrawerAdd));
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(BiaoDing));
|
||||
|
||||
// 当前操作的库位号列表
|
||||
public List<int> ColNos { get; set; } = new List<int>();
|
||||
int currentCol = 0;
|
||||
//当前操作的库位数据
|
||||
ChannelStock currentChannelStock;
|
||||
bool CompleteIsEnable = true;
|
||||
bool CancleIsEnable = true;
|
||||
|
||||
|
@ -146,7 +120,7 @@
|
|||
{
|
||||
isLoading = true;
|
||||
|
||||
var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo);
|
||||
var result = await channelListDao.GetChannelStockByBiaoDing(drawerNo);
|
||||
DrawerNos = result.DrawerArray;
|
||||
channels = result.ChannelStocks;
|
||||
count = result.ChannelStocks.Count;
|
||||
|
@ -158,7 +132,7 @@
|
|||
{
|
||||
this.status = 1;
|
||||
var promiseUtil = new PromiseUtil<object>();
|
||||
await promiseUtil.taskAsyncLoop(500, null, async (data, next, stop) =>
|
||||
await promiseUtil.taskAsyncLoop(300, null, async (data, next, stop) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -166,13 +140,11 @@
|
|||
{
|
||||
stop();
|
||||
}
|
||||
// 开启抽屉
|
||||
else if (this.status == 1)
|
||||
else
|
||||
{
|
||||
// if(库存》0)
|
||||
// {}
|
||||
|
||||
}
|
||||
if (this.status == 1)
|
||||
{
|
||||
PortUtil.DrawerNo = this.drawerNo;
|
||||
var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
|
||||
if (b)
|
||||
{
|
||||
|
@ -181,79 +153,61 @@
|
|||
PortUtil.Operate = true;
|
||||
next();
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// _message.Notify(
|
||||
// new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
||||
// );
|
||||
// logger.Info($"抽屉打开失败");
|
||||
// RestData();
|
||||
// PortUtil.Operate = false;
|
||||
// stop();
|
||||
// }
|
||||
|
||||
else if (this.status == 2)
|
||||
else
|
||||
{
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo))
|
||||
{
|
||||
//药盒抽屉,开药盒
|
||||
for (int i = 0; i < ColNos.Count; i++)
|
||||
{
|
||||
await PortUtil.OpenBoxByColNo(ColNos[i]);
|
||||
}
|
||||
}
|
||||
// 查询抽屉是否为关闭状态
|
||||
var b2 = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||
// 关闭则改变状态并终止循环
|
||||
if (b2)
|
||||
{
|
||||
PortUtil.SpeakAsync($"加药完成,请,核对,或,录入,正确的,添加数量");
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//关闭抽屉后获取称重稳定数量
|
||||
// await GetWeightQuantity();
|
||||
}
|
||||
this.status = 3;
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"抽屉打开失败");
|
||||
RestData();
|
||||
PortUtil.Operate = false;
|
||||
stop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo))
|
||||
//查询抽屉状态
|
||||
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||
if (!b)
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
|
||||
channels.ForEach(cl =>
|
||||
if (this.status == 2)
|
||||
{
|
||||
cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
|
||||
});
|
||||
//药盒称重抽屉
|
||||
if (currentChannelStock != null && currentChannelStock.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
//打开药盒
|
||||
await PortUtil.OpenBoxByColNo(currentChannelStock.ColNo);
|
||||
this.status = 3;
|
||||
}
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉后查数
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
int afterQuantity = await PortUtil.CheckQuantityForSingle(i);
|
||||
AfterQuantity[i] = afterQuantity;
|
||||
logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
}
|
||||
channels.ForEach(cl =>
|
||||
if (this.status == 3)
|
||||
{
|
||||
cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
|
||||
});
|
||||
this.status = 4;
|
||||
//弹出标定对话框
|
||||
var dialog = await dialogService.OpenAsync<BiaoDingDialog>(
|
||||
$"标定",
|
||||
new Dictionary<string, object>() { { "channelStockInfo",
|
||||
currentChannelStock } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
currentChannelStock = null;
|
||||
//关闭弹窗后将状态置为2以便下次点击药盒进行开药盒操作
|
||||
this.status = 2;
|
||||
}
|
||||
next();
|
||||
}
|
||||
else
|
||||
{
|
||||
//抽屉已关闭
|
||||
stop();
|
||||
this.status = 0;
|
||||
logger.Info($"抽屉关闭");
|
||||
}
|
||||
next(); // continue iteration
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.Info($"抽屉加药发生错误,{e.Message}");
|
||||
logger.Info($"标定药品发生错误,{e.Message}");
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
|
||||
);
|
||||
|
@ -270,19 +224,28 @@
|
|||
{
|
||||
this.status = 0;
|
||||
}
|
||||
void Cancel()
|
||||
{
|
||||
this.status = 0;
|
||||
}
|
||||
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
|
||||
{
|
||||
if (args.Data.BoardType.ToString().Contains("3"))
|
||||
if (this.status == 0)
|
||||
{
|
||||
//是药盒抽屉则点击行,打开对应行的药箱
|
||||
if (!ColNos.Contains(args.Data.ColNo))
|
||||
{
|
||||
ColNos.Add(args.Data.ColNo);
|
||||
}
|
||||
PortUtil.SpeakAsync("请先打开抽屉后再点开药盒");
|
||||
}
|
||||
else
|
||||
{
|
||||
grid.EditRow(args.Data);
|
||||
currentChannelStock = args.Data;
|
||||
if (args.Data.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
PortUtil.SpeakAsync("正在打开药盒");
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// grid.EditRow(args.Data);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,188 @@
|
|||
@using MasaBlazorApp3.Util
|
||||
@using log4net
|
||||
<RadzenStack>
|
||||
|
||||
@* <RadzenTemplateForm Submit="@((int BDQuantity) => { ConfirmOK(BDQuantity); })" Style="width:100%;height:100%"> *@
|
||||
<div class="rz-form-row">
|
||||
<div class="rz-form-input-wrapper">
|
||||
<!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
|
||||
@if (channelStockInfo.Quantity>0)
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">库位库存不为零,请取出药品后点击【清空】按钮,清空完成后输入标定数量并放入对应数量药品并根据下一步提示操作</RadzenText>
|
||||
}
|
||||
else
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">正在清零,清零完成后输入标定数量并放入对应数量药品后点击【标定】按钮</RadzenText>
|
||||
}
|
||||
<RadzenTextBox id="BDQuantity" Name="BDQuantity" Value="10" Style="width:100%" />
|
||||
<RadzenRequiredValidator Component="BDQuantity" Text="请填写标定数量" />
|
||||
</div>
|
||||
</div>
|
||||
@* </RadzenTemplateForm> *@
|
||||
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
|
||||
|
||||
<RadzenButton Click="@Clear" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Disabled="@(channelStockInfo.Quantity<=0)" Text="清空" Style="width: 120px" />
|
||||
|
||||
<RadzenButton Click="ConfirmOK" ButtonStyle="ButtonStyle.Success" IsBusy="@(status==2)" BusyText="正在标定。。。" Variant="Variant.Flat" Text="标定" Disabled=@(this.status<=0||this.status==2) Style="width: 120px" />
|
||||
|
||||
<RadzenButton Click="@CancelClick" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
||||
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
|
||||
@code {
|
||||
@inject Radzen.DialogService dialogService;
|
||||
@inject NotificationService _message
|
||||
@inject PortUtil PortUtil;
|
||||
[Parameter] public ChannelStock channelStockInfo { get; set; }
|
||||
|
||||
PromiseUtil<object> promiseUtil = new PromiseUtil<object>();
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(BiaoDingDialog));
|
||||
|
||||
int BDQuantity = 10;
|
||||
|
||||
int status = 0;
|
||||
int iClear = 0;
|
||||
int iBiaoDing = 0;
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if(channelStockInfo!=null&&channelStockInfo.Quantity<=0)
|
||||
{
|
||||
//库存为零,直接进行清空操作
|
||||
await Clear();
|
||||
}
|
||||
base.OnInitializedAsync();
|
||||
}
|
||||
//清空按钮
|
||||
async Task Clear()
|
||||
{
|
||||
PortUtil.SpeakAsync($"正在清空,请稍等");
|
||||
|
||||
this.status = 1;
|
||||
int i = 0;
|
||||
await promiseUtil.taskAsyncLoop(200, null, async (data, next, stop) =>
|
||||
{
|
||||
i++;
|
||||
if (this.status == 0)
|
||||
{
|
||||
iClear = 0;
|
||||
stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
if (iClear == 0)
|
||||
{
|
||||
logger.Info($"清零操作{i}");
|
||||
//无库存发送计数清零指令
|
||||
await PortUtil.ClearCount(channelStockInfo.DrawerNo, channelStockInfo.ColNo);
|
||||
iClear += 1;
|
||||
next();
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info($"查数操作{i}");
|
||||
//发查数指令
|
||||
PortUtil.DrawerNo = channelStockInfo.DrawerNo;
|
||||
PortUtil.Operate = true;
|
||||
int stock = await PortUtil.CheckQuantityForBiaoDing(channelStockInfo.ColNo);
|
||||
if (stock != 0)
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage
|
||||
{ Severity = NotificationSeverity.Success, Summary = "提示", Detail = "清空操作成功", Duration = 3000 }
|
||||
);
|
||||
|
||||
PortUtil.SpeakAsync("清空完成,请放入10个药品,放好后点击标定按钮");
|
||||
iClear = 0;
|
||||
stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
next();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Info($"清空操作异常");
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
//标定按钮
|
||||
async Task ConfirmOK()
|
||||
{
|
||||
if (BDQuantity > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
status = 2;
|
||||
PortUtil.SpeakAsync("正在标定,请稍等");
|
||||
//提示输入标定数量,发26指令
|
||||
await PortUtil.SetNumCount(channelStockInfo.DrawerNo, channelStockInfo.ColNo, BDQuantity);
|
||||
await Task.Delay(200);
|
||||
int i = 1;
|
||||
await promiseUtil.taskAsyncLoop(200, null, async (data, next, stop) =>
|
||||
{
|
||||
if(status==0)
|
||||
{
|
||||
stop();
|
||||
}
|
||||
if (status == 2)
|
||||
{
|
||||
//查数量
|
||||
int quantity = await PortUtil.CheckQuantityForBiaoDing(channelStockInfo.ColNo);
|
||||
if (quantity == BDQuantity)
|
||||
{
|
||||
//标定完成
|
||||
status = 0;
|
||||
_message.Notify(
|
||||
new NotificationMessage
|
||||
{ Severity = NotificationSeverity.Success, Summary = "提示", Detail = "标定成功", Duration = 3000 }
|
||||
);
|
||||
|
||||
PortUtil.SpeakAsync("标定完成,请取出药品");
|
||||
status = 0;
|
||||
i = 0;
|
||||
stop();
|
||||
// 关闭弹窗
|
||||
dialogService.Close(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
logger.Info($"标定数量不一致{quantity}-{BDQuantity},标定次数{i}");
|
||||
next();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error($"标定异常{ex.Message}");
|
||||
_message.Notify(
|
||||
new NotificationMessage
|
||||
{ Severity = NotificationSeverity.Error, Summary = "提示", Detail = "标定异常", Duration = 3000 }
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage
|
||||
{ Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入标定数量", Duration = 3000 });
|
||||
}
|
||||
}
|
||||
// 取消
|
||||
async Task CancelClick()
|
||||
{
|
||||
status = 0;
|
||||
// 关闭弹窗
|
||||
dialogService.Close(true);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
|
||||
<RadzenStack>
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">确认要@(confirmInfo) 吗?</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">@(confirmInfo)</RadzenText>
|
||||
|
||||
|
||||
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
|
||||
<RadzenButton Click="@ConfirmOK" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="确认" Style="width: 120px" />
|
|
@ -11,8 +11,9 @@
|
|||
</style>
|
||||
<RadzenStack Orientation="Orientation.Horizontal">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
@* <RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px"> *@
|
||||
@if (DrawerNos.Count() > 8)
|
||||
{
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box-16.jpg') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
|
@ -20,8 +21,20 @@
|
|||
|
||||
}
|
||||
</div>
|
||||
@* </RadzenStack> *@
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
<RadzenButton class="col-12" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<RadzenDataGrid @ref="grid"
|
||||
LoadData="@LoadData"
|
||||
|
@ -36,11 +49,11 @@
|
|||
<RadzenRow JustifyContent="JustifyContent.End">
|
||||
@if (status < 3)
|
||||
{
|
||||
<RadzenButton IsBusy="@(status>0)" BusyText="加药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="加药" Click="@OpenDrawer" />
|
||||
<RadzenButton IsBusy="@(status>0)" BusyText="加药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="加药" Click="@OpenDrawer" />
|
||||
}
|
||||
@if (status == 3)
|
||||
{
|
||||
<RadzenButton Visible="@CompleteIsEnable" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="完成" Click="@AddFinish" />
|
||||
<RadzenButton Visible="@CompleteIsEnable" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="完成" Click="@AddFinish" />
|
||||
}
|
||||
@if (status > 0 && status <= 3)
|
||||
{
|
||||
|
@ -59,7 +72,19 @@
|
|||
<RadzenDataGridColumn Title="批次" Property="ManuNo">
|
||||
<Template Context="channel">
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
|
||||
|
||||
@if (channel.drugManuNo != null && channel.drugManuNo.EffDate.ToString().Length > 10)
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.Caption">
|
||||
@channel.drugManuNo.EffDate.ToString().Substring(0, 10)
|
||||
</RadzenText>
|
||||
}
|
||||
else
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.Caption">
|
||||
@channel.drugManuNo?.EffDate
|
||||
</RadzenText>
|
||||
}
|
||||
</Template>
|
||||
<EditTemplate Context="channel">
|
||||
|
||||
|
@ -68,12 +93,30 @@
|
|||
<RadzenDropDown TValue="DrugManuNo" Name="ManuNo" @bind-Value="channel.drugManuNo" Data="@channel.Drug?.Manus" Style="width:100%; display: block;">
|
||||
<Template>
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
|
||||
@if ((context as DrugManuNo).EffDate != null && (context as DrugManuNo).EffDate.ToString().Length > 10)
|
||||
{
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo).EffDate.ToString().Substring(0, 10))</RadzenText>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
|
||||
}
|
||||
</Template>
|
||||
<ValueTemplate>
|
||||
<RadzenStack Orientation="Orientation.Horizontal">
|
||||
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
|
||||
@if ((context as DrugManuNo).EffDate != null && (context as DrugManuNo).EffDate.ToString().Length > 10)
|
||||
{
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo).EffDate.ToString().Substring(0, 10))</RadzenText>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
|
||||
}
|
||||
</RadzenStack>
|
||||
</ValueTemplate>
|
||||
</RadzenDropDown>
|
||||
|
@ -94,7 +137,7 @@
|
|||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn MinWidth="100px" Title="加药数量" Property="AddQuantity">
|
||||
<EditTemplate Context="cs">
|
||||
@if (cs.BoardType == 2)
|
||||
@if (cs.BoardType.ToString().Contains("2") || cs.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
@cs.AddQuantity
|
||||
}
|
||||
|
@ -148,6 +191,7 @@
|
|||
}
|
||||
async Task OpenDrawer()
|
||||
{
|
||||
PortUtil.DrawerNo = this.drawerNo;
|
||||
this.status = 1;
|
||||
// 根据抽屉类型来决定打开前是否需要查询数量
|
||||
var promiseUtil = new PromiseUtil<object>();
|
||||
|
@ -170,16 +214,16 @@
|
|||
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
}
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉前先查数
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
int beforeQuantity = await PortUtil.CheckQuantityForSingle(i);
|
||||
BeforeQuantity[i] = beforeQuantity;
|
||||
logger.Info($"BeforeQuantity:{i}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
}
|
||||
}
|
||||
// if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
// {
|
||||
// //开抽屉前先查数
|
||||
// for (int i = 0; i < 9; i++)
|
||||
// {
|
||||
// int beforeQuantity = await PortUtil.CheckQuantityForSingle(i + 1);
|
||||
// BeforeQuantity[i] = beforeQuantity;
|
||||
// logger.Info($"BeforeQuantity:{i++}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
// }
|
||||
// }
|
||||
|
||||
var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
|
||||
if (b)
|
||||
|
@ -204,14 +248,6 @@
|
|||
// 检测状态
|
||||
else if (this.status == 2)
|
||||
{
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo))
|
||||
{
|
||||
//药盒抽屉,开药盒
|
||||
for(int i=0;i< ColNos.Count;i++)
|
||||
{
|
||||
await PortUtil.OpenBoxByColNo(ColNos[i]);
|
||||
}
|
||||
}
|
||||
// 查询抽屉是否为关闭状态
|
||||
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||
// 关闭则改变状态并终止循环
|
||||
|
@ -230,6 +266,29 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
//药盒抽屉,开药盒
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo))
|
||||
{
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
if (currentCol > 0)
|
||||
{
|
||||
//开药盒前先查数
|
||||
int beforeQuantity = await PortUtil.CheckQuantityForSingle(currentCol);
|
||||
BeforeQuantity[currentCol - 1] = beforeQuantity;
|
||||
logger.Info($"BeforeQuantity:{currentCol}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
await Task.Delay(200);
|
||||
ColNos.Add(currentCol);
|
||||
}
|
||||
}
|
||||
//药盒抽屉,开药盒
|
||||
if (currentCol > 0)
|
||||
{
|
||||
await PortUtil.OpenBoxByColNo(currentCol);
|
||||
}
|
||||
currentCol = 0;
|
||||
}
|
||||
|
||||
if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
|
||||
|
@ -245,16 +304,17 @@
|
|||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉后查数
|
||||
for (int i = 0; i < 9; i++)
|
||||
for (int i = 0; i < ColNos.Count; i++)
|
||||
{
|
||||
int afterQuantity = await PortUtil.CheckQuantityForSingle(i);
|
||||
AfterQuantity[i] = afterQuantity;
|
||||
logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]);
|
||||
AfterQuantity[ColNos[i]-1] = afterQuantity;
|
||||
logger.Info($"AfterQuantity:{ColNos[i]}-{string.Join(",", AfterQuantity)}数量{string.Join(", ", BeforeQuantity)}");
|
||||
}
|
||||
channels.ForEach(cl =>
|
||||
channels.Where(cl => ColNos.Contains(cl.ColNo)).ToList().ForEach(cl =>
|
||||
{
|
||||
cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
|
||||
});
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
next(); // continue iteration
|
||||
}
|
||||
|
@ -282,6 +342,8 @@
|
|||
this.status = 0;
|
||||
this.BeforeQuantity = new int[9];
|
||||
this.AfterQuantity = new int[9];
|
||||
currentCol = 0;
|
||||
ColNos.Clear();
|
||||
}
|
||||
//关闭抽屉后获取称重稳定数量
|
||||
public async Task GetWeightQuantity()
|
||||
|
@ -311,6 +373,10 @@
|
|||
{
|
||||
cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
|
||||
});
|
||||
CompleteIsEnable = true;
|
||||
CancleIsEnable = true;
|
||||
logger.Info("对比成功停止循环");
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -330,6 +396,7 @@
|
|||
}
|
||||
CompleteIsEnable = false;
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst = ColNos;
|
||||
int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
|
||||
AfterQuantity = quantity;
|
||||
int[] Quantitys = new int[BeforeQuantity.Length];
|
||||
|
@ -377,14 +444,15 @@
|
|||
else
|
||||
{
|
||||
// 判断是否为标签抽屉
|
||||
if (setting.Value.label.Contains(this.drawerNo))
|
||||
if (setting.Value != null && setting.Value.label != null && setting.Value.label.Contains(this.drawerNo))
|
||||
{
|
||||
//写标签数量
|
||||
channels.ForEach(async it =>
|
||||
channels.Where(it => it.AddQuantity > 0).ToList().ForEach(async it =>
|
||||
{
|
||||
await PortUtil.WriteQuantityMethod(it.Quantity + it.AddQuantity, it.DrawerNo, it.ColNo);
|
||||
});
|
||||
}
|
||||
ColNos.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -396,7 +464,7 @@
|
|||
|
||||
void Cancel()
|
||||
{
|
||||
this.status = 0;
|
||||
RestData();
|
||||
}
|
||||
|
||||
void SelectDrawer(int drawerNo)
|
||||
|
@ -407,19 +475,21 @@
|
|||
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
|
||||
{
|
||||
if (args.Data.BoardType.ToString().Contains("3"))
|
||||
// if (args.Data.BoardType.ToString().Contains("3"))
|
||||
// {
|
||||
// //是药盒抽屉则点击行,打开对应行的药箱
|
||||
// if (!ColNos.Contains(args.Data.ColNo))
|
||||
// {
|
||||
// ColNos.Add(args.Data.ColNo);
|
||||
// }
|
||||
// }
|
||||
if (setting.Value.box.Contains(args.Data.DrawerNo) && status != 2)
|
||||
{
|
||||
//是药盒抽屉则点击行,打开对应行的药箱
|
||||
if (!ColNos.Contains(args.Data.ColNo))
|
||||
{
|
||||
ColNos.Add(args.Data.ColNo);
|
||||
PortUtil.SpeakAsync("请先点取药按钮打开抽屉");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
currentCol = args.Data.ColNo;
|
||||
grid.EditRow(args.Data);
|
||||
}
|
||||
}
|
||||
private IDisposable? registration;
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
|
|
|
@ -10,19 +10,10 @@
|
|||
}
|
||||
</style>
|
||||
<RadzenStack Orientation="Orientation.Horizontal">
|
||||
@* <div class="row justify-content-center align-items-center">
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png') no-repeat; background-size: 100% 100%; width: 240px; height:650px">
|
||||
<RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||
}
|
||||
</RadzenStack>
|
||||
</div>
|
||||
</div> *@
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
@* <RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px"> *@
|
||||
@if (DrawerNos.Count() > 8)
|
||||
{
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box-16.jpg') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
|
@ -30,8 +21,20 @@
|
|||
|
||||
}
|
||||
</div>
|
||||
@* </RadzenStack> *@
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png') no-repeat; background-size: 100% 100%; width: 380px; height:650px">
|
||||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||
@foreach (int i in DrawerNos)
|
||||
{
|
||||
<RadzenButton class="col-12" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<RadzenDataGrid @ref="grid"
|
||||
LoadData="@LoadData"
|
||||
|
@ -79,7 +82,7 @@
|
|||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn MinWidth="120px" Title="取药数量" Property="TakeQuantity">
|
||||
<EditTemplate Context="channel">
|
||||
@if (channel.BoardType == 2)
|
||||
@if (channel.BoardType.ToString().Contains("2") || channel.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
@channel.TakeQuantity
|
||||
}
|
||||
|
@ -112,6 +115,7 @@
|
|||
|
||||
// 当前操作的库位号列表
|
||||
public List<int> ColNos { get; set; } = new List<int>();
|
||||
int currentCol = 0;
|
||||
bool CompleteIsEnable = true;
|
||||
bool CancleIsEnable = true;
|
||||
|
||||
|
@ -122,7 +126,7 @@
|
|||
isLoading = true;
|
||||
|
||||
// var result = await channelListDao.GetChannelStockByDrawerNo(drawerNo, 1);
|
||||
var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo);
|
||||
var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo, 1);
|
||||
DrawerNos = result.DrawerArray;
|
||||
// Update the Data property
|
||||
channels = result.ChannelStocks;
|
||||
|
@ -134,6 +138,7 @@
|
|||
}
|
||||
async Task OpenDrawer()
|
||||
{
|
||||
PortUtil.DrawerNo = this.drawerNo;
|
||||
this.status = 1;
|
||||
// 根据抽屉类型来决定打开前是否需要查询数量
|
||||
var promiseUtil = new PromiseUtil<object>();
|
||||
|
@ -155,17 +160,6 @@
|
|||
BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
}
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh!=null&&setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉前先查数
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
int beforeQuantity = await PortUtil.CheckQuantityForSingle(i);
|
||||
BeforeQuantity[i] = beforeQuantity;
|
||||
logger.Info($"BeforeQuantity:{i}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
}
|
||||
}
|
||||
|
||||
var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
|
||||
if (b)
|
||||
|
@ -189,15 +183,6 @@
|
|||
// 检测状态
|
||||
else if (this.status == 2)
|
||||
{
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo))
|
||||
{
|
||||
//药盒抽屉,开药盒
|
||||
for (int i = 0; i < ColNos.Count; i++)
|
||||
{
|
||||
await PortUtil.OpenBoxByColNo(ColNos[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询抽屉是否为关闭状态
|
||||
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||
// 关闭则改变状态并终止循环
|
||||
|
@ -217,32 +202,63 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo))
|
||||
{
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉前先查数
|
||||
if (currentCol > 0)
|
||||
{
|
||||
int beforeQuantity = await PortUtil.CheckQuantityForSingle(currentCol);
|
||||
BeforeQuantity[currentCol - 1] = beforeQuantity;
|
||||
logger.Info($"BeforeQuantity:{currentCol}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
await Task.Delay(200);
|
||||
ColNos.Add(currentCol);
|
||||
}
|
||||
}
|
||||
//药盒抽屉,开药盒
|
||||
if (currentCol > 0)
|
||||
{
|
||||
await PortUtil.OpenBoxByColNo(currentCol);
|
||||
}
|
||||
currentCol = 0;
|
||||
}
|
||||
|
||||
|
||||
if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
|
||||
if (!BeforeQuantity.SequenceEqual(AfterQuantity))
|
||||
{
|
||||
channels.ForEach(cl =>
|
||||
{
|
||||
cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
|
||||
});
|
||||
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
// 判断是否为称重抽屉
|
||||
if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
|
||||
{
|
||||
//开抽屉后查数
|
||||
for (int i = 0; i < 9; i++)
|
||||
for (int i = 0; i < ColNos.Count; i++)
|
||||
{
|
||||
int afterQuantity = await PortUtil.CheckQuantityForSingle(i);
|
||||
AfterQuantity[i] = afterQuantity;
|
||||
logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
|
||||
int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]);
|
||||
AfterQuantity[ColNos[i]-1] = afterQuantity;
|
||||
logger.Info($"AfterQuantity:{ColNos[i]}-{afterQuantity}数量{string.Join(",", AfterQuantity)}");
|
||||
}
|
||||
channels.ForEach(cl =>
|
||||
if (!BeforeQuantity.SequenceEqual(AfterQuantity))
|
||||
{
|
||||
cl.TakeQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
|
||||
channels.Where(cl => ColNos.Contains(cl.ColNo)).ToList().ForEach(cl =>
|
||||
{
|
||||
cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
|
||||
});
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
next(); // continue iteration
|
||||
}
|
||||
|
@ -300,6 +316,7 @@
|
|||
{
|
||||
cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
|
||||
});
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -320,6 +337,7 @@
|
|||
}
|
||||
CompleteIsEnable = false;
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst = ColNos;
|
||||
int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
|
||||
AfterQuantity = quantity;
|
||||
int[] Quantitys = new int[BeforeQuantity.Length];
|
||||
|
@ -329,10 +347,14 @@
|
|||
}
|
||||
finallyQuantity.Add(Quantitys);
|
||||
logger.Info($"Quantity{string.Join(",", Quantitys)}");
|
||||
if (!BeforeQuantity.SequenceEqual(AfterQuantity))
|
||||
{
|
||||
channels.ForEach(cl =>
|
||||
{
|
||||
cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
|
||||
});
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
@ -357,8 +379,10 @@
|
|||
this.status = 0;
|
||||
this.BeforeQuantity = new int[9];
|
||||
this.AfterQuantity = new int[9];
|
||||
ColNos.Clear();
|
||||
currentCol = 0;
|
||||
|
||||
InvokeAsync(StateHasChanged);
|
||||
// InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
async Task TakeFinish()
|
||||
|
@ -376,12 +400,12 @@
|
|||
else
|
||||
{
|
||||
// 判断是否为标签抽屉
|
||||
if (setting.Value.label.Contains(this.drawerNo))
|
||||
if (setting.Value.label != null && setting.Value.label.Contains(this.drawerNo))
|
||||
{
|
||||
//写标签数量
|
||||
channels.ForEach(async it =>
|
||||
channels.Where(it => it.TakeQuantity > 0).ToList().ForEach(async it =>
|
||||
{
|
||||
await PortUtil.WriteQuantityMethod(it.Quantity + it.AddQuantity, it.DrawerNo, it.ColNo);
|
||||
await PortUtil.WriteQuantityMethod(it.Quantity - it.TakeQuantity, it.DrawerNo, it.ColNo);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -394,31 +418,36 @@
|
|||
|
||||
void Cancel()
|
||||
{
|
||||
this.status = 0;
|
||||
RestData();
|
||||
}
|
||||
|
||||
void SelectDrawer(int drawerNo)
|
||||
{
|
||||
this.drawerNo = drawerNo;
|
||||
InvokeAsync(StateHasChanged);
|
||||
grid.Reload();
|
||||
}
|
||||
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
|
||||
{
|
||||
if (args.Data.BoardType.ToString().Contains("3"))
|
||||
// if (args.Data.BoardType.ToString().Contains("3"))
|
||||
// {
|
||||
// //是药盒抽屉则点击行,打开对应行的药箱
|
||||
// if (!ColNos.Contains(args.Data.ColNo))
|
||||
// {
|
||||
// ColNos.Add(args.Data.ColNo);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// grid.EditRow(args.Data);
|
||||
// }
|
||||
if (setting.Value.box.Contains(args.Data.DrawerNo) && status != 2)
|
||||
{
|
||||
//是药盒抽屉则点击行,打开对应行的药箱
|
||||
if (!ColNos.Contains(args.Data.ColNo))
|
||||
{
|
||||
ColNos.Add(args.Data.ColNo);
|
||||
PortUtil.SpeakAsync("请先点取药按钮打开抽屉");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
currentCol = args.Data.ColNo;
|
||||
grid.EditRow(args.Data);
|
||||
}
|
||||
}
|
||||
private IDisposable? registration;
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
|
|
|
@ -248,9 +248,9 @@
|
|||
if(!string.IsNullOrEmpty(drugInfo.DrugId))
|
||||
{
|
||||
//弹出确认提示框
|
||||
var b = await dialogService.OpenAsync<ConfirmDialo>(
|
||||
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"删除确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", "删除药品:"+drugInfo.DrugName } },
|
||||
new Dictionary<string, object>() { { "confirmInfo", "确认要删除药品:"+drugInfo.DrugName+"吗?" } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
if(b)
|
||||
{
|
||||
|
@ -301,9 +301,9 @@
|
|||
if (SelectedDrugs.FirstOrDefault().Manus.Contains(drugManuNo))
|
||||
{
|
||||
//弹出确认提示框
|
||||
var b = await dialogService.OpenAsync<ConfirmDialo>(
|
||||
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"确认删除",
|
||||
new Dictionary<string, object>() { { "confirmInfo", "删除批次:"+drugManuNo.ManuNo } },
|
||||
new Dictionary<string, object>() { { "confirmInfo", "确认要删除批次:"+drugManuNo.ManuNo+"吗?" } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }
|
||||
);
|
||||
if(b)
|
||||
|
|
|
@ -0,0 +1,130 @@
|
|||
@page "/EditPasswordDialog"
|
||||
@using MasaBlazorApp3.Pojo.Config;
|
||||
@using MasaBlazorApp3.Pojo.Vo;
|
||||
@using MasaBlazorApp3.Util;
|
||||
@using Microsoft.Extensions.Options;
|
||||
@using Newtonsoft.Json;
|
||||
@using log4net;
|
||||
<style>
|
||||
.rz-dialog-content {
|
||||
padding: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
|
||||
<RadzenColumn Size="12" SizeMD="5">
|
||||
<RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
|
||||
@if (userI == 1)
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">操作人 @globalStateService.Operator?.NickName 正在修改密码</RadzenText>
|
||||
}
|
||||
else if (userI == 2)
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">复核人 @globalStateService.Reviewer?.NickName 正在修改密码</RadzenText>
|
||||
}
|
||||
</RadzenCard>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="12" SizeMD="7">
|
||||
<RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
|
||||
@* <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
|
||||
密码修改
|
||||
</RadzenText> *@
|
||||
<RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label" for="oldPassword">原密码</label>
|
||||
<div class="rz-form-input-wrapper">
|
||||
<RadzenPassword id="oldPassword" Name="oldPassword" @bind-Value="@loginModel.OldPassword" Style="width:100%" />
|
||||
<RadzenRequiredValidator Component="oldPassword" Text="请填写原密码" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label" for="password">新密码</label>
|
||||
<div class="rz-form-input-wrapper">
|
||||
<RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
|
||||
<RadzenRequiredValidator Component="Password" Text="请填新密码" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label"></label>
|
||||
<div class="rz-form-input-wrapper rz-login-buttons">
|
||||
<RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="确定" />
|
||||
<RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenCard>
|
||||
</RadzenColumn>
|
||||
|
||||
</RadzenRow>
|
||||
|
||||
@code {
|
||||
@inject NotificationService _message
|
||||
@inject GlobalStateService globalStateService;
|
||||
@inject IUserDao userDao;
|
||||
@inject Radzen.DialogService dialogService;
|
||||
|
||||
private Pojo.User loginModel = new();
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
|
||||
[Parameter] public int userI { get; set; }
|
||||
|
||||
|
||||
private void Submit(Pojo.User user)
|
||||
{
|
||||
if (userI == 1)
|
||||
{
|
||||
user.Username = globalStateService.Operator.Username;
|
||||
}
|
||||
else if (userI == 2)
|
||||
{
|
||||
user.Username = globalStateService.Reviewer.Username;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
Pojo.User u = userDao.GetByUsername(loginModel.Username);
|
||||
if (u != null)
|
||||
{
|
||||
if (Util.MD5.GetMD5Hash(loginModel.OldPassword).ToLower().Equals(u.Password))
|
||||
{
|
||||
u.Password = loginModel.Password;
|
||||
bool iRet=userDao.UpdateUserPassword(u);
|
||||
if (iRet)
|
||||
{
|
||||
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"修改完成,退出后登录请使用新密码", Duration = 4000 });
|
||||
logger.Error($"{loginModel.Username}修改密码失败,数据{JsonConvert.SerializeObject(u)}");
|
||||
// 关闭弹窗
|
||||
dialogService.Close(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"修改失败", Duration = 4000 });
|
||||
logger.Error($"{loginModel.Username}修改密码失败,数据{JsonConvert.SerializeObject(u)}");
|
||||
// 关闭弹窗
|
||||
dialogService.Close(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"原密码错误", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"用户【{u.Username}】修改密码,原密码输入错误");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"修改密码没有用户:【{loginModel.Username}】");
|
||||
}
|
||||
}
|
||||
private void Exit()
|
||||
{
|
||||
dialogService.Close(false);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
@page "/home"
|
||||
@page "/"
|
||||
@using MasaBlazorApp3.Util
|
||||
@using log4net
|
||||
@layout EmptyLayout
|
||||
|
@ -46,11 +46,16 @@
|
|||
<RadzenColumn Size="8">
|
||||
<RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
||||
<RadzenColumn Size="3">
|
||||
|
||||
<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@Operator.NickName</RadzenText>
|
||||
@if (Reviewer != null)
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@Reviewer.NickName</RadzenText>
|
||||
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
||||
<RadzenText onclick="@(()=>{EditPassword(1);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
||||
|
||||
}
|
||||
@if (globalStateService.Reviewer != null)
|
||||
{
|
||||
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
||||
<RadzenText onclick="@(()=>{EditPassword(2);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
||||
}
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="3">
|
||||
|
@ -65,51 +70,66 @@
|
|||
<RadzenStack Style="height: 100%;width:41%" Gap="20">
|
||||
<RadzenStack class="home-menu rz-background-color-info-lighter rz-ripple" JustifyContent="JustifyContent.Center" Style="height: 50%" @onclick="@(() => jump2Page(1))">
|
||||
<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">出库</RadzenText>
|
||||
@if (!Operator.role.permissionIds.Any(id => id - 10 < 10))
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 10 < 10))
|
||||
{
|
||||
<div class="mask">
|
||||
<RadzenImage Path="images/no_auth.png" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</RadzenStack>
|
||||
<RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 50%">
|
||||
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
|
||||
@if (!Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10))
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10))
|
||||
{
|
||||
<div class="mask">
|
||||
<RadzenImage Path="images/no_auth.png" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
<RadzenStack Style="height: 100%;width:59%" Gap="20">
|
||||
<RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
|
||||
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">归还</RadzenText>
|
||||
@if (!Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10))
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10))
|
||||
{
|
||||
<div class="mask">
|
||||
<RadzenImage Path="images/no_auth.png" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</RadzenStack>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" Style="height: 57%;width:100%">
|
||||
<RadzenStack class="home-menu rz-background-color-primary rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(4))" Style="height: 100%;width:50%">
|
||||
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">库存管理</RadzenText>
|
||||
@if (!Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10))
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10))
|
||||
{
|
||||
<div class="mask">
|
||||
<RadzenImage Path="images/no_auth.png" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</RadzenStack>
|
||||
<RadzenStack class="home-menu rz-background-color-success-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(5))" Style="height: 100%;width:50%">
|
||||
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">系统设置</RadzenText>
|
||||
@if (!Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10))
|
||||
@if (globalStateService.Operator != null)
|
||||
{
|
||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10))
|
||||
{
|
||||
<div class="mask">
|
||||
<RadzenImage Path="images/no_auth.png" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</RadzenStack>
|
||||
|
||||
</RadzenStack>
|
||||
|
@ -119,12 +139,12 @@
|
|||
|
||||
|
||||
@code {
|
||||
@inject Radzen.DialogService dialogService;
|
||||
@inject NotificationService _message
|
||||
@inject NavigationManager na;
|
||||
@inject TooltipService tooltipService
|
||||
private List<Premission> userPremissions { get; set; } = new();
|
||||
@inject GlobalStateService globalStateService;
|
||||
Pojo.User Operator;
|
||||
Pojo.User Reviewer;
|
||||
|
||||
Timer timer;
|
||||
@inject PortUtil _portUtil;
|
||||
|
@ -134,11 +154,6 @@
|
|||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
|
||||
|
||||
Operator = globalStateService.Operator;
|
||||
Reviewer = globalStateService.Reviewer;
|
||||
|
||||
// timer = new Timer(state =>
|
||||
// {
|
||||
// var now = DateTime.Now;
|
||||
|
@ -167,10 +182,9 @@
|
|||
// 无人操作鼠标键盘
|
||||
if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > setting.Value.autoOutLog && CheckComputerFreeState.GetLastInputTime() > setting.Value.autoOutLog)
|
||||
{
|
||||
logger.Info($"设备{setting.Value.autoOutLog}内无人操作,用户【{Operator?.NickName}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoOutLog:{setting.Value.autoOutLog}");
|
||||
logger.Info($"设备{setting.Value.autoOutLog}内无人操作,用户【{globalStateService.Operator?.NickName}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoOutLog:{setting.Value.autoOutLog}");
|
||||
globalStateService.Operator = null;
|
||||
globalStateService.Reviewer = null;
|
||||
na.NavigateTo("");
|
||||
stop();
|
||||
}
|
||||
else
|
||||
|
@ -199,22 +213,87 @@
|
|||
timer?.Dispose();
|
||||
}
|
||||
|
||||
void jump2Page(int parentId)
|
||||
async void init()
|
||||
{
|
||||
List<int> childrenIds = Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList();
|
||||
var b = await dialogService.OpenAsync<InitPage>(
|
||||
$"调拨入库详情",
|
||||
new Dictionary<string, object>() { },
|
||||
new DialogOptions() { ShowTitle = false, Style = "min-height:auto;min-width:auto;width:auto", CloseDialogOnEsc = false, Resizable = true, Draggable = true, ShowClose = false }
|
||||
);
|
||||
|
||||
}
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
base.OnAfterRender(firstRender);
|
||||
|
||||
if (firstRender && !globalStateService.isInit)
|
||||
{
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async void jump2Page(int parentId)
|
||||
{
|
||||
bool a = true;
|
||||
if ((setting.Value.loginMode == 2 && (globalStateService.Operator == null || globalStateService.Reviewer == null))
|
||||
|| setting.Value.loginMode == 1 && globalStateService.Operator == null)
|
||||
{
|
||||
a = await dialogService.OpenAsync<LoginDialog>(
|
||||
"",
|
||||
null,
|
||||
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
|
||||
|
||||
}
|
||||
// bool a = globalStateService.Operator != null;
|
||||
// if (!a)
|
||||
// {
|
||||
// a = await dialogService.OpenAsync<LoginDialog>(
|
||||
// "",
|
||||
// null,
|
||||
// new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
|
||||
// }
|
||||
if (a)
|
||||
{
|
||||
List<int> childrenIds = globalStateService.Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList();
|
||||
if (childrenIds.Count > 0)
|
||||
{
|
||||
currentPage = false;
|
||||
childrenIds.Sort();
|
||||
int minId = childrenIds[0];
|
||||
string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath;
|
||||
na.NavigateTo(path);
|
||||
currentPage = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"没有权限不能访问", Duration = 3000 }
|
||||
);
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
void logout()
|
||||
{
|
||||
if (globalStateService.Operator != null)
|
||||
{
|
||||
globalStateService.Operator = null;
|
||||
globalStateService.Reviewer = null;
|
||||
na.NavigateTo("");
|
||||
}
|
||||
else
|
||||
{
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
//修改密码
|
||||
async void EditPassword(int i)
|
||||
{
|
||||
//修改复核人
|
||||
await dialogService.OpenAsync<EditPasswordDialog>(
|
||||
"",
|
||||
new Dictionary<string, object>() { { "userI", i } },
|
||||
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@page "/"
|
||||
@page "/login"
|
||||
@layout EmptyLayout
|
||||
|
||||
@using System.ComponentModel;
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
@page "/init"
|
||||
@using MasaBlazorApp3.Pojo.Config;
|
||||
@using MasaBlazorApp3.Pojo.Vo;
|
||||
@using MasaBlazorApp3.Util;
|
||||
@using Microsoft.Extensions.Options;
|
||||
@using Newtonsoft.Json;
|
||||
@using log4net;
|
||||
|
||||
<RadzenStack AlignItems="AlignItems.Center" Gap="2rem" class="rz-p-12">
|
||||
<RadzenImage Path="images/community.svg" Style="width: 200px;" AlternateText="community" />
|
||||
<RadzenText TextStyle="TextStyle.H6">加载程序必要连接中,请稍等。。。</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.H6">@msg</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.H6">@errMsg</RadzenText>
|
||||
</RadzenStack>
|
||||
|
||||
@code {
|
||||
@inject Radzen.DialogService dialogService;
|
||||
@inject IOptions<DrawerConfig> setting;
|
||||
@inject NotificationService _message;
|
||||
@inject PortUtil PortUtil;
|
||||
@inject FingerprintUtil FingerprintUtil;
|
||||
@inject GlobalStateService globalStateService;
|
||||
|
||||
|
||||
string msg;
|
||||
string errMsg;
|
||||
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(InitPage));
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
||||
base.OnInitializedAsync();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
base.OnAfterRender(firstRender);
|
||||
|
||||
if (firstRender)
|
||||
{
|
||||
await Task.Delay(15);
|
||||
msg = "开始连接指纹模块";
|
||||
InvokeAsync(StateHasChanged);
|
||||
try
|
||||
{
|
||||
await FingerprintUtil.ConnectionMain();
|
||||
msg = "指纹模块连接成功";
|
||||
InvokeAsync(StateHasChanged);
|
||||
} catch (Exception e)
|
||||
{
|
||||
msg = "指纹模块连接失败";
|
||||
errMsg += "【指纹模块连接失败】";
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
await Task.Delay(500);
|
||||
msg = "开始连接抽屉串口";
|
||||
InvokeAsync(StateHasChanged);
|
||||
try
|
||||
{
|
||||
PortUtil.drawerSerial.Open();
|
||||
logger.Info($"抽屉串口打开结果【{PortUtil.drawerSerial.IsOpen}】");
|
||||
msg = "抽屉串口连接成功";
|
||||
InvokeAsync(StateHasChanged);
|
||||
} catch (Exception e)
|
||||
{
|
||||
msg = "抽屉串口连接失败";
|
||||
errMsg += "【抽屉串口连接失败】";
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
await Task.Delay(500);
|
||||
msg = "开始连接CanBus模块";
|
||||
InvokeAsync(StateHasChanged);
|
||||
try
|
||||
{
|
||||
PortUtil.canBusSerial.Open();
|
||||
logger.Info($"CanBus模块打开结果【{PortUtil.canBusSerial.IsOpen}】");
|
||||
msg = "CanBus模块连接成功";
|
||||
InvokeAsync(StateHasChanged);
|
||||
} catch (Exception e)
|
||||
{
|
||||
msg = "CanBus模块连接失败";
|
||||
errMsg += "【CanBus模块连接失败】";
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
await Task.Delay(500);
|
||||
msg = "开始连接条码扫描模块";
|
||||
InvokeAsync(StateHasChanged);
|
||||
try
|
||||
{
|
||||
PortUtil.scanCodeSerial.Open();
|
||||
logger.Info($"条码扫描模块打开结果【{PortUtil.scanCodeSerial.IsOpen}】");
|
||||
msg = "条码扫描模块连接成功";
|
||||
InvokeAsync(StateHasChanged);
|
||||
} catch (Exception e)
|
||||
{
|
||||
msg = "条码扫描模块连接失败";
|
||||
errMsg += "【条码扫描模块连接失败】";
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
globalStateService.isInit = true;
|
||||
dialogService.Close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -89,6 +89,13 @@
|
|||
|
||||
public List<InvoiceVo> data { get; set; }
|
||||
|
||||
//称重取药数量
|
||||
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
// 当前操作的库位号列表
|
||||
public List<int> ColNos { get; set; } = new List<int>();
|
||||
int currentCol = 0;
|
||||
//开抽屉前操作标识
|
||||
private List<string> _flagList = new List<string>();
|
||||
async Task StartAdd()
|
||||
{
|
||||
if (data.Any(it => it.Quantity != it.ChannelStocks.Sum(cs => cs.AddQuantity)))
|
||||
|
@ -97,7 +104,8 @@
|
|||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的入库数量!", Duration = 4000 }
|
||||
);
|
||||
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
await OpenDrawer();
|
||||
}
|
||||
|
@ -142,15 +150,36 @@
|
|||
{
|
||||
BeforeQuantity = new int[9];
|
||||
AfterQuantity = new int[9];
|
||||
// 判断是否为单支抽屉
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
for (int j = 0; j < data[index].ChannelStocks.Count; j++)
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
// _flagList.Add(flag);
|
||||
//单支-查数
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[index].ChannelStocks[j].DrawerNo);
|
||||
BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
|
||||
await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().ToArray());
|
||||
}
|
||||
//称重-查数
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;// drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[index].ChannelStocks[j].ColNo);
|
||||
|
||||
BeforeQuantity[data[index].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[index].ChannelStocks[j].ColNo);
|
||||
logger.Info($"称重抽屉【{data[index].ChannelStocks[j].DrawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
await Task.Delay(200);
|
||||
}
|
||||
//药盒-开药盒
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("3"))
|
||||
{
|
||||
PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;
|
||||
await PortUtil.OpenBoxByColNo(data[index].ChannelStocks[j].ColNo);
|
||||
await Task.Delay(200);
|
||||
}
|
||||
}
|
||||
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||
if (b)
|
||||
{
|
||||
|
@ -186,6 +215,80 @@
|
|||
{
|
||||
PortUtil.SpeakAsync($"加药完成,请,点击完成按钮进行确认");
|
||||
this.status = 2;
|
||||
string alertMessage = string.Empty;
|
||||
bool cancelFlag = false;
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < data[i].ChannelStocks.Count; j++)
|
||||
{
|
||||
string flag = "关" + data[i].ChannelStocks[j].DrawerNo.ToString() + data[i].ChannelStocks[j].ColNo.ToString();
|
||||
|
||||
if (!_flagList.Contains(flag))
|
||||
{
|
||||
_flagList.Add(flag);
|
||||
//关闭抽屉后获取称重数量
|
||||
PortUtil.DrawerNo = data[i].ChannelStocks[j].DrawerNo;// drawerNo;
|
||||
// 判断是否为称重抽屉
|
||||
//单支-查数
|
||||
if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.ColNoLst = this.ColNos;
|
||||
|
||||
AfterQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo);
|
||||
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1])
|
||||
{
|
||||
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】";
|
||||
|
||||
}
|
||||
}
|
||||
//单支-查数
|
||||
if (data[i].ChannelStocks[j].BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1])
|
||||
{
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].ChannelStocks[j].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】";
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(alertMessage))
|
||||
{
|
||||
//弹出确认对话框
|
||||
alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
||||
//弹出确认提示框
|
||||
var confirm = await dialogService.OpenAsync<ConfirmDialog>
|
||||
(
|
||||
$"保存确认",
|
||||
new Dictionary<string, object>
|
||||
() { { "confirmInfo", alertMessage } },
|
||||
new DialogOptions()
|
||||
{ Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
|
||||
if (!confirm)
|
||||
{
|
||||
RestData();
|
||||
logger.Info("取消保存");
|
||||
cancelFlag = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info(alertMessage);
|
||||
}
|
||||
alertMessage = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cancelFlag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
stop();
|
||||
}
|
||||
else
|
||||
|
@ -196,21 +299,21 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
// if (setting.Value.single.Contains(drawerNo))
|
||||
// {
|
||||
// byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
// AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
// logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
|
||||
data.ForEach(cl =>
|
||||
{
|
||||
cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs =>
|
||||
{
|
||||
logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】");
|
||||
});
|
||||
// data.ForEach(cl =>
|
||||
// {
|
||||
// cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs =>
|
||||
// {
|
||||
// logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】");
|
||||
// });
|
||||
|
||||
});
|
||||
}
|
||||
// });
|
||||
// }
|
||||
next(); // continue iteration
|
||||
}
|
||||
}
|
||||
|
@ -229,7 +332,6 @@
|
|||
{
|
||||
PortUtil.AllLightOff();
|
||||
}
|
||||
stop();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -237,6 +339,8 @@
|
|||
void RestData()
|
||||
{
|
||||
this.status = 0;
|
||||
_flagList.Clear();
|
||||
this.ColNos.Clear();
|
||||
}
|
||||
|
||||
async Task AddFinish()
|
||||
|
@ -285,16 +389,17 @@
|
|||
}
|
||||
|
||||
|
||||
void RowRender(RowRenderEventArgs<InvoiceVo> args)
|
||||
void RowRender(RowRenderEventArgs<InvoiceVo>
|
||||
args)
|
||||
{
|
||||
args.Expandable = args.Data.ChannelStocks != null && args.Data.ChannelStocks.Count > 0;
|
||||
}
|
||||
|
||||
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args, RadzenDataGrid<ChannelStock> Grid)
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock>
|
||||
args, RadzenDataGrid<ChannelStock>
|
||||
Grid)
|
||||
{
|
||||
Grid.EditRow(args.Data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -89,6 +89,15 @@
|
|||
int status = 0;
|
||||
|
||||
public List<InvoiceVo> data { get; set; }
|
||||
//称重取药数量
|
||||
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
// 当前操作的库位号列表
|
||||
public List<int> ColNos { get; set; } = new List<int>();
|
||||
int currentCol = 0;
|
||||
//开抽屉前操作标识
|
||||
private List<string> _flagList = new List<string>();
|
||||
int[] BeforeQuantity = new int[9];
|
||||
int[] AfterQuantity = new int[9];
|
||||
|
||||
async Task StartTake()
|
||||
{
|
||||
|
@ -98,7 +107,8 @@
|
|||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的出库数量!", Duration = 4000 }
|
||||
);
|
||||
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
await OpenDrawer();
|
||||
}
|
||||
|
@ -123,8 +133,6 @@
|
|||
// 根据抽屉类型来决定打开前是否需要查询数量
|
||||
var promiseUtil = new PromiseUtil<int>();
|
||||
int index = 0;
|
||||
var BeforeQuantity = new int[9];
|
||||
var AfterQuantity = new int[9];
|
||||
await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
|
||||
{
|
||||
var drawerNo = drawerNos[index];
|
||||
|
@ -141,15 +149,63 @@
|
|||
{
|
||||
BeforeQuantity = new int[9];
|
||||
AfterQuantity = new int[9];
|
||||
// 判断是否为单支抽屉
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
for (int j = 0; j < data[index].ChannelStocks.Count; j++)
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
//单支-查数
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[index].ChannelStocks[j].DrawerNo);
|
||||
BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
|
||||
await PortUtil.HasLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().ToArray());
|
||||
await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().ToArray());
|
||||
}
|
||||
//称重-查数
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;// drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[index].ChannelStocks[j].ColNo);
|
||||
|
||||
BeforeQuantity[data[index].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[index].ChannelStocks[j].ColNo);
|
||||
logger.Info($"称重抽屉【{data[index].ChannelStocks[j].DrawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
await Task.Delay(200);
|
||||
}
|
||||
//药盒-开药盒
|
||||
if (data[index].ChannelStocks[j].BoardType.ToString().Contains("3"))
|
||||
{
|
||||
PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;
|
||||
await PortUtil.OpenBoxByColNo(data[index].ChannelStocks[j].ColNo);
|
||||
await Task.Delay(200);
|
||||
}
|
||||
}
|
||||
// // 判断是否为单支抽屉
|
||||
// if (setting.Value.single != null && setting.Value.single.Contains(drawerNo))
|
||||
// {
|
||||
// byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
// BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
// logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
|
||||
// await PortUtil.HasLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().ToArray());
|
||||
// }
|
||||
// // 称重抽屉关上则查数
|
||||
// if (setting.Value.weigh != null && setting.Value.weigh.Contains(drawerNo))
|
||||
// {
|
||||
// for (int i = 0; i < data.Count; i++)
|
||||
// {
|
||||
// for (int j = 0; j < data[i].ChannelStocks.Count; j++)
|
||||
// {
|
||||
// if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6"))
|
||||
// {
|
||||
// PortUtil.DrawerNo = drawerNo;
|
||||
// PortUtil.ColNoLst.Add(data[i].ChannelStocks[j].ColNo);
|
||||
|
||||
// BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo);
|
||||
// logger.Info($"称重抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
|
||||
// await Task.Delay(200);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||
if (b)
|
||||
{
|
||||
|
@ -181,10 +237,80 @@
|
|||
{
|
||||
PortUtil.AllLightOff();
|
||||
}
|
||||
|
||||
if (index == drawerNos.Count - 1)
|
||||
{
|
||||
PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
|
||||
this.status = 2;
|
||||
string alertMessage = string.Empty;
|
||||
bool cancelFlag = false;
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < data[i].ChannelStocks.Count; j++)
|
||||
{
|
||||
string flag = "关" + data[i].ChannelStocks[j].DrawerNo.ToString() + data[i].ChannelStocks[j].ColNo.ToString();
|
||||
|
||||
if (!_flagList.Contains(flag))
|
||||
{
|
||||
_flagList.Add(flag);
|
||||
// 判断是否为称重抽屉
|
||||
if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6"))
|
||||
{
|
||||
//关闭抽屉后获取称重数量
|
||||
PortUtil.DrawerNo = data[i].ChannelStocks[j].DrawerNo;// drawerNo;
|
||||
PortUtil.ColNoLst = this.ColNos;
|
||||
|
||||
AfterQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo);
|
||||
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1])
|
||||
{
|
||||
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】";
|
||||
|
||||
}
|
||||
}
|
||||
if (data[i].ChannelStocks[j].BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[i].ChannelStocks[j].DrawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1])
|
||||
{
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].ChannelStocks[j].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】";
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(alertMessage))
|
||||
{
|
||||
//弹出确认对话框
|
||||
alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
||||
//弹出确认提示框
|
||||
var confirm = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"保存确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
logger.Info(alertMessage);
|
||||
if (!confirm)
|
||||
{
|
||||
RestData();
|
||||
logger.Info("取消保存");
|
||||
cancelFlag = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info(alertMessage);
|
||||
}
|
||||
alertMessage = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cancelFlag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
stop();
|
||||
}
|
||||
else
|
||||
|
@ -195,7 +321,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
if (setting.Value.single != null && setting.Value.single.Contains(drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
|
@ -210,6 +336,15 @@
|
|||
|
||||
});
|
||||
}
|
||||
//是药盒抽屉开药盒
|
||||
if (setting.Value.box != null && setting.Value.box.Contains(drawerNo) && currentCol != null)
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
await PortUtil.OpenBoxByColNo(currentCol);
|
||||
ColNos.Add(currentCol);
|
||||
currentCol = 0;
|
||||
await Task.Delay(200);
|
||||
}
|
||||
next(); // continue iteration
|
||||
}
|
||||
}
|
||||
|
@ -236,6 +371,11 @@
|
|||
void RestData()
|
||||
{
|
||||
this.status = 0;
|
||||
this.BeforeQuantity = new int[9];
|
||||
this.AfterQuantity = new int[9];
|
||||
currentCol = 0;
|
||||
ColNos.Clear();
|
||||
_flagList.Clear();
|
||||
}
|
||||
|
||||
async Task TakeFinish()
|
||||
|
@ -291,6 +431,7 @@
|
|||
|
||||
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args, RadzenDataGrid<ChannelStock> Grid)
|
||||
{
|
||||
currentCol = args.Data.ColNo;
|
||||
Grid.EditRow(args.Data);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,226 @@
|
|||
@page "/loginDialog"
|
||||
@using MasaBlazorApp3.Pojo.Config;
|
||||
@using MasaBlazorApp3.Pojo.Vo;
|
||||
@using MasaBlazorApp3.Util;
|
||||
@using Microsoft.Extensions.Options;
|
||||
@using Newtonsoft.Json;
|
||||
@using log4net;
|
||||
|
||||
<style>
|
||||
.rz-dialog-content {
|
||||
padding: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
|
||||
<RadzenColumn Size="12" SizeMD="5">
|
||||
<RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
|
||||
@if (loginMode == 2)
|
||||
{
|
||||
<RadzenText TextStyle="TextStyle.H6" class="rz-color-white">操作人:@globalStateService.Operator?.NickName</RadzenText>
|
||||
<RadzenText TextStyle="TextStyle.H6" class="rz-color-white">复核人:@globalStateService.Reviewer?.NickName</RadzenText>
|
||||
}
|
||||
</RadzenCard>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="12" SizeMD="7">
|
||||
<RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
|
||||
<RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
|
||||
登录
|
||||
</RadzenText>
|
||||
<RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label" for="username">账号</label>
|
||||
<div class="rz-form-input-wrapper">
|
||||
<!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
|
||||
<RadzenTextBox id="username" Name="Username" @bind-Value="@loginModel.Username" Style="width:100%" />
|
||||
<RadzenRequiredValidator Component="Username" Text="请填写用户名" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label" for="password">密码</label>
|
||||
<div class="rz-form-input-wrapper">
|
||||
<RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
|
||||
<RadzenRequiredValidator Component="Password" Text="请填写密码" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="rz-form-row">
|
||||
<label class="rz-label"></label>
|
||||
<div class="rz-form-input-wrapper rz-login-buttons">
|
||||
<RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="登录" />
|
||||
<RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenCard>
|
||||
</RadzenColumn>
|
||||
|
||||
</RadzenRow>
|
||||
|
||||
@code {
|
||||
@inject Radzen.DialogService dialogService;
|
||||
|
||||
@inject FingerprintUtil FingerprintUtil;
|
||||
@inject PortUtil PortUtil;
|
||||
@inject NavigationManager na;
|
||||
@inject NotificationService _message
|
||||
@inject GlobalStateService globalStateService;
|
||||
@inject IUserDao userDao;
|
||||
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
|
||||
|
||||
|
||||
|
||||
private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
|
||||
|
||||
private int loginMode = 1;
|
||||
private bool opFirst = true;
|
||||
|
||||
|
||||
|
||||
bool isShow;
|
||||
|
||||
private Pojo.User loginModel = new();
|
||||
|
||||
protected override Task OnInitializedAsync()
|
||||
{
|
||||
FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx;
|
||||
|
||||
loginMode = setting.Value.loginMode;
|
||||
opFirst = setting.Value.opFirst;
|
||||
|
||||
return base.OnInitializedAsync();
|
||||
}
|
||||
|
||||
private void SetUser(Pojo.User user)
|
||||
{
|
||||
|
||||
// 判断是否为双人登录模式
|
||||
if (loginMode == 2)
|
||||
{
|
||||
// 判断是否是操作人优先登录
|
||||
if (opFirst)
|
||||
{
|
||||
// 判断操作人是否已经登录,已经登录说明此时为第二人登录
|
||||
if (globalStateService.Operator != null)
|
||||
{
|
||||
// 判断是否还是操作人的验证
|
||||
if (globalStateService.Operator.Id != user.Id)
|
||||
{
|
||||
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
|
||||
globalStateService.Reviewer = user;
|
||||
logger.Info($"双人登录模式:操作人【{globalStateService.Operator.NickName}】复核人【{user.NickName}】登录");
|
||||
dialogService.Close(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 此时为第一人登录
|
||||
globalStateService.Operator = user;
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
// 操作人为第二人登录
|
||||
else
|
||||
{
|
||||
// 判断复核人是否已经登录,已经登录说明此时为第二人登录
|
||||
if (globalStateService.Reviewer != null)
|
||||
{
|
||||
// 判断是否还是复核人的验证
|
||||
if (globalStateService.Reviewer.Id != user.Id)
|
||||
{
|
||||
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
|
||||
globalStateService.Operator = user;
|
||||
logger.Info($"双人登录模式:操作人【{user.NickName}】复核人【{globalStateService.Reviewer.NickName}】登录");
|
||||
dialogService.Close(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 此时为第一人登录
|
||||
globalStateService.Reviewer = user;
|
||||
InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
|
||||
globalStateService.Operator = user;
|
||||
logger.Info($"单人登录模式:用户【{user.NickName}】登录");
|
||||
dialogService.Close(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Submit(Pojo.User user)
|
||||
{
|
||||
Pojo.User u = userDao.GetByUsername(loginModel.Username);
|
||||
if (u != null)
|
||||
{
|
||||
if (Util.MD5.GetMD5Hash(loginModel.Password).ToLower().Equals(u.Password))
|
||||
{
|
||||
SetUser(u);
|
||||
loginModel.Username="";
|
||||
loginModel.Password = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"密码错误", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"用户【{u.NickName}】密码输入错误");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"没有用户:【{loginModel.Username}】");
|
||||
}
|
||||
}
|
||||
|
||||
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
|
||||
{
|
||||
|
||||
Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber));
|
||||
if (u != null)
|
||||
{
|
||||
SetUser(u);
|
||||
}
|
||||
else
|
||||
{
|
||||
_message.Notify(
|
||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 }
|
||||
);
|
||||
logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void Exit()
|
||||
{
|
||||
dialogService.Close(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -62,7 +62,7 @@
|
|||
}
|
||||
@if (status <= 2)
|
||||
{
|
||||
<RadzenButton Click="@((args) => dialogService.Close(false))" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
||||
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
||||
}
|
||||
</RadzenStack>
|
||||
</RadzenStack>
|
||||
|
@ -82,8 +82,8 @@
|
|||
private bool CanTakeDrug = true;
|
||||
|
||||
public List<OrderTakeVo> data { get; set; }
|
||||
|
||||
|
||||
//称重取药数量
|
||||
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -129,6 +129,26 @@
|
|||
|
||||
await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
|
||||
}
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||
|
||||
orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||
logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
//是药盒抽屉开药盒
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
||||
await Task.Delay(200);
|
||||
}
|
||||
}
|
||||
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||
if (b)
|
||||
{
|
||||
|
@ -170,6 +190,55 @@
|
|||
{
|
||||
PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
|
||||
this.status = 2;
|
||||
string alertMessage = string.Empty;
|
||||
//检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||
|
||||
orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||
{
|
||||
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||
|
||||
}
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||
{
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(alertMessage))
|
||||
{
|
||||
//弹出确认对话框
|
||||
alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
||||
//弹出确认提示框
|
||||
var confirm = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"保存确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
logger.Info(alertMessage);
|
||||
if (!confirm)
|
||||
{
|
||||
RestData();
|
||||
logger.Info("取消保存");
|
||||
}
|
||||
}
|
||||
stop();
|
||||
}
|
||||
else
|
||||
|
@ -180,27 +249,13 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
|
||||
data.ForEach(cl =>
|
||||
{
|
||||
if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||
{
|
||||
logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】");
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
next(); // continue iteration
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -221,8 +276,20 @@
|
|||
void RestData()
|
||||
{
|
||||
this.status = 0;
|
||||
data.ForEach(it =>
|
||||
{
|
||||
it.Status = 0;
|
||||
it.BeforeQuantity = new int[9];
|
||||
it.AfterQuantity = new int[9];
|
||||
});
|
||||
this.WeightFinnalQuantity = new int[9];
|
||||
}
|
||||
void Cancel()
|
||||
{
|
||||
RestData();
|
||||
// 关闭弹窗
|
||||
dialogService.Close(true);
|
||||
}
|
||||
|
||||
async Task TakeFinish()
|
||||
{
|
||||
|
||||
|
|
|
@ -196,9 +196,9 @@
|
|||
if (roleList.Contains(role))
|
||||
{
|
||||
//弹出确认提示框
|
||||
var b = await dialogService.OpenAsync<ConfirmDialo>(
|
||||
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"删除确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", "删除角色:" + role.RoleName } },
|
||||
new Dictionary<string, object>() { { "confirmInfo", "确认要删除角色:" + role.RoleName+"吗?" } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
if (b)
|
||||
{
|
||||
|
|
|
@ -79,9 +79,12 @@
|
|||
[Parameter] public OrderInfo order { get; set; }
|
||||
[Parameter] public List<OrderDetail> orderDetails { get; set; }
|
||||
|
||||
|
||||
private bool CanTakeDrug = true;
|
||||
|
||||
public List<OrderTakeVo> data { get; set; }
|
||||
//称重取药数量
|
||||
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
data = await selfTakeDao.getTakeInfoByOrderNo(orderDetails);
|
||||
|
@ -126,6 +129,26 @@
|
|||
|
||||
await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
|
||||
}
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||
|
||||
orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||
logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
//是药盒抽屉开药盒
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
||||
await Task.Delay(200);
|
||||
}
|
||||
}
|
||||
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||
if (b)
|
||||
{
|
||||
|
@ -169,6 +192,55 @@
|
|||
{
|
||||
PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
|
||||
this.status = 2;
|
||||
string alertMessage = string.Empty;
|
||||
//检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||
{
|
||||
PortUtil.DrawerNo = drawerNo;
|
||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||
|
||||
orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||
{
|
||||
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||
|
||||
}
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||
{
|
||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(alertMessage))
|
||||
{
|
||||
//弹出确认对话框
|
||||
alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
||||
//弹出确认提示框
|
||||
var confirm = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"保存确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
logger.Info(alertMessage);
|
||||
if (!confirm)
|
||||
{
|
||||
RestData();
|
||||
logger.Info("取消保存");
|
||||
}
|
||||
}
|
||||
stop();
|
||||
}
|
||||
else
|
||||
|
@ -179,21 +251,21 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
if (setting.Value.single.Contains(drawerNo))
|
||||
{
|
||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
// if (setting.Value.single.Contains(drawerNo))
|
||||
// {
|
||||
// byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||
// orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||
// logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||
|
||||
data.ForEach(cl =>
|
||||
{
|
||||
if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||
{
|
||||
logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】");
|
||||
}
|
||||
// data.ForEach(cl =>
|
||||
// {
|
||||
// if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||
// {
|
||||
// logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】");
|
||||
// }
|
||||
|
||||
});
|
||||
}
|
||||
// });
|
||||
// }
|
||||
next(); // continue iteration
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,9 +233,9 @@
|
|||
if (userList.Contains(user))
|
||||
{
|
||||
//弹出确认提示框
|
||||
var b = await dialogService.OpenAsync<ConfirmDialo>(
|
||||
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"删除确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", "删除用户:"+user.Username } },
|
||||
new Dictionary<string, object>() { { "confirmInfo", "确认要删除用户:"+user.Username+"吗?" } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
if (b)
|
||||
{
|
||||
|
@ -258,9 +258,9 @@
|
|||
if (userList.Contains(user))
|
||||
{
|
||||
//弹出确认提示框
|
||||
var b = await dialogService.OpenAsync<ConfirmDialo>(
|
||||
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||
$"密码重置确认",
|
||||
new Dictionary<string, object>() { { "confirmInfo", "重置用户:" + user.Username+" 的密码" } },
|
||||
new Dictionary<string, object>() { { "confirmInfo", "确认要重置用户:" + user.Username+" 的密码吗?" } },
|
||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||
if (b)
|
||||
{
|
||||
|
|
|
@ -79,5 +79,7 @@ namespace MasaBlazorApp3.Pojo
|
|||
get;
|
||||
set;
|
||||
}
|
||||
[Column("Pos_No")]
|
||||
public int BiaoDingStatus { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,5 +35,8 @@ namespace MasaBlazorApp3.Pojo
|
|||
|
||||
[Association(ThisKey = nameof(RoleId), OtherKey = nameof(Role.Id))]
|
||||
public Role role { get; set; }
|
||||
|
||||
[Column(IsColumn =false)]
|
||||
public string OldPassword { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,8 +55,8 @@ namespace MasaBlazorApp3.Port
|
|||
string DrawerPortPath = _portConfig.drawerPortPath;
|
||||
logger.Info($"打开抽屉串口【{DrawerPortPath}】");
|
||||
drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8);
|
||||
drawerSerial.Open();
|
||||
logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
|
||||
//drawerSerial.Open();
|
||||
//logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -72,8 +72,8 @@ namespace MasaBlazorApp3.Port
|
|||
string code = scanCodeSerial.ReadExisting();
|
||||
|
||||
};
|
||||
scanCodeSerial.Open();
|
||||
logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
|
||||
//scanCodeSerial.Open();
|
||||
//logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -86,8 +86,8 @@ namespace MasaBlazorApp3.Port
|
|||
string CanBusPortPath = _portConfig.canBusPortPath;
|
||||
logger.Info($"打开can总线串口【{CanBusPortPath}】");
|
||||
canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8);
|
||||
canBusSerial.Open();
|
||||
logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
|
||||
//canBusSerial.Open();
|
||||
//logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -410,7 +410,7 @@ namespace MasaBlazorApp3.Port
|
|||
var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16);
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)channel, 5, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
//byte[] buffer = new byte[] { 0xaa, 0x11, 0x05,0x01, 0x00,0x00,0x00,0xee};
|
||||
logger.Info($"开药盒{ColNo}【{Convert.ToHexString(buffer)}】");
|
||||
logger.Info($"开药盒{DrawerNo}-{ColNo}【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
byte[] retBuffer = await GetBufferByPort(canBusSerial, 8);
|
||||
logger.Info($"开药盒返回{ColNo}【{Convert.ToHexString(retBuffer)}】");
|
||||
|
@ -770,34 +770,52 @@ namespace MasaBlazorApp3.Port
|
|||
}
|
||||
}
|
||||
|
||||
public async void ClearCount(int DrawerNo, int ColNo)
|
||||
public async Task 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 };
|
||||
int[] iNum = new int[] { 3, 2, 1 };
|
||||
var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2;
|
||||
var bColNo = iNum[colNo2];
|
||||
decimal decolNO = (decimal)ColNo;
|
||||
var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16);
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
logger.Info($"称重发送清空计数【{string.Join(",", buffer)}】");
|
||||
logger.Info($"称重发送清空计数【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Info($"操作发生异常:ex:{ex.Message},方法名:ClearCount;参数:{DrawerNo},{ColNo}");
|
||||
}
|
||||
}
|
||||
|
||||
public async void SetNumCount(int DrawerNo, int ColNo, int Quantity)
|
||||
public async Task 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 };
|
||||
int[] iNum = new int[] { 3, 2, 1 };
|
||||
var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2;
|
||||
var bColNo = iNum[colNo2];
|
||||
decimal decolNO = (decimal)ColNo;
|
||||
var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16);
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
buffer[4] = (byte)(Quantity & 0xff);
|
||||
//buffer[4] = (byte)(Quantity >> 8);
|
||||
//buffer[5] = (byte)(Quantity & 0xff);
|
||||
|
||||
|
||||
buffer[4] = (byte)(Quantity >> 8);
|
||||
buffer[5] = (byte)(Quantity & 0xff);
|
||||
|
||||
|
||||
logger.Info($"称重发送数量【{string.Join(",", buffer)}】");
|
||||
logger.Info($"标定数量【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Info($"操作发生异常:ex:{ex.Message},方法名:SetNumCount;参数:{DrawerNo},{ColNo},{Quantity}");
|
||||
}
|
||||
}
|
||||
|
||||
// 以板子为单位获取抽屉内所有库位的药品数量
|
||||
public async Task<byte[]> CheckQuantityByAddr()
|
||||
|
@ -843,7 +861,7 @@ namespace MasaBlazorApp3.Port
|
|||
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
logger.Info($"称重发送库位数量查询{ColNoLst[i]}【{Convert.ToHexString(buffer)}】");
|
||||
logger.Info($"称重发送库位数量查询{DrawerNo}-{ColNoLst[i]}【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
byte[] result = await GetBufferByPort(canBusSerial, 8);
|
||||
logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
|
||||
|
@ -888,7 +906,7 @@ namespace MasaBlazorApp3.Port
|
|||
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
logger.Info($"称重发送库位数量查询{colNo}【{Convert.ToHexString(buffer)}】");
|
||||
logger.Info($"称重发送库位数量查询{DrawerNo}-{colNo}【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
byte[] result = await GetBufferByPort(canBusSerial, 8);
|
||||
byte[] hl = result.Skip(4).Take(2).ToArray();
|
||||
|
@ -922,7 +940,7 @@ namespace MasaBlazorApp3.Port
|
|||
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
logger.Info($"称重发送库位数量查询{colNo}【{Convert.ToHexString(buffer)}】");
|
||||
logger.Info($"称重发送库位数量查询{DrawerNo}-{colNo}【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
byte[] result = await GetBufferByPort(canBusSerial, 8);
|
||||
logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
|
||||
|
@ -951,7 +969,7 @@ namespace MasaBlazorApp3.Port
|
|||
|
||||
byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
|
||||
|
||||
logger.Info($"称重发送库位数量查询{ColNos[i]}【{Convert.ToHexString(buffer)}】");
|
||||
logger.Info($"称重发送库位数量查询{DrawerNo}-{ColNos[i]}【{Convert.ToHexString(buffer)}】");
|
||||
canBusSerial.Write(buffer, 0, 8);
|
||||
byte[] result = await GetBufferByPort(canBusSerial, 8);
|
||||
logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
<div style="width:100vw;height:100vh">
|
||||
<RadzenLayout>
|
||||
@Body
|
||||
</div>
|
||||
<RadzenNotification />
|
||||
<RadzenComponents />
|
||||
</RadzenLayout>
|
|
@ -138,7 +138,7 @@
|
|||
void backHome()
|
||||
{
|
||||
currentPage = false;
|
||||
na.NavigateTo("/home");
|
||||
na.NavigateTo("");
|
||||
}
|
||||
|
||||
void logout()
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"setting": {
|
||||
"machineId": "DM1",
|
||||
"storage": null,
|
||||
"loginMode": 1,
|
||||
"loginMode": 2,
|
||||
"opFirst": true,
|
||||
//自动退出登录时间,单位秒(0不自动退出)
|
||||
"autoOutLog": 0
|
||||
|
@ -17,16 +17,16 @@
|
|||
"drawerPortPath": "COM1",
|
||||
"drawerProtocol": 485,
|
||||
"scanCodePortPath": "COM8",
|
||||
"canBusPortPath": "COM5",
|
||||
"canBusPortPath": "COM31",
|
||||
"canBusExsit": true,
|
||||
"doorAddr": 0,
|
||||
"storageBoxAddr": 0
|
||||
},
|
||||
"drawer": {
|
||||
"single": [ 3 ],
|
||||
"weigh": [1],
|
||||
"box": [],
|
||||
"label": []
|
||||
"weigh": [4],
|
||||
"box": [4],
|
||||
"label": [4]
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 18 KiB |
Loading…
Reference in New Issue