更新提交
This commit is contained in:
parent
3a9ec258a8
commit
ac39763b13
|
@ -7,7 +7,7 @@
|
||||||
</Found>
|
</Found>
|
||||||
<NotFound>
|
<NotFound>
|
||||||
<LayoutView Layout="@typeof(MainLayout)">
|
<LayoutView Layout="@typeof(MainLayout)">
|
||||||
<p role="alert">Sorry, there's nothing at this address.</p>
|
<p role="alert">抱歉,找不到此页面。</p>
|
||||||
</LayoutView>
|
</LayoutView>
|
||||||
</NotFound>
|
</NotFound>
|
||||||
</Router>
|
</Router>
|
||||||
|
|
|
@ -28,6 +28,11 @@ namespace MasaBlazorApp3.DataAccess
|
||||||
public ITable<MachineRecord> MachineRecord => this.GetTable<MachineRecord>();
|
public ITable<MachineRecord> MachineRecord => this.GetTable<MachineRecord>();
|
||||||
public ITable<InOutInvoice> InOutInvoice => this.GetTable<InOutInvoice>();
|
public ITable<InOutInvoice> InOutInvoice => this.GetTable<InOutInvoice>();
|
||||||
public ITable<AccountBook> AccountBook => this.GetTable<AccountBook>();
|
public ITable<AccountBook> AccountBook => this.GetTable<AccountBook>();
|
||||||
|
public ITable<SettingManu> SettingManu => this.GetTable<SettingManu>();
|
||||||
|
public ITable<Plan> Plan => this.GetTable<Plan>();
|
||||||
|
public ITable<PlanDetails> PlanDetails => this.GetTable<PlanDetails>();
|
||||||
|
public ITable<AccountBookG2> AccountBookG2 => this.GetTable<AccountBookG2>();
|
||||||
|
public ITable<HkcChangeShifts> HkcChangeShifts => this.GetTable<HkcChangeShifts>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MasaBlazorApp3.DataAccess
|
namespace MasaBlazorApp3.DataAccess
|
||||||
{
|
{
|
||||||
public class ChannelStockWithDrawerCount<ChannelStock>
|
public class ChannelStockWithDrawerCount<T>
|
||||||
{
|
{
|
||||||
public int[] DrawerArray { get; set; }
|
public int[] DrawerArray { get; set; }
|
||||||
public List<ChannelStock> ChannelStocks { get; set; } = new List<ChannelStock>();
|
public List<T> ChannelStocks { get; set; } = new List<T>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using MasaBlazorApp3.Pojo;
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using MasaBlazorApp3.Pojo.Vo;
|
||||||
|
|
||||||
namespace MasaBlazorApp3.DataAccess.Dao
|
namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
{
|
{
|
||||||
|
@ -31,5 +32,28 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
|
public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
|
||||||
//抽屉获取库存数据--药品绑定
|
//抽屉获取库存数据--药品绑定
|
||||||
Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0);
|
Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0);
|
||||||
|
//手术室药箱获取绑定数据
|
||||||
|
Task<PageMultiData<ChannelList, Plan>> GetAllChannelListWithPlan(int? take, int? skip);
|
||||||
|
/// <summary>
|
||||||
|
/// 手术室药箱绑定套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> BindBox(ChannelList channelList);
|
||||||
|
/// <summary>
|
||||||
|
/// 手术室药箱解绑套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="list"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UnBindBox(ChannelList list);
|
||||||
|
//获取手术室药箱中所有要补药的数据
|
||||||
|
Task<PageData<ChannelList>> GetAllBoxAddDrug(int? take, int? skip);
|
||||||
|
//手术室药箱补药获取毒麻柜中的药品信息
|
||||||
|
Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
|
||||||
|
//手术室药箱补药完成
|
||||||
|
Task<bool> BoxTakeFinish(List<BoxTakeVo> datas);
|
||||||
|
//手术室药箱入库
|
||||||
|
Task<PageData<ChannelList>> GetBoxWaitInfo(int? take, int? skip);
|
||||||
|
//手术室药箱入库获取待入库明细
|
||||||
|
Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
|
{
|
||||||
|
public interface IHkcChangeShiftsDao
|
||||||
|
{
|
||||||
|
//查询交接班记录
|
||||||
|
public Task<PageData<HkcChangeShifts>> GetChangeShiftRecordAsync(DateTime start, DateTime end, int? take, int? skip);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,5 +26,11 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
public Task<bool> OrderReturnFinish(List<OperationVo<MachineRecord>> datas, string OrderrNo);
|
public Task<bool> OrderReturnFinish(List<OperationVo<MachineRecord>> datas, string OrderrNo);
|
||||||
|
|
||||||
public Task<List<OperationVo<MachineRecord>>> getReturnInfoByOrderNo(string OrderrNo);
|
public Task<List<OperationVo<MachineRecord>>> getReturnInfoByOrderNo(string OrderrNo);
|
||||||
|
//获取药箱中的用药信息
|
||||||
|
public Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box,string OrderrNo, DateTime OrderDate, int? take, int? skip);
|
||||||
|
//获取所有药箱号
|
||||||
|
public Task<int[]> GetDrawerNum(string machineId);
|
||||||
|
//核对处方
|
||||||
|
public Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
|
{
|
||||||
|
public interface IPlanDao
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有套餐数据
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PageMultiData<Plan,DrugInfo>> GetAllPlanInfo();
|
||||||
|
/// <summary>
|
||||||
|
/// 根据套餐ID获取套餐数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<Plan> GetPlanById(int Id);
|
||||||
|
/// <summary>
|
||||||
|
/// 新增套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="plan"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> InsertPlanInfo(Plan plan);
|
||||||
|
/// <summary>
|
||||||
|
/// 更新套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="plan"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdatePlanInfo(Plan plan);
|
||||||
|
/// <summary>
|
||||||
|
/// 删除套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="planId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> DeletePlanInfo(int planID);
|
||||||
|
/// <summary>
|
||||||
|
/// 向套餐添加药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> AddPlanDetail(PlanDetails details);
|
||||||
|
/// <summary>
|
||||||
|
/// 修改套餐中的药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> UpdatePlanDetail(PlanDetails details);
|
||||||
|
/// <summary>
|
||||||
|
/// 删除套餐中的药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> DeletePlanDetail(PlanDetails planID);
|
||||||
|
/// <summary>
|
||||||
|
/// 根据套餐明细获取套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool CheckDrugById(PlanDetails details);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
|
{
|
||||||
|
interface ISettingManuDao
|
||||||
|
{
|
||||||
|
public Task<List<SettingManu>> GetMenuItemsAsync();
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,12 +2,14 @@
|
||||||
using LinqToDB;
|
using LinqToDB;
|
||||||
using log4net;
|
using log4net;
|
||||||
using MasaBlazorApp3.DataAccess.Dao;
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
|
using MasaBlazorApp3.Pages;
|
||||||
using MasaBlazorApp3.Pojo;
|
using MasaBlazorApp3.Pojo;
|
||||||
using MasaBlazorApp3.Pojo.Config;
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
using MasaBlazorApp3.Pojo.Vo;
|
using MasaBlazorApp3.Pojo.Vo;
|
||||||
using MasaBlazorApp3.Port;
|
using MasaBlazorApp3.Port;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Mysqlx.Crud;
|
using Mysqlx.Crud;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
|
||||||
namespace MasaBlazorApp3.DataAccess.Impl
|
namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
@ -183,7 +185,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
//效期转换出错
|
//效期转换出错
|
||||||
if (stock.ManuNo != null)
|
if (stock.ManuNo != null)
|
||||||
{
|
{
|
||||||
string[] idate= stock.EffDate.Split('/');
|
string[] idate = stock.EffDate.Split('/');
|
||||||
foreach (string iS in idate)
|
foreach (string iS in idate)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(iS.Replace(" ", "").Trim()))
|
if (!string.IsNullOrEmpty(iS.Replace(" ", "").Trim()))
|
||||||
|
@ -191,13 +193,13 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
switch (iS.Replace(" ", "").Trim().Length)
|
switch (iS.Replace(" ", "").Trim().Length)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
EffDate = iS.Replace(" ", "").Trim();
|
EffDate = iS.Replace(" ", "").Trim();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
EffDate += "-" + iS.Replace(" ", "").Trim();
|
EffDate += "-" + iS.Replace(" ", "").Trim();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
EffDate += "-0"+iS.Replace(" ", "").Trim();
|
EffDate += "-0" + iS.Replace(" ", "").Trim();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -208,25 +210,25 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EffDate=dEffDate.ToString("yyyy-MM-dd");
|
EffDate = dEffDate.ToString("yyyy-MM-dd");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 出入库记录
|
// 出入库记录
|
||||||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||||
{
|
{
|
||||||
MachineId = _setting.machineId,
|
MachineId = _setting.machineId,
|
||||||
DrawerNo = stock.DrawerNo,
|
DrawerNo = stock.DrawerNo,
|
||||||
ColNo = stock.ColNo,
|
ColNo = stock.ColNo,
|
||||||
DrugId = stock.DrugId,
|
DrugId = stock.DrugId,
|
||||||
ManuNo = ManuNo,
|
ManuNo = ManuNo,
|
||||||
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(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,
|
OperationTime = DateTime.Now,
|
||||||
Type = type,
|
Type = type,
|
||||||
Quantity = type == 1 ? stock.AddQuantity : stock.TakeQuantity,
|
Quantity = type == 1 ? stock.AddQuantity : stock.TakeQuantity,
|
||||||
Operator = _globalStateService.Operator.Id,
|
Operator = _globalStateService.Operator.Id,
|
||||||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||||||
InvoiceId = InvoiceId
|
InvoiceId = InvoiceId
|
||||||
});
|
});
|
||||||
// 更新库存
|
// 更新库存
|
||||||
var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
|
var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
|
||||||
.Set(cs => cs.Quantity, type == 1 ? stock.Quantity + stock.AddQuantity : stock.Quantity - stock.TakeQuantity);
|
.Set(cs => cs.Quantity, type == 1 ? stock.Quantity + stock.AddQuantity : stock.Quantity - stock.TakeQuantity);
|
||||||
|
@ -399,7 +401,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
_connection.BeginTransaction();
|
_connection.BeginTransaction();
|
||||||
|
|
||||||
string InvoiceId = "DRAWER_" + CurrentTimeMillis();
|
string InvoiceId = "CHECK_" + CurrentTimeMillis();
|
||||||
var flag = true;
|
var flag = true;
|
||||||
for (var i = 0; i < Stocks.Count; i++)
|
for (var i = 0; i < Stocks.Count; i++)
|
||||||
{
|
{
|
||||||
|
@ -459,7 +461,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
});
|
});
|
||||||
// 更新库存
|
// 更新库存
|
||||||
var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
|
var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
|
||||||
.Set(cs => cs.Quantity, stock.CheckQuantity);
|
.Set(cs => cs.Quantity, stock.CheckQuantity)
|
||||||
|
.Set(cs => cs.ManuNo, ManuNo)
|
||||||
|
.Set(cs => cs.EffDate, EffDate)
|
||||||
|
.Set(cs => cs.Dmnguid, stock.drugManuNo?.Id);
|
||||||
|
|
||||||
int r = stockQ.Update();
|
int r = stockQ.Update();
|
||||||
// 获取更新完库存之后的药品库存
|
// 获取更新完库存之后的药品库存
|
||||||
|
@ -544,6 +549,623 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
return new ChannelStockWithDrawerCount<ChannelStock>() { DrawerArray = ints, ChannelStocks = channelStocks };
|
return new ChannelStockWithDrawerCount<ChannelStock>() { DrawerArray = ints, ChannelStocks = channelStocks };
|
||||||
}
|
}
|
||||||
|
//手术室药箱获取绑定数据
|
||||||
|
public async Task<PageMultiData<ChannelList, Plan>> GetAllChannelListWithPlan(int? take, int? skip)
|
||||||
|
{
|
||||||
|
|
||||||
|
var query = _connection.ChannelList.AsQueryable()
|
||||||
|
.Where(cl => cl.MachineId == _setting.boxMachineId);
|
||||||
|
//.LoadWith(cl=>cl.PlanInfo);
|
||||||
|
|
||||||
|
|
||||||
|
int pagedData = await query.CountAsync();
|
||||||
|
|
||||||
|
List<ChannelList> list = await query
|
||||||
|
.OrderBy((cl) => cl.DrawerNo)
|
||||||
|
.Skip((int)skip)
|
||||||
|
.Take((int)take)
|
||||||
|
.ToListAsync();
|
||||||
|
if (list != null && list.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(list[i].DrugId))
|
||||||
|
{
|
||||||
|
list[i].PlanInfo = _connection.Plan.AsQueryable().Where(p => p.Id == Convert.ToInt32(list[i].DrugId)).FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var other = _connection.Plan.AsQueryable().Where(p => p.UseState == 1 && p._PlanDetails.Count > 0);
|
||||||
|
List<Plan> planInfos = await other
|
||||||
|
.LoadWith(p => p._PlanDetails.Where(pd => pd.UseState == 1))
|
||||||
|
.OrderBy((p) => p.Id)
|
||||||
|
.ToListAsync();
|
||||||
|
if (planInfos != null && planInfos.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < planInfos.Count(); i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < planInfos[i]._PlanDetails.Count(); j++)
|
||||||
|
{
|
||||||
|
planInfos[i]._PlanDetails[j]._DrugInfo =
|
||||||
|
_connection.DrugInfo.AsQueryable().Where(di => di.DrugId == planInfos[i]._PlanDetails[j].DrugId).First();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PageMultiData<ChannelList, Plan>()
|
||||||
|
{
|
||||||
|
|
||||||
|
TotalDesserts = pagedData,
|
||||||
|
Desserts = list,
|
||||||
|
Other = planInfos
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 手术室药箱绑定套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> BindBox(ChannelList list)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
|
bool bFlag = true;
|
||||||
|
|
||||||
|
var q = _connection.ChannelList
|
||||||
|
.Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
|
||||||
|
//将套餐中的药品信息写入channelStock
|
||||||
|
//查询套餐中药品信息
|
||||||
|
var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id);
|
||||||
|
List<PlanDetails> planInfos = await query.ToListAsync();
|
||||||
|
if (planInfos != null && planInfos.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < planInfos.Count; i++)
|
||||||
|
{
|
||||||
|
int mid = await _connection.InsertAsync(new ChannelStock()
|
||||||
|
{
|
||||||
|
Id = Guid.NewGuid().ToString(),
|
||||||
|
ListId = list.Id,
|
||||||
|
MachineId = list.MachineId,
|
||||||
|
DrawerNo = list.DrawerNo,
|
||||||
|
DrugId = planInfos[i].DrugId.ToString(),
|
||||||
|
BaseQuantity = planInfos[i].BaseQuantity,
|
||||||
|
});
|
||||||
|
if (mid > 0)
|
||||||
|
{
|
||||||
|
bFlag = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bFlag = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var r = await q.UpdateAsync();
|
||||||
|
if (bFlag && r > 0)
|
||||||
|
{
|
||||||
|
_connection.CommitTransaction();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
logger.Info($"绑定套餐异常{ex.Message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 手术室药箱解绑套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="list"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> UnBindBox(ChannelList list)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
|
|
||||||
|
var r = await _connection.ChannelList
|
||||||
|
.Where(cs => cs.Id == list.Id)
|
||||||
|
.Set(cs => cs.DrugId, String.Empty)
|
||||||
|
.UpdateAsync();
|
||||||
|
|
||||||
|
var cs = await _connection.ChannelStock.Where(cs => cs.ListId == list.Id).DeleteAsync();
|
||||||
|
if (r > 0 && cs > 0)
|
||||||
|
{
|
||||||
|
_connection.CommitTransaction();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
logger.Info($"手术室药箱解绑异常:{ex.Message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//获取手术室药箱中所有要补药的数据
|
||||||
|
public async Task<PageData<ChannelList>> GetAllBoxAddDrug(int? take, int? skip)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<ChannelList> channelLists = new List<ChannelList>();
|
||||||
|
var query = _connection.ChannelStock//.AsQueryable()
|
||||||
|
.Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
|
||||||
|
.GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
|
||||||
|
.Select(g => new
|
||||||
|
{
|
||||||
|
DrawerNo = g.Key.DrawerNo,
|
||||||
|
DrugId = g.Key.DrugId,
|
||||||
|
sumQuantity = g.Sum(cs => cs.Quantity)
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var queryChannelStock = _connection.ChannelStock.AsQueryable()
|
||||||
|
.Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
|
||||||
|
.LoadWith(cs => cs.Drug).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
var queryList = await _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId == _setting.boxMachineId).ToListAsync();
|
||||||
|
for (int i = 0; i < queryList.Count; i++)
|
||||||
|
{
|
||||||
|
foreach (var item in query)
|
||||||
|
{
|
||||||
|
if (queryList[i].DrawerNo == item.DrawerNo)
|
||||||
|
{
|
||||||
|
ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
|
||||||
|
if (stock != null)
|
||||||
|
{
|
||||||
|
stock.NeedQuantity = stock.BaseQuantity-item.sumQuantity;
|
||||||
|
queryList[i].ChannelStocks.Add(stock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (queryList[i].ChannelStocks != null && queryList[i].ChannelStocks.Count > 0)
|
||||||
|
{
|
||||||
|
channelLists.Add(queryList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pagedData = channelLists.Count;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return new PageData<ChannelList>()
|
||||||
|
{
|
||||||
|
|
||||||
|
TotalDesserts = pagedData,
|
||||||
|
Desserts = channelLists
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取药箱中补药数据失败{ex.Message}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//手术室药箱补药获取毒麻柜中的药品信息
|
||||||
|
public async Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<BoxTakeVo> tempData = new();
|
||||||
|
List<BoxTakeVo> tempData2 = new();
|
||||||
|
var flag = true;
|
||||||
|
for (int i = 0; i < cl.ChannelStocks.Count; i++)
|
||||||
|
{
|
||||||
|
ChannelStock boxCs = cl.ChannelStocks[i];
|
||||||
|
// 当前药品取药数量
|
||||||
|
var Quantity = boxCs.NeedQuantity;
|
||||||
|
List<ChannelStock> stockList = await _connection.ChannelStock
|
||||||
|
.Where(cs=>cs.MachineId==_setting.machineId&&cs.DrawerType==1&&cs.DrugId==boxCs.DrugId&&cs.Quantity>0&&cs.ManuNo!=null)
|
||||||
|
.AsQueryable()
|
||||||
|
.OrderBy(cs=>cs.EffDate).ToListAsync();
|
||||||
|
|
||||||
|
// 当前药品的库存总量
|
||||||
|
var total = stockList.Sum(current => current.Quantity);
|
||||||
|
|
||||||
|
tempData2.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = Quantity
|
||||||
|
});
|
||||||
|
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
// 盘点库存是否足够
|
||||||
|
if (total > Quantity)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (var j = 0; Quantity > 0; j++)
|
||||||
|
{
|
||||||
|
ChannelStock stock = stockList[j];
|
||||||
|
if (Quantity > stock.Quantity)
|
||||||
|
{
|
||||||
|
// 取药数量大于库存
|
||||||
|
tempData.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
BoxDetail= boxCs,
|
||||||
|
ChannelStock = stock,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = stock.Quantity,
|
||||||
|
});
|
||||||
|
Quantity -= stock.Quantity;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//取药数量小于库存
|
||||||
|
tempData.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
BoxDetail = boxCs,
|
||||||
|
ChannelStock = stock,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = Quantity,
|
||||||
|
});
|
||||||
|
Quantity = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 库存不足
|
||||||
|
flag = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
return tempData;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return tempData2;
|
||||||
|
}
|
||||||
|
return tempData;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取数据异常{ex.Message}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//手术室药箱补药完成
|
||||||
|
public async Task<bool> BoxTakeFinish(List<BoxTakeVo> datas)
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
|
var flag = true;
|
||||||
|
// 更新处方状态
|
||||||
|
//int r1 = _connection.ChannelStock.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo)
|
||||||
|
// .Set(oi => oi.Status, 1)
|
||||||
|
// .Update();
|
||||||
|
//if (!(r1 > 0))
|
||||||
|
//{
|
||||||
|
// flag = false;
|
||||||
|
// logger.Error("处方取药完成更新处方状态失败");
|
||||||
|
// _connection.RollbackTransaction();
|
||||||
|
// return flag;
|
||||||
|
//}
|
||||||
|
for (var i = 0; i < datas.Count; i++)
|
||||||
|
{
|
||||||
|
var boxTakeVo = datas[i];
|
||||||
|
var EffDate = boxTakeVo.ChannelStock.EffDate;
|
||||||
|
if (!DateTime.TryParse(boxTakeVo.ChannelStock.EffDate, out DateTime dEffDate))
|
||||||
|
{
|
||||||
|
//效期转换出错
|
||||||
|
if (boxTakeVo.ChannelStock.EffDate != null)
|
||||||
|
{
|
||||||
|
string[] idate = boxTakeVo.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()
|
||||||
|
{
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
DrawerNo = boxTakeVo.ChannelStock.DrawerNo,
|
||||||
|
ColNo = boxTakeVo.ChannelStock.ColNo,
|
||||||
|
DrugId = boxTakeVo.ChannelStock.DrugId,
|
||||||
|
ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
||||||
|
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||||
|
OperationTime = DateTime.Now,
|
||||||
|
Type = 2,
|
||||||
|
Quantity = boxTakeVo.GetQuantity,
|
||||||
|
Operator = _globalStateService.Operator.Id,
|
||||||
|
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||||||
|
InvoiceId = boxTakeVo.BoxDetail.Id.ToString(),
|
||||||
|
});
|
||||||
|
// 更新库存
|
||||||
|
int r = _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.ChannelStock.Id)
|
||||||
|
.Set(cs => cs.Quantity, boxTakeVo.ChannelStock.Quantity - boxTakeVo.GetQuantity)
|
||||||
|
.Update();
|
||||||
|
#region 保存账册,给药箱补药不记录出库账册
|
||||||
|
// 获取更新完库存之后的药品库存
|
||||||
|
//List<ChannelStock> list = await _connection.ChannelStock.AsQueryable()
|
||||||
|
// .InnerJoin(
|
||||||
|
// _connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1),
|
||||||
|
// (cs, cl) => cs.ListId == cl.Id,
|
||||||
|
// (cs, cl) => cs
|
||||||
|
// )
|
||||||
|
// .Where(cs => cs.DrugId.Equals(boxTakeVo.ChannelStock.DrugId))
|
||||||
|
// .ToListAsync();
|
||||||
|
// 保存账册,给药箱补药不记录出库账册
|
||||||
|
//int acid = _connection.InsertWithInt32Identity(new AccountBook()
|
||||||
|
//{
|
||||||
|
// MachineId = _setting.machineId,
|
||||||
|
// DrugId = boxTakeVo.ChannelStock.DrugId,
|
||||||
|
// ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
||||||
|
// EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||||
|
// OperationTime = DateTime.Now,
|
||||||
|
// Type = 2,
|
||||||
|
// OutQuantity = boxTakeVo.GetQuantity,
|
||||||
|
// AddQuantity = 0,
|
||||||
|
// Operator = _globalStateService.Operator.Id,
|
||||||
|
// Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||||||
|
// ManuStock = list.Where(it => it.ManuNo == boxTakeVo.ChannelStock.ManuNo).Sum(it => it.Quantity),
|
||||||
|
// TotalStock = list.Sum(it => it.Quantity),
|
||||||
|
// //InvoiceId = orderTakeVo.OrderDetail.Id.ToString()
|
||||||
|
//});
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//更新药箱中的药品数量
|
||||||
|
int boxID = _connection.Insert(new ChannelStock() {
|
||||||
|
Id = Guid.NewGuid().ToString(),
|
||||||
|
ListId = boxTakeVo.BoxDetail.Id,
|
||||||
|
MachineId = _setting.boxMachineId,
|
||||||
|
DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
|
||||||
|
AddToQuantity = boxTakeVo.GetQuantity,
|
||||||
|
NeedQuantity=0,
|
||||||
|
DrugId = boxTakeVo.ChannelStock.DrugId,
|
||||||
|
ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
||||||
|
EffDate= boxTakeVo.ChannelStock.EffDate,
|
||||||
|
BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
|
||||||
|
BoardType = boxTakeVo.BoxDetail.BoardType,
|
||||||
|
BoxState= 2 //补药完成
|
||||||
|
});
|
||||||
|
// 手术室药箱入库记录
|
||||||
|
int boxMId = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||||
|
{
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
|
||||||
|
DrugId = boxTakeVo.ChannelStock.DrugId,
|
||||||
|
ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
||||||
|
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||||
|
OperationTime = DateTime.Now,
|
||||||
|
Type = 1,
|
||||||
|
Quantity = boxTakeVo.GetQuantity,
|
||||||
|
Operator = _globalStateService.Operator.Id,
|
||||||
|
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||||||
|
InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
|
||||||
|
});
|
||||||
|
int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxTakeVo.BoxDetail.DrugId)).Sum(p => p.BaseQuantity);
|
||||||
|
int list=_connection.ChannelList.Where(cl => cl.Id == boxTakeVo.BoxDetail.Id)
|
||||||
|
.Set(cl => cl.TotalQuantity, totalQuantity)
|
||||||
|
.Update();
|
||||||
|
int delResutl = await _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.BoxDetail.Id).DeleteAsync();
|
||||||
|
if (mid > 0 && r > 0 && boxID > 0&& boxMId>0&& delResutl>0&& list>0)
|
||||||
|
{
|
||||||
|
if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5"))
|
||||||
|
{
|
||||||
|
await _portUtil.WriteQuantityMethod(boxTakeVo.ChannelStock.Quantity - boxTakeVo.GetQuantity, boxTakeVo.ChannelStock.DrawerNo, boxTakeVo.ChannelStock.ColNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flag = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
_connection.CommitTransaction();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error("处方取药完成保存数据库失败,错误:" + ex.Message);
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//手术室药箱入库
|
||||||
|
public async Task<PageData<ChannelList>> GetBoxWaitInfo(int? take, int? skip)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<ChannelList> channelLists = new List<ChannelList>();
|
||||||
|
var query = _connection.ChannelStock//.AsQueryable()
|
||||||
|
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 2)
|
||||||
|
.GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
|
||||||
|
.Select(g => new
|
||||||
|
{
|
||||||
|
DrawerNo = g.Key.DrawerNo,
|
||||||
|
DrugId = g.Key.DrugId,
|
||||||
|
sumQuantity = g.Sum(cs => cs.Quantity)
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var queryChannelStock = _connection.ChannelStock.AsQueryable()
|
||||||
|
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 2)
|
||||||
|
.LoadWith(cs => cs.Drug).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
var queryList = await _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId == _setting.boxMachineId).ToListAsync();
|
||||||
|
for (int i = 0; i < queryList.Count; i++)
|
||||||
|
{
|
||||||
|
foreach (var item in query)
|
||||||
|
{
|
||||||
|
if (queryList[i].DrawerNo == item.DrawerNo)
|
||||||
|
{
|
||||||
|
ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
|
||||||
|
if (stock != null)
|
||||||
|
{
|
||||||
|
stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity;
|
||||||
|
queryList[i].ChannelStocks.Add(stock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (queryList[i].ChannelStocks != null && queryList[i].ChannelStocks.Count > 0)
|
||||||
|
{
|
||||||
|
channelLists.Add(queryList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pagedData = channelLists.Count;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return new PageData<ChannelList>()
|
||||||
|
{
|
||||||
|
|
||||||
|
TotalDesserts = pagedData,
|
||||||
|
Desserts = channelLists
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取药箱中补药数据失败{ex.Message}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//手术室药箱入库获取待入库明细
|
||||||
|
public async Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<BoxTakeVo> tempData = new();
|
||||||
|
List<BoxTakeVo> tempData2 = new();
|
||||||
|
var flag = true;
|
||||||
|
for (int i = 0; i < cl.ChannelStocks.Count; i++)
|
||||||
|
{
|
||||||
|
ChannelStock boxCs = cl.ChannelStocks[i];
|
||||||
|
// 当前药品取药数量
|
||||||
|
var Quantity = boxCs.NeedQuantity;
|
||||||
|
List<ChannelStock> stockList = await _connection.ChannelStock
|
||||||
|
.Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType == 1 && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
|
||||||
|
.AsQueryable()
|
||||||
|
.OrderBy(cs => cs.EffDate).ToListAsync();
|
||||||
|
|
||||||
|
// 当前药品的库存总量
|
||||||
|
var total = stockList.Sum(current => current.Quantity);
|
||||||
|
|
||||||
|
tempData2.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = Quantity
|
||||||
|
});
|
||||||
|
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
// 盘点库存是否足够
|
||||||
|
if (total > Quantity)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (var j = 0; Quantity > 0; j++)
|
||||||
|
{
|
||||||
|
ChannelStock stock = stockList[j];
|
||||||
|
if (Quantity > stock.Quantity)
|
||||||
|
{
|
||||||
|
// 取药数量大于库存
|
||||||
|
tempData.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
BoxDetail = boxCs,
|
||||||
|
ChannelStock = stock,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = stock.Quantity,
|
||||||
|
});
|
||||||
|
Quantity -= stock.Quantity;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//取药数量小于库存
|
||||||
|
tempData.Add(new BoxTakeVo()
|
||||||
|
{
|
||||||
|
Drug = boxCs.Drug,
|
||||||
|
BoxDetail = boxCs,
|
||||||
|
ChannelStock = stock,
|
||||||
|
StockQuantity = total,
|
||||||
|
Quantity = Quantity,
|
||||||
|
});
|
||||||
|
Quantity = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 库存不足
|
||||||
|
flag = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
return tempData;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return tempData2;
|
||||||
|
}
|
||||||
|
return tempData;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取数据异常{ex.Message}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,19 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
|
||||||
public bool DeleteDrugManuNo(string id)
|
public bool DeleteDrugManuNo(string id)
|
||||||
{
|
{
|
||||||
return _connection.DrugManuNo.Where(dm => dm.Id == id).Delete() > 0;
|
if (!string.IsNullOrEmpty(id))
|
||||||
|
{
|
||||||
|
int manuNo= _connection.DrugManuNo.Where(dm => dm.Id == id).Count();
|
||||||
|
if (manuNo > 0)
|
||||||
|
{
|
||||||
|
return _connection.DrugManuNo.Where(dm => dm.Id == id).Delete() > 0;
|
||||||
|
}
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool UpdateDrugManuNo(DrugManuNo drugManuNo)
|
public bool UpdateDrugManuNo(DrugManuNo drugManuNo)
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
using LinqToDB;
|
||||||
|
using log4net;
|
||||||
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
|
using MasaBlazorApp3.Port;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
{
|
||||||
|
public class HkcChangeShiftsDao: IHkcChangeShiftsDao
|
||||||
|
{
|
||||||
|
private readonly AppDataConnection _connection;
|
||||||
|
private readonly SettingConfig _setting;
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(HkcChangeShifts));
|
||||||
|
private readonly PortUtil _portUtil;
|
||||||
|
public HkcChangeShiftsDao(AppDataConnection connection, IOptions<SettingConfig> setting, PortUtil portUtil)
|
||||||
|
{
|
||||||
|
_connection = connection;
|
||||||
|
_setting = setting.Value;
|
||||||
|
_portUtil = portUtil;
|
||||||
|
}
|
||||||
|
public async Task<PageData<HkcChangeShifts>> GetChangeShiftRecordAsync(DateTime start, DateTime end, int? take, int? skip)
|
||||||
|
{
|
||||||
|
var query = _connection.HkcChangeShifts.AsQueryable().Where(it => it.MachineId.Equals(_setting.machineId));
|
||||||
|
if (start != null && start != DateTime.MinValue)
|
||||||
|
{
|
||||||
|
query = query.Where(mr => mr.optDate > start);
|
||||||
|
}
|
||||||
|
if (end != null && end != DateTime.MinValue)
|
||||||
|
{
|
||||||
|
query = query.Where(mr => mr.optDate < end);
|
||||||
|
}
|
||||||
|
int pagedData = await query.CountAsync();
|
||||||
|
List<HkcChangeShifts> Records = await query
|
||||||
|
.OrderByDescending(mr => mr.optDate)
|
||||||
|
.Skip((int)skip)
|
||||||
|
.Take((int)take)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
return new PageData<HkcChangeShifts>() { Desserts = Records, TotalDesserts = pagedData };
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
using LinqToDB;
|
using LinqToDB;
|
||||||
using LinqToDB.SqlQuery;
|
using LinqToDB.SqlQuery;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
using log4net.Util;
|
||||||
using MasaBlazorApp3.DataAccess.Dao;
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
using MasaBlazorApp3.Pages;
|
using MasaBlazorApp3.Pages;
|
||||||
using MasaBlazorApp3.Pojo;
|
using MasaBlazorApp3.Pojo;
|
||||||
|
@ -28,7 +29,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
|
private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
|
||||||
private readonly PortUtil _portUtil;
|
private readonly PortUtil _portUtil;
|
||||||
|
|
||||||
public OrderInfoDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService,PortUtil portUtil)
|
public OrderInfoDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService, PortUtil portUtil)
|
||||||
{
|
{
|
||||||
_connection = connection;
|
_connection = connection;
|
||||||
_setting = setting.Value;
|
_setting = setting.Value;
|
||||||
|
@ -54,7 +55,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||||||
}
|
}
|
||||||
if(OrderDate !=null && OrderDate!= DateTime.MinValue)
|
if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||||||
{
|
{
|
||||||
query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date));
|
query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date));
|
||||||
}
|
}
|
||||||
|
@ -67,6 +68,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
int pagedData = await query.CountAsync();
|
int pagedData = await query.CountAsync();
|
||||||
|
|
||||||
List<OrderInfo> list = await query
|
List<OrderInfo> list = await query
|
||||||
|
.LoadWith(oi => oi.Detail)
|
||||||
|
.LoadWith(oi => oi.Detail.Drug)
|
||||||
.OrderBy((oi) => oi.RecvDate)
|
.OrderBy((oi) => oi.RecvDate)
|
||||||
.ThenBy((oi => oi.OrderNo))
|
.ThenBy((oi => oi.OrderNo))
|
||||||
.Skip((int)skip)
|
.Skip((int)skip)
|
||||||
|
@ -115,7 +118,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
query = query.Where(cs => cs.ManuNo.Equals(ManuNo));
|
query = query.Where(cs => cs.ManuNo.Equals(ManuNo));
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (!String.IsNullOrEmpty(ManuNo))
|
if (!String.IsNullOrEmpty(ManuNo))
|
||||||
{
|
{
|
||||||
|
@ -218,7 +222,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
_connection.BeginTransaction();
|
_connection.BeginTransaction();
|
||||||
var flag = true;
|
var flag = true;
|
||||||
// 更新处方状态
|
// 更新处方状态
|
||||||
int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo)
|
int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo)
|
||||||
.Set(oi => oi.Status, 1)
|
.Set(oi => oi.Status, 1)
|
||||||
.Update();
|
.Update();
|
||||||
if (!(r1 > 0))
|
if (!(r1 > 0))
|
||||||
|
@ -465,10 +469,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.Set(cs => cs.Status, 2)
|
.Set(cs => cs.Status, 2)
|
||||||
.Set(cs => cs.ReturnQuantity1, operationVo.data.Quantity).Update();
|
.Set(cs => cs.ReturnQuantity1, operationVo.data.Quantity).Update();
|
||||||
|
|
||||||
if(r2 > 0)
|
if (r2 > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
flag = false;
|
flag = false;
|
||||||
break;
|
break;
|
||||||
|
@ -540,7 +545,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
});
|
});
|
||||||
if (mid > 0 && r > 0 && acid > 0)
|
if (mid > 0 && r > 0 && acid > 0)
|
||||||
{
|
{
|
||||||
if(channelStock.BoardType.ToString().Contains("5"))
|
if (channelStock.BoardType.ToString().Contains("5"))
|
||||||
{
|
{
|
||||||
await _portUtil.WriteQuantityMethod(channelStock.Quantity - channelStock.ReturnQuantity, channelStock.DrawerNo, channelStock.ColNo);
|
await _portUtil.WriteQuantityMethod(channelStock.Quantity - channelStock.ReturnQuantity, channelStock.DrawerNo, channelStock.ColNo);
|
||||||
}
|
}
|
||||||
|
@ -573,5 +578,271 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取药箱中的用药信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="OrderrNo"></param>
|
||||||
|
/// <param name="OrderDate"></param>
|
||||||
|
/// <param name="take"></param>
|
||||||
|
/// <param name="skip"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip)
|
||||||
|
{
|
||||||
|
//var query = _connection.OrderInfo.AsQueryable();
|
||||||
|
|
||||||
|
//query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo);
|
||||||
|
|
||||||
|
var query2 = from od in _connection.OrderDetail
|
||||||
|
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
|
||||||
|
group od by od.OrderNo into temp
|
||||||
|
select new { temp.Key };
|
||||||
|
var query = from oi in _connection.OrderInfo
|
||||||
|
from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
|
||||||
|
select oi;
|
||||||
|
|
||||||
|
if (!String.IsNullOrEmpty(OrderrNo))
|
||||||
|
{
|
||||||
|
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||||||
|
}
|
||||||
|
if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||||||
|
{
|
||||||
|
query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date));
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Where(oi => oi.Status == 0);
|
||||||
|
query = query.Where(oi => oi.HisDispFlag == 0);
|
||||||
|
query = query.Where(oi => oi.CancelFlag == 0);
|
||||||
|
//query = query.Where(oi => oi.DoctorCode == box);
|
||||||
|
|
||||||
|
int pagedData = await query.CountAsync();
|
||||||
|
|
||||||
|
List<OrderInfo> list = await query
|
||||||
|
//.LoadWith(oi => oi.Detail)
|
||||||
|
//.LoadWith(oi => oi.Detail.Drug)
|
||||||
|
.OrderBy((oi) => oi.RecvDate)
|
||||||
|
.ThenBy((oi => oi.OrderNo))
|
||||||
|
.Skip((int)skip)
|
||||||
|
.Take((int)take)
|
||||||
|
.ToListAsync();
|
||||||
|
if (list != null && list.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
//list[i].Detail = await _connection.OrderDetail.AsQueryable()
|
||||||
|
// .Where(od => od.OrderNo == list[i].OrderNo)
|
||||||
|
// .LoadWith(od => od.Drug)
|
||||||
|
// .ToListAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PageData<OrderInfo>()
|
||||||
|
{
|
||||||
|
TotalDesserts = pagedData,
|
||||||
|
Desserts = list
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有药箱号
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="machineId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<int[]> GetDrawerNum(string machineId)
|
||||||
|
{
|
||||||
|
int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
|
||||||
|
return ints;
|
||||||
|
}
|
||||||
|
//核对处方
|
||||||
|
public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos,int DrawerNo)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
|
bool bFlag = true;
|
||||||
|
logger.Info($"管理员{_globalStateService.Operator.NickName}开始确认手麻单");
|
||||||
|
|
||||||
|
|
||||||
|
string empChannelStock = string.Empty;
|
||||||
|
|
||||||
|
for (int i = 0; i < selectedOrderInfos.Count; i++)
|
||||||
|
{
|
||||||
|
OrderInfo oi = selectedOrderInfos[i];
|
||||||
|
|
||||||
|
//更新处方状态
|
||||||
|
if (oi.state == 1)
|
||||||
|
{
|
||||||
|
int iUpdate= _connection.OrderInfo.Where(o=>o.OrderNo==oi.OrderNo).Set(o=>o.state,2).Update();
|
||||||
|
_connection.Insert(new OrderFinish()
|
||||||
|
{
|
||||||
|
OrderNo = oi.OrderNo,
|
||||||
|
PatientId = oi.PatientId,
|
||||||
|
Pharmacy = oi.Pharmacy,
|
||||||
|
State = 2,
|
||||||
|
//WinNo = DrawerNo + 1 + "号手术间",
|
||||||
|
Operator = _globalStateService.Operator.NickName,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
int drawerNo = DrawerNo + 1;
|
||||||
|
ChannelStock cs =_connection.ChannelStock.AsQueryable()
|
||||||
|
.Where(cs => cs.DrugId == oi.Detail.DrugId
|
||||||
|
&& cs.ManuNo == oi.Detail.SetManuNo
|
||||||
|
// && cs.EffDate == oi._OrderDetail.SetEffDate
|
||||||
|
&& cs.MachineId.Equals(_setting.boxMachineId)
|
||||||
|
&& cs.DrawerNo == drawerNo
|
||||||
|
&& cs.Quantity >= oi.Detail.Quantity).First();
|
||||||
|
if (cs == null)
|
||||||
|
{
|
||||||
|
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
cs.Quantity = cs.Quantity - oi.Detail.Quantity;
|
||||||
|
//cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
|
||||||
|
logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.Detail.Quantity}");
|
||||||
|
// 更新数据 库存信息
|
||||||
|
_connection.Update(cs);
|
||||||
|
|
||||||
|
// 获取更新完库存后的药品库存
|
||||||
|
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
|
||||||
|
.Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
|
||||||
|
.Where(it => it.DrugId.Equals(cs.DrugId))
|
||||||
|
.Where(it => it.ManuNo.Equals(cs.ManuNo))
|
||||||
|
.Where(it => it.DrawerType == 1)
|
||||||
|
.ToList();
|
||||||
|
if (cs != null)
|
||||||
|
{
|
||||||
|
_connection.Insert(new MachineRecord()
|
||||||
|
{
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
DrawerNo = cs.DrawerNo,
|
||||||
|
ColNo = cs.ColNo,
|
||||||
|
DrugId = cs.DrugId,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||||
|
Operator = _globalStateService.Operator?.Id,
|
||||||
|
Reviewer = _globalStateService.Reviewer?.Id,
|
||||||
|
OperationTime = DateTime.Now,
|
||||||
|
Quantity = oi.Detail.Quantity,
|
||||||
|
Type = 2,
|
||||||
|
InvoiceId = oi.OrderNo
|
||||||
|
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//查询上一条账册中的空瓶数
|
||||||
|
AccountBookG2 accountBookEmpty =_connection.AccountBookG2.AsQueryable()
|
||||||
|
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||||||
|
.Where(ab => ab.Type == 1 || ab.Type == 2)
|
||||||
|
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
||||||
|
.Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
|
||||||
|
//保存账册
|
||||||
|
int iInsertResult = _connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.Detail.DrugId,
|
||||||
|
Type = 2,
|
||||||
|
Department = oi.DeptName,
|
||||||
|
OrderNo = oi.OrderNo,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = cs.EffDate,
|
||||||
|
OutQuantity = oi.Detail.Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
CreateTime = DateTime.Now,
|
||||||
|
InvoiceNo = oi.OrderNo,
|
||||||
|
ManuStock = nowChannels.Sum(it => it.Quantity),
|
||||||
|
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.Detail.Quantity,
|
||||||
|
ShoushuJian = drawerNo.ToString()
|
||||||
|
});
|
||||||
|
//修改凌晨生成的日结存与总结存数据
|
||||||
|
AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
|
||||||
|
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||||||
|
.Where(ab => ab.Type == 3)
|
||||||
|
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
||||||
|
.Where(ab => ab.ManuNo == cs.ManuNo)
|
||||||
|
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
|
||||||
|
if (accountBookG2Day != null)
|
||||||
|
{
|
||||||
|
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity;
|
||||||
|
_connection.Update(accountBookG2Day);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
|
||||||
|
int iDayResult =_connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.Detail.DrugId,
|
||||||
|
Type = 3,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = cs.EffDate,
|
||||||
|
YQuantity = 0,
|
||||||
|
ManuStock = oi.Detail.Quantity,
|
||||||
|
TotalStock = oi.Detail.Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
InvoiceNo = "日结存"
|
||||||
|
});
|
||||||
|
if (iDayResult <= 0)
|
||||||
|
{
|
||||||
|
logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//修改凌晨生成的日结存与总结存数据
|
||||||
|
AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable()
|
||||||
|
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||||||
|
.Where(ab => ab.Type == 4)
|
||||||
|
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
||||||
|
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
|
||||||
|
if (accountBookG2Total != null)
|
||||||
|
{
|
||||||
|
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity;
|
||||||
|
_connection.Update(accountBookG2Total);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
|
||||||
|
int iTotalResult = _connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.Detail.DrugId,
|
||||||
|
Type = 4,
|
||||||
|
YQuantity = 0,
|
||||||
|
ManuStock = oi.Detail.Quantity,
|
||||||
|
TotalStock = oi.Detail.Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
InvoiceNo = "总结存"
|
||||||
|
});
|
||||||
|
if (iTotalResult <= 0)
|
||||||
|
{
|
||||||
|
logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单");
|
||||||
|
|
||||||
|
if (bFlag)
|
||||||
|
{
|
||||||
|
_connection.CommitTransaction();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
logger.Info($"核对处方异常{ex.Message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,307 @@
|
||||||
|
using LinqToDB;
|
||||||
|
using log4net;
|
||||||
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
|
using System.Numerics;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using ZstdSharp.Unsafe;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
{
|
||||||
|
public class PlanDao : IPlanDao
|
||||||
|
{
|
||||||
|
private AppDataConnection _connection;
|
||||||
|
private readonly SettingConfig _setting;
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(DrugInfoDao));
|
||||||
|
private GlobalStateService _globalStateService;
|
||||||
|
public PlanDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService)
|
||||||
|
{
|
||||||
|
_connection = connection;
|
||||||
|
_setting = setting.Value;
|
||||||
|
_globalStateService = globalStateService;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有套餐数据
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<PageMultiData<Plan, DrugInfo>> GetAllPlanInfo()
|
||||||
|
{
|
||||||
|
var query = _connection.Plan.AsQueryable();
|
||||||
|
|
||||||
|
List<Plan> list = await query.Where(p=>p.UseState==1)
|
||||||
|
.LoadWith(p => p._PlanDetails.Where(pd=>pd.UseState==1))
|
||||||
|
//.ThenLoad(p=>p._DrugInfo)
|
||||||
|
.OrderBy(r => r.Id)
|
||||||
|
.ToListAsync();
|
||||||
|
if (list != null && list.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.Count(); i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < list[i]._PlanDetails.Count(); j++)
|
||||||
|
{
|
||||||
|
list[i]._PlanDetails[j]._DrugInfo =
|
||||||
|
_connection.DrugInfo.AsQueryable().Where(di => di.DrugId == list[i]._PlanDetails[j].DrugId).First();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var other = _connection.DrugInfo.AsQueryable();
|
||||||
|
List<DrugInfo> drugInfos = await other
|
||||||
|
.LoadWith(di => di.Manus)
|
||||||
|
.OrderBy((di) => di.DrugId)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
int pagedData = await query.CountAsync();
|
||||||
|
return new PageMultiData<Plan, DrugInfo>()
|
||||||
|
{
|
||||||
|
|
||||||
|
TotalDesserts = pagedData,
|
||||||
|
Desserts = list,
|
||||||
|
Other = drugInfos
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 根据套餐ID获取套餐数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Plan> GetPlanById(int Id)
|
||||||
|
{
|
||||||
|
var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id&&p.UseState==1);
|
||||||
|
List<Plan> list = await query
|
||||||
|
.LoadWith(p => p._PlanDetails)
|
||||||
|
//.ThenLoad(p=>p._DrugInfo)
|
||||||
|
.OrderBy(r => r.Id)
|
||||||
|
.ToListAsync();
|
||||||
|
if (list != null && list.Count > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < list.Count(); i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < list[i]._PlanDetails.Count(); j++)
|
||||||
|
{
|
||||||
|
list[i]._PlanDetails[j]._DrugInfo =
|
||||||
|
_connection.DrugInfo.AsQueryable().Where(di => di.DrugId == list[i]._PlanDetails[j].DrugId).First();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新增套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="plan"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> InsertPlanInfo(Plan plan)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
plan.AddTime = DateTime.Now;
|
||||||
|
plan.OperatorUser = _globalStateService.Operator.Id;
|
||||||
|
plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
|
||||||
|
return _connection.InsertWithInt32Identity(plan) > 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
logger.Error($"添加套餐{plan.Name}失败,错误:" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="plan"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> UpdatePlanInfo(Plan plan)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var iResult = _connection.Plan
|
||||||
|
.Where(p => p.Id == plan.Id)
|
||||||
|
.Set(p => p.Name, plan.Name)
|
||||||
|
.Set(p => p.Description, plan.Description);
|
||||||
|
return iResult.Update() > 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error($"修改套餐{plan.Name}失败,错误:" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 删除套餐
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="planId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> DeletePlanInfo(int planId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
|
bool flag = false;
|
||||||
|
//查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
|
||||||
|
int hasCount = _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.machineId).Count();
|
||||||
|
if (hasCount > 0)
|
||||||
|
{
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.Error($"删除套餐{planId}");
|
||||||
|
//查询该套餐下是否有药品,如果有则一并删除
|
||||||
|
int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
|
||||||
|
int pdResult = 1;
|
||||||
|
if (iHasPd > 0)
|
||||||
|
{
|
||||||
|
pdResult = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).Update();
|
||||||
|
}
|
||||||
|
int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update();
|
||||||
|
if (pdResult > 0 && pResult > 0)
|
||||||
|
{
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
_connection.CommitTransaction();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error($"修改套餐失败,错误:" + ex.Message);
|
||||||
|
_connection.RollbackTransaction();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 向套餐中添加药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> AddPlanDetail(PlanDetails details)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(details.DrugId))
|
||||||
|
{
|
||||||
|
int id = _connection.InsertWithInt32Identity(details);
|
||||||
|
details.Id = id;
|
||||||
|
return id > 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error($"添加药品{details._DrugInfo.DrugName}失败,错误:" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 修改套餐中的药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> UpdatePlanDetail(PlanDetails details)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var iResult = _connection.PlanDetails
|
||||||
|
.Where(p => p.Id == details.Id)
|
||||||
|
.Set(p => p.DrugId, details._DrugInfo.DrugId)
|
||||||
|
.Set(p => p.BaseQuantity, details.BaseQuantity);
|
||||||
|
return iResult.Update() > 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error($"修改药品{details._DrugInfo.DrugName}失败,错误:" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除套餐中的药品
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="details"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<bool> DeletePlanDetail(PlanDetails detail)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}");
|
||||||
|
return _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p=>p.UseState,0).Update() > 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Error($"添加药品失败,错误:" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckDrugById(PlanDetails details)
|
||||||
|
{
|
||||||
|
if (details._DrugInfo.DrugId != null)
|
||||||
|
{
|
||||||
|
//查询该药品是否已在套餐中存在,存在则不再添加
|
||||||
|
PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId&&p.UseState==1).FirstOrDefault();
|
||||||
|
|
||||||
|
if (details.Id > 0)
|
||||||
|
{
|
||||||
|
//修改原数据
|
||||||
|
if (pdDrug != null && pdDrug.Id == details.Id)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//新增数据
|
||||||
|
if (pdDrug != null)
|
||||||
|
{
|
||||||
|
return !(pdDrug.Id > 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//return !(hasCount > 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using LinqToDB;
|
||||||
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
|
using MasaBlazorApp3.Pojo;
|
||||||
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
|
using MasaBlazorApp3.Port;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
{
|
||||||
|
public class SettingManuDao : ISettingManuDao
|
||||||
|
{
|
||||||
|
private AppDataConnection _connection;
|
||||||
|
private readonly SettingConfig _setting;
|
||||||
|
private GlobalStateService _globalStateService;
|
||||||
|
public SettingManuDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService, PortUtil portUtil)
|
||||||
|
{
|
||||||
|
_globalStateService = globalStateService;
|
||||||
|
_connection = connection;
|
||||||
|
_setting = setting.Value;
|
||||||
|
}
|
||||||
|
public async Task<List<SettingManu>> GetMenuItemsAsync()
|
||||||
|
{
|
||||||
|
var query = _connection.SettingManu.AsQueryable();
|
||||||
|
|
||||||
|
|
||||||
|
return await query
|
||||||
|
.OrderBy((sm) => sm.Id)
|
||||||
|
.ToListAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,147 @@
|
||||||
|
@page "/Box/BoxAddBox"
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@@keyframes shake {
|
||||||
|
0% {
|
||||||
|
opacity: 1;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
25% {
|
||||||
|
opacity: 1;
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
75% {
|
||||||
|
opacity: 1;
|
||||||
|
color: crimson;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rz-custom-header {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shaky-text {
|
||||||
|
animation: shake 2s infinite ease-in-out;
|
||||||
|
/* 你可以根据需要调整动画的持续时间和迭代次数 */
|
||||||
|
transition: color 0.5s linear,opacity 0.5s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
|
||||||
|
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
||||||
|
IsLoading="@isLoading"
|
||||||
|
RowRender="@RowRender"
|
||||||
|
EmptyText="无数据"
|
||||||
|
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
||||||
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
|
SelectionMode="DataGridSelectionMode.Single"
|
||||||
|
ExpandMode="DataGridExpandMode.Multiple">
|
||||||
|
<Template Context="cs">
|
||||||
|
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Title="药品名称" Property="Drug.DrugName">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="规格" Property="Drug.DrugSpec">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="厂家" Property="Drug.Manufactory">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
@* <RadzenDataGridColumn Title="批次" Property="ManuNo"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="效期" Property="EffDate">
|
||||||
|
</RadzenDataGridColumn> *@
|
||||||
|
<RadzenDataGridColumn Title="基数" Property="BaseQuantity">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="需补药数" Property="NeedQuantity">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</Template>
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Frozen="true" Width="200px" Title="药箱号" Property="DrawerNo">
|
||||||
|
<Template Context="DrawerNo">
|
||||||
|
@DrawerNo.DrawerNo 号药箱
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="总库存" Property="TotalQuantity"></RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject IChannelListDao channelStockDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
RadzenDataGrid<ChannelList> grid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
private IEnumerable<ChannelList>? _forecasts;
|
||||||
|
DateTime start;
|
||||||
|
DateTime end;
|
||||||
|
|
||||||
|
IList<ChannelList> selectedChannelLists;
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await channelStockDao.GetBoxWaitInfo(10, 0);
|
||||||
|
// Update the Data property
|
||||||
|
_forecasts = result.Desserts;
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
|
{
|
||||||
|
base.OnAfterRender(firstRender);
|
||||||
|
|
||||||
|
if (firstRender)
|
||||||
|
{
|
||||||
|
// await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RowRender(RowRenderEventArgs<ChannelList> args)
|
||||||
|
{
|
||||||
|
args.Expandable = args.Data.ChannelStocks.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
async void OnRowSelect(ChannelList cl)
|
||||||
|
{
|
||||||
|
var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
|
||||||
|
$"{cl.DrawerNo}号药箱取药",
|
||||||
|
new Dictionary<string, object>() { { "boxChannelList", cl } },
|
||||||
|
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
|
||||||
|
);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async void StockExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async void AccountBookExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,318 @@
|
||||||
|
@page "/Box/BoxAddBoxDetail"
|
||||||
|
@using MasaBlazorApp3.Pojo.Config;
|
||||||
|
@using MasaBlazorApp3.Pojo.Vo;
|
||||||
|
@using MasaBlazorApp3.Util;
|
||||||
|
@using Microsoft.Extensions.Options;
|
||||||
|
@using Newtonsoft.Json;
|
||||||
|
@using log4net;
|
||||||
|
|
||||||
|
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
|
||||||
|
<RadzenStack>
|
||||||
|
@if (CanTakeDrug)
|
||||||
|
{
|
||||||
|
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock" Title="库位">
|
||||||
|
<Template>
|
||||||
|
@context.ChannelStock.DrawerNo - @context.ChannelStock.ColNo
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock.ManuNo" Title="批次" />
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock.EffDate" Title="效期" />
|
||||||
|
<RadzenDataGridColumn Property="Quantity" Title="数量" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
|
||||||
|
<RadzenDataGridColumn Property="Quantity" Title="取药数量" />
|
||||||
|
<RadzenDataGridColumn Property="StockQuantity" Title="库存" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</RadzenStack>
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
|
||||||
|
@if (status < 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@OpenDrawer" Disabled="!CanTakeDrug" IsBusy="status > 0" BusyText="取药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Text="取药" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
@if (status == 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@TakeFinish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
@if (status <= 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenStack>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject Radzen.DialogService dialogService;
|
||||||
|
@inject IChannelListDao channelListDao;
|
||||||
|
@inject IOptions<DrawerConfig> setting;
|
||||||
|
@inject NotificationService _message
|
||||||
|
@inject PortUtil PortUtil;
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
|
||||||
|
|
||||||
|
int status;
|
||||||
|
|
||||||
|
[Parameter] public ChannelList boxChannelList { get; set; }
|
||||||
|
private bool CanTakeDrug = true;
|
||||||
|
|
||||||
|
public List<BoxTakeVo> data { get; set; }
|
||||||
|
//称重取药数量
|
||||||
|
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
//开抽屉前操作标识
|
||||||
|
List<string> DrawerNoColNoList = new List<string>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
data = await channelListDao.getTakeInfoByBox(boxChannelList);
|
||||||
|
// 如果有【stockQuantity】字段说明有药品库存不足
|
||||||
|
if (data.Any(it => it.ChannelStock == null))
|
||||||
|
{
|
||||||
|
CanTakeDrug = false;
|
||||||
|
}
|
||||||
|
base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task OpenDrawer()
|
||||||
|
{
|
||||||
|
this.status = 1;
|
||||||
|
// 解析需要打开的抽屉列表
|
||||||
|
List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
|
||||||
|
|
||||||
|
// 根据抽屉类型来决定打开前是否需要查询数量
|
||||||
|
var promiseUtil = new PromiseUtil<int>();
|
||||||
|
|
||||||
|
await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
|
||||||
|
{
|
||||||
|
var orderTakeVo = drawerNos[options._data];
|
||||||
|
var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (this.status == 0)
|
||||||
|
{
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
// 开启抽屉
|
||||||
|
else if (this.status == 1)
|
||||||
|
{
|
||||||
|
if (orderTakeVo.Status == 0)
|
||||||
|
{
|
||||||
|
// 判断是否为单支抽屉
|
||||||
|
if (setting.Value.single.Contains(drawerNo))
|
||||||
|
{
|
||||||
|
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||||
|
orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||||
|
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||||
|
|
||||||
|
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 (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
|
||||||
|
{
|
||||||
|
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||||
|
{
|
||||||
|
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
||||||
|
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||||
|
|
||||||
|
data[i].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 = data[i].ChannelStock.DrawerNo;
|
||||||
|
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
||||||
|
await Task.Delay(200);
|
||||||
|
}
|
||||||
|
DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
|
||||||
|
orderTakeVo.Status = 1;
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
||||||
|
);
|
||||||
|
logger.Info($"抽屉打开失败");
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
RestData();
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检测状态
|
||||||
|
else if (orderTakeVo.Status == 1)
|
||||||
|
{
|
||||||
|
// 查询抽屉是否为关闭状态
|
||||||
|
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||||
|
// 关闭则改变状态并终止循环
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
|
||||||
|
data.ForEach(cl =>
|
||||||
|
{
|
||||||
|
if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||||
|
{
|
||||||
|
cl.GetQuantity = cl.Quantity;
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
orderTakeVo.Status = 2;
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
if (options._data == drawerNos.Count - 1)
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
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 = data[i].ChannelStock.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] = data[i].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("取消保存");
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
options._data += 1;
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next(); // continue iteration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
RestData();
|
||||||
|
logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
|
||||||
|
);
|
||||||
|
if (setting.Value.single.Contains(drawerNo))
|
||||||
|
{
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
}
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void RestData()
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
this.status = 0;
|
||||||
|
data.ForEach(it =>
|
||||||
|
{
|
||||||
|
it.Status = 0;
|
||||||
|
it.BeforeQuantity = new int[9];
|
||||||
|
it.AfterQuantity = new int[9];
|
||||||
|
});
|
||||||
|
this.WeightFinnalQuantity = new int[9];
|
||||||
|
DrawerNoColNoList.Clear();
|
||||||
|
}
|
||||||
|
void Cancel()
|
||||||
|
{
|
||||||
|
RestData();
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
async Task TakeFinish()
|
||||||
|
{
|
||||||
|
|
||||||
|
// 保存账册、操作记录
|
||||||
|
var b = await channelListDao.BoxTakeFinish(data);
|
||||||
|
if (!b)
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
||||||
|
logger.Error($"手术室药箱取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}");
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
//重置状态
|
||||||
|
this.RestData();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,329 @@
|
||||||
|
@page "/Box/BoxAddDetail"
|
||||||
|
@using MasaBlazorApp3.Pojo.Config;
|
||||||
|
@using MasaBlazorApp3.Pojo.Vo;
|
||||||
|
@using MasaBlazorApp3.Util;
|
||||||
|
@using Microsoft.Extensions.Options;
|
||||||
|
@using Newtonsoft.Json;
|
||||||
|
@using log4net;
|
||||||
|
|
||||||
|
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
|
||||||
|
<RadzenStack>
|
||||||
|
@* <RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border)" Orientation="Orientation.Horizontal" Gap="1rem">
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">处方号:</RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(order?.OrderNo)</b></RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">患者姓名:</RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(order?.PatientName)</b></RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">性别:</RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(order?.Sex)</b></RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">年龄:</RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(order?.Age)</b></RadzenText>
|
||||||
|
|
||||||
|
</RadzenStack> *@
|
||||||
|
@if (CanTakeDrug)
|
||||||
|
{
|
||||||
|
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock" Title="库位">
|
||||||
|
<Template>
|
||||||
|
@context.ChannelStock.DrawerNo - @context.ChannelStock.ColNo
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock.ManuNo" Title="批次" />
|
||||||
|
<RadzenDataGridColumn Property="ChannelStock.EffDate" Title="效期" />
|
||||||
|
<RadzenDataGridColumn Property="Quantity" Title="数量" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
|
||||||
|
<RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
|
||||||
|
<RadzenDataGridColumn Property="Quantity" Title="取药数量" />
|
||||||
|
<RadzenDataGridColumn Property="StockQuantity" Title="库存" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</RadzenStack>
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
|
||||||
|
@if (status < 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@OpenDrawer" Disabled="!CanTakeDrug" IsBusy="status > 0" BusyText="取药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Text="取药" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
@if (status == 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@TakeFinish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
@if (status <= 2)
|
||||||
|
{
|
||||||
|
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
||||||
|
}
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenStack>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject Radzen.DialogService dialogService;
|
||||||
|
@inject IChannelListDao channelListDao;
|
||||||
|
@inject IOptions<DrawerConfig> setting;
|
||||||
|
@inject NotificationService _message
|
||||||
|
@inject PortUtil PortUtil;
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
|
||||||
|
|
||||||
|
int status;
|
||||||
|
|
||||||
|
[Parameter] public ChannelList boxChannelList { get; set; }
|
||||||
|
private bool CanTakeDrug = true;
|
||||||
|
|
||||||
|
public List<BoxTakeVo> data { get; set; }
|
||||||
|
//称重取药数量
|
||||||
|
int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
//开抽屉前操作标识
|
||||||
|
List<string> DrawerNoColNoList = new List<string>();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
data = await channelListDao.getTakeInfoByBox(boxChannelList);
|
||||||
|
// 如果有【stockQuantity】字段说明有药品库存不足
|
||||||
|
if (data.Any(it => it.ChannelStock == null))
|
||||||
|
{
|
||||||
|
CanTakeDrug = false;
|
||||||
|
}
|
||||||
|
base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task OpenDrawer()
|
||||||
|
{
|
||||||
|
this.status = 1;
|
||||||
|
// 解析需要打开的抽屉列表
|
||||||
|
List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
|
||||||
|
|
||||||
|
// 根据抽屉类型来决定打开前是否需要查询数量
|
||||||
|
var promiseUtil = new PromiseUtil<int>();
|
||||||
|
|
||||||
|
await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
|
||||||
|
{
|
||||||
|
var orderTakeVo = drawerNos[options._data];
|
||||||
|
var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (this.status == 0)
|
||||||
|
{
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
// 开启抽屉
|
||||||
|
else if (this.status == 1)
|
||||||
|
{
|
||||||
|
if (orderTakeVo.Status == 0)
|
||||||
|
{
|
||||||
|
// 判断是否为单支抽屉
|
||||||
|
if (setting.Value.single.Contains(drawerNo))
|
||||||
|
{
|
||||||
|
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||||
|
orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||||
|
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||||
|
|
||||||
|
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 (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
|
||||||
|
{
|
||||||
|
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||||
|
{
|
||||||
|
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
||||||
|
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||||
|
|
||||||
|
data[i].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 = data[i].ChannelStock.DrawerNo;
|
||||||
|
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
||||||
|
await Task.Delay(200);
|
||||||
|
}
|
||||||
|
DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
|
||||||
|
orderTakeVo.Status = 1;
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
||||||
|
);
|
||||||
|
logger.Info($"抽屉打开失败");
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
RestData();
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检测状态
|
||||||
|
else if (orderTakeVo.Status == 1)
|
||||||
|
{
|
||||||
|
// 查询抽屉是否为关闭状态
|
||||||
|
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||||
|
// 关闭则改变状态并终止循环
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
|
||||||
|
data.ForEach(cl =>
|
||||||
|
{
|
||||||
|
if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||||
|
{
|
||||||
|
cl.GetQuantity = cl.Quantity;
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
orderTakeVo.Status = 2;
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
if (options._data == drawerNos.Count - 1)
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
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 = data[i].ChannelStock.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] = data[i].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("取消保存");
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
options._data += 1;
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next(); // continue iteration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
RestData();
|
||||||
|
logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
|
||||||
|
);
|
||||||
|
if (setting.Value.single.Contains(drawerNo))
|
||||||
|
{
|
||||||
|
PortUtil.AllLightOff();
|
||||||
|
}
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void RestData()
|
||||||
|
{
|
||||||
|
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
this.status = 0;
|
||||||
|
data.ForEach(it =>
|
||||||
|
{
|
||||||
|
it.Status = 0;
|
||||||
|
it.BeforeQuantity = new int[9];
|
||||||
|
it.AfterQuantity = new int[9];
|
||||||
|
});
|
||||||
|
this.WeightFinnalQuantity = new int[9];
|
||||||
|
DrawerNoColNoList.Clear();
|
||||||
|
}
|
||||||
|
void Cancel()
|
||||||
|
{
|
||||||
|
RestData();
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
async Task TakeFinish()
|
||||||
|
{
|
||||||
|
|
||||||
|
// 保存账册、操作记录
|
||||||
|
var b = await channelListDao.BoxTakeFinish(data);
|
||||||
|
if (!b)
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
||||||
|
logger.Error($"手术室药箱取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}");
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 关闭弹窗
|
||||||
|
dialogService.Close(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
//重置状态
|
||||||
|
this.RestData();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,146 @@
|
||||||
|
@page "/Box/BoxAdd"
|
||||||
|
<style>
|
||||||
|
@@keyframes shake {
|
||||||
|
0% {
|
||||||
|
opacity: 1;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
25% {
|
||||||
|
opacity: 1;
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
opacity: 0;
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
75% {
|
||||||
|
opacity: 1;
|
||||||
|
color: crimson;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rz-custom-header {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shaky-text {
|
||||||
|
animation: shake 2s infinite ease-in-out;
|
||||||
|
/* 你可以根据需要调整动画的持续时间和迭代次数 */
|
||||||
|
transition: color 0.5s linear,opacity 0.5s linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
|
||||||
|
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
||||||
|
IsLoading="@isLoading"
|
||||||
|
RowRender="@RowRender"
|
||||||
|
EmptyText="无数据"
|
||||||
|
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
||||||
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
|
SelectionMode="DataGridSelectionMode.Single"
|
||||||
|
ExpandMode="DataGridExpandMode.Multiple">
|
||||||
|
<Template Context="cs">
|
||||||
|
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Title="药品名称" Property="Drug.DrugName">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="规格" Property="Drug.DrugSpec">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="厂家" Property="Drug.Manufactory">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
@* <RadzenDataGridColumn Title="批次" Property="ManuNo"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="效期" Property="EffDate">
|
||||||
|
</RadzenDataGridColumn> *@
|
||||||
|
<RadzenDataGridColumn Title="基数" Property="BaseQuantity">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="需补药数" Property="NeedQuantity">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</Template>
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Frozen="true" Width="200px" Title="药箱号" Property="DrawerNo">
|
||||||
|
<Template Context="DrawerNo">
|
||||||
|
@DrawerNo.DrawerNo 号药箱
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="总库存" Property="TotalQuantity"></RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject IChannelListDao channelStockDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
RadzenDataGrid<ChannelList> grid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
private IEnumerable<ChannelList>? _forecasts;
|
||||||
|
DateTime start;
|
||||||
|
DateTime end;
|
||||||
|
|
||||||
|
IList<ChannelList> selectedChannelLists;
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await channelStockDao.GetAllBoxAddDrug(10, 0);
|
||||||
|
// Update the Data property
|
||||||
|
_forecasts = result.Desserts;
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
|
{
|
||||||
|
base.OnAfterRender(firstRender);
|
||||||
|
|
||||||
|
if (firstRender)
|
||||||
|
{
|
||||||
|
// await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RowRender(RowRenderEventArgs<ChannelList> args)
|
||||||
|
{
|
||||||
|
args.Expandable = args.Data.ChannelStocks.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
async void OnRowSelect(ChannelList cl)
|
||||||
|
{
|
||||||
|
var b = await dialogService.OpenAsync<BoxAddDetailDialog>(
|
||||||
|
$"{cl.DrawerNo}号药箱取药",
|
||||||
|
new Dictionary<string, object>() { { "boxChannelList", cl } },
|
||||||
|
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
|
||||||
|
);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async void StockExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async void AccountBookExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,162 @@
|
||||||
|
@page "/Box/BoxBindings"
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-4">
|
||||||
|
|
||||||
|
<RadzenDataList @ref="grid" LoadData="@LoadData" WrapItems="true" Count="@count" IsLoading="@isLoading" Data="@_forecasts" PageSize="6" AllowPaging="true" PagerHorizontalAlign="HorizontalAlign.Left"
|
||||||
|
ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
|
<Template Context="channel">
|
||||||
|
<RadzenCard class="col-3">
|
||||||
|
<RadzenRow>
|
||||||
|
<RadzenColumn Size="8" Class="rz-text-truncate">
|
||||||
|
<b class="rz-pr-3">@(channel.DrawerNo)</b>
|
||||||
|
<b>号手术间</b>
|
||||||
|
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="4" Class="rz-text-align-end">
|
||||||
|
@if (channel.TotalQuantity == 0)
|
||||||
|
{
|
||||||
|
<RadzenButton ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Outlined" Size="ButtonSize.Small" Click="@(() => EditChannel(channel))" Text="绑定/解绑" />
|
||||||
|
}
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
<hr style="border: none; background-color: rgba(0,0,0,.2); height: 1px; margin: 1rem 0;" />
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center">
|
||||||
|
<RadzenStack Gap="0">
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" class="rz-display-flex rz-mt-2 rz-my-0">套餐</RadzenText>
|
||||||
|
@if (channel.DrugId == null || channel.TotalQuantity == 0)
|
||||||
|
{
|
||||||
|
<RadzenDropDownDataGrid AllowVirtualization="true" Name="planName" TValue="Plan" @bind-Value="channel.PlanInfo" Data="@plans"
|
||||||
|
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="Name">
|
||||||
|
|
||||||
|
<Columns>
|
||||||
|
<RadzenDropDownDataGridColumn Property="Name" Title="套餐名称" Sortable="false" />
|
||||||
|
|
||||||
|
<RadzenDropDownDataGridColumn Property="Description" Width="120px" Title="套餐描述" Sortable="false" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDropDownDataGrid>
|
||||||
|
<RadzenCustomValidator Component="planName" Validator="@(()=>(channel.PlanInfo.Id>0))" Popup=true Text="请先选择套餐再点击绑定按钮" />
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1"><b>@(channel.PlanInfo.Name)</b></RadzenText>
|
||||||
|
}
|
||||||
|
<RadzenText TextStyle="TextStyle.Overline" class="rz-display-flex rz-mt-4 rz-mb-0">总库存</RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1"><b>@(channel.TotalQuantity)</b></RadzenText>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenCard>
|
||||||
|
</Template>
|
||||||
|
</RadzenDataList>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject IChannelListDao channelListDao;
|
||||||
|
@inject IDrugInfoDao drugInfoDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
@inject NotificationService _message
|
||||||
|
RadzenDataList<ChannelList> grid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
private IEnumerable<ChannelList>? _forecasts;
|
||||||
|
|
||||||
|
List<DrugInfo> drugInfos;
|
||||||
|
List<DrugManuNo> drugManuNos;
|
||||||
|
|
||||||
|
DrugInfo drugInfo;
|
||||||
|
|
||||||
|
DrugManuNo drugManuNo;
|
||||||
|
|
||||||
|
|
||||||
|
List<Plan> plans;
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
|
||||||
|
//drugInfos = await drugInfoDao.GetAllDrug();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await channelListDao.GetAllChannelListWithPlan(args.Top, args.Skip);
|
||||||
|
|
||||||
|
// Update the Data property
|
||||||
|
_forecasts = result.Desserts;
|
||||||
|
// Update the count
|
||||||
|
count = result.TotalDesserts;
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
|
||||||
|
plans = result.Other;
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task reloadGrid()
|
||||||
|
{
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task EditChannel(ChannelList list)
|
||||||
|
{
|
||||||
|
if (list.PlanInfo.Id > 0)
|
||||||
|
{
|
||||||
|
// 说明之前有绑定并且未改变,那么就是在进行解绑
|
||||||
|
if (list.DrugId != null && list.DrugId.Equals(list.PlanInfo.Id.ToString()))
|
||||||
|
{
|
||||||
|
var b = await channelListDao.UnBindBox(list);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"解除绑定成功", Duration = 4000 }
|
||||||
|
);
|
||||||
|
await reloadGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// 否则是进行绑定
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var b = await channelListDao.BindBox(list);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"绑定成功", Duration = 4000 }
|
||||||
|
);
|
||||||
|
await reloadGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (list.PlanInfo != null)
|
||||||
|
{
|
||||||
|
// 说明只设置了药品
|
||||||
|
var b = await channelListDao.BindBox(list);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"绑定成功", Duration = 4000 }
|
||||||
|
);
|
||||||
|
await reloadGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 什么都没有选择或者么有改变,只是点击了按钮,此时不操作
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
@page "/setting/Change"
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-4">
|
||||||
|
|
||||||
|
<form onsubmit="@(() => grid.Reload())">
|
||||||
|
<RadzenFieldset Text="查询">
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="4">
|
||||||
|
<RadzenLabel Text="开始时间" Component="Start" />
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="8">
|
||||||
|
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="4">
|
||||||
|
<RadzenLabel Text="结束时间" Component="End" />
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="8">
|
||||||
|
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="12">
|
||||||
|
<RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
|
||||||
|
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenFieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 mb-4">
|
||||||
|
|
||||||
|
<RadzenDataGrid @ref="grid"
|
||||||
|
LoadData="@LoadData"
|
||||||
|
IsLoading="@isLoading"
|
||||||
|
Count="@count"
|
||||||
|
EmptyText="无数据"
|
||||||
|
Data="@_forecasts"
|
||||||
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
|
SelectionMode="DataGridSelectionMode.Single"
|
||||||
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Title="日期" Property="optDate">
|
||||||
|
<Template Context="mr">
|
||||||
|
@mr.optDate.ToString("yyyy-MM-dd")
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="交班人发药人" Property="FromOperator"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="交班人审核人" Property="FromRviewer"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="接班人发药人" Property="ToOperator"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="接班人审核人" Property="ToReviewer"></RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="接班日期" Property="ToDate">
|
||||||
|
|
||||||
|
<Template Context="mr">
|
||||||
|
@mr.ToDate.ToString("yyyy-MM-dd")
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="当班状态" Property="State">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn title="库位" Property="Location"></RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject IHkcChangeShiftsDao hkcChangeShiftsDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
|
||||||
|
@inject NavigationManager navigate;
|
||||||
|
RadzenDataGrid<HkcChangeShifts> grid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
private IEnumerable<HkcChangeShifts>? _forecasts;
|
||||||
|
DateTime start;
|
||||||
|
DateTime end;
|
||||||
|
|
||||||
|
|
||||||
|
[Parameter] public string type { get; set; }
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if (grid != null)
|
||||||
|
{
|
||||||
|
reloadGrid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
|
||||||
|
// Update the Data property
|
||||||
|
_forecasts = result.Desserts;
|
||||||
|
// Update the count
|
||||||
|
count = result.TotalDesserts;
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task reloadGrid()
|
||||||
|
{
|
||||||
|
start = DateTime.MinValue;
|
||||||
|
end = DateTime.MinValue;
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
@page "/Box/Check"
|
||||||
|
@using MasaBlazorApp3.Pojo.Config
|
||||||
|
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" class="col-12 mb-4">
|
||||||
|
<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)
|
||||||
|
{
|
||||||
|
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
||||||
|
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-9 mb-4">
|
||||||
|
<form onsubmit="@(() => grid.Reload())">
|
||||||
|
<RadzenFieldset Text="查询">
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="4">
|
||||||
|
<RadzenLabel Text="处方号" Component="OrderNo" />
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="8">
|
||||||
|
<RadzenTextBox @bind-Value="OrderNo" Style="width: 100%;" Name="OrderNo"></RadzenTextBox>
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="4">
|
||||||
|
<RadzenLabel Text="处方时间" Component="OrderDate" />
|
||||||
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="8">
|
||||||
|
<RadzenDatePicker DateFormat="yyyy-MM-dd" CurrentDateChanged="@OnCurrentDateChanged" @bind-Value="OrderDate" Style="width: 100%;" Name="OrderDate" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="12">
|
||||||
|
<RadzenButton Size="ButtonSize.Medium" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
|
||||||
|
<RadzenButton Size="ButtonSize.Medium" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenFieldset>
|
||||||
|
<RadzenButton Size="ButtonSize.Medium" Click="Confirm" ButtonType="ButtonType.Button" IsBusy="isLoading" Icon="check_circle" Text="确认" Style="margin:0.5rem" />
|
||||||
|
|
||||||
|
</form>
|
||||||
|
<RadzenDataGrid @ref="grid" AllowRowSelectOnRowClick="@allowRowSelectOnRowClick" AllowFiltering="true" LoadData="@LoadData"
|
||||||
|
FilterPopupRenderMode="PopupRenderMode.OnDemand" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
|
||||||
|
Data="@orderInfos" ColumnWidth="200px" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
|
||||||
|
SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@selectedOrderInfos
|
||||||
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
|
||||||
|
<HeaderTemplate>
|
||||||
|
<RadzenCheckBox TabIndex="-1" TriState="false" TValue="bool?" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select all items" }})"
|
||||||
|
Value="@(selectedOrderInfos == null || selectedOrderInfos?.Any() != true ? false : !orderInfos.All(i => selectedOrderInfos.Contains(i)) ? null : orderInfos.Any(i => selectedOrderInfos.Contains(i)))"
|
||||||
|
Change="@(args => selectedOrderInfos = args == true ? orderInfos.ToList() : null)" />
|
||||||
|
</HeaderTemplate>
|
||||||
|
<Template Context="data">
|
||||||
|
<RadzenCheckBox TabIndex="-1" TriState="false" Value="@(selectedOrderInfos != null && selectedOrderInfos.Contains(data))" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select item" }})"
|
||||||
|
TValue="bool" Change="@(args => { if (!allowRowSelectOnRowClick) { grid.SelectRow(data); } })" />
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
|
||||||
|
<RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
|
||||||
|
<RadzenDataGridColumn Property="OrderNo" Title="单号" Sortable="false" Filterable="false" Width="8rem" />
|
||||||
|
<RadzenDataGridColumn Property="Detail.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem" />
|
||||||
|
<RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem" />
|
||||||
|
<RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</div>
|
||||||
|
</RadzenStack>
|
||||||
|
@code {
|
||||||
|
@inject IOrderInfoDao orderInfoDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
|
||||||
|
|
||||||
|
bool allowRowSelectOnRowClick = true;
|
||||||
|
IEnumerable<OrderInfo> orderInfos;
|
||||||
|
IList<OrderInfo> selectedOrderInfos;
|
||||||
|
RadzenDataGrid<OrderInfo> grid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||||
|
int status = 0;
|
||||||
|
int drawerNo = 1;
|
||||||
|
string OrderNo;
|
||||||
|
DateTime OrderDate;
|
||||||
|
void SelectDrawer(int drawerNo)
|
||||||
|
{
|
||||||
|
this.drawerNo = drawerNo;
|
||||||
|
grid.Reload();
|
||||||
|
}
|
||||||
|
void OnCurrentDateChanged(DateTime args)
|
||||||
|
{
|
||||||
|
OrderDate = new DateTime(args.Year, args.Month, args.Day);
|
||||||
|
}
|
||||||
|
//重置
|
||||||
|
async Task reloadGrid()
|
||||||
|
{
|
||||||
|
OrderNo = "";
|
||||||
|
OrderDate = DateTime.MinValue;
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
//确认
|
||||||
|
async Task Confirm()
|
||||||
|
{
|
||||||
|
orderInfoDao.CheckOrderInfo(selectedOrderInfos, drawerNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await orderInfoDao.GetAllOrderInfoByBox(drawerNo, OrderNo, OrderDate, args.Top, args.Skip);
|
||||||
|
// Update the Data property
|
||||||
|
orderInfos = result.Desserts;
|
||||||
|
// Update the count
|
||||||
|
count = result.TotalDesserts;
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
|
||||||
|
DrawerNos = await orderInfoDao.GetDrawerNum(setting.Value.boxMachineId);
|
||||||
|
}
|
||||||
|
// protected override async Task OnInitializedAsync()
|
||||||
|
// {
|
||||||
|
// await base.OnInitializedAsync();
|
||||||
|
|
||||||
|
// // orderInfos = dbContext.Employees;
|
||||||
|
|
||||||
|
// var result = await orderInfoDao.GetAllOrderInfo(OrderNo, OrderDate, args.Top, args.Skip);
|
||||||
|
// // Update the Data property
|
||||||
|
// orderInfos = result.Desserts;
|
||||||
|
// // Update the count
|
||||||
|
// count = result.TotalDesserts;
|
||||||
|
|
||||||
|
// isLoading = false;
|
||||||
|
// }
|
||||||
|
}
|
|
@ -252,7 +252,7 @@
|
||||||
$"删除确认",
|
$"删除确认",
|
||||||
new Dictionary<string, object>() { { "confirmInfo", "确认要删除药品:"+drugInfo.DrugName+"吗?" } },
|
new Dictionary<string, object>() { { "confirmInfo", "确认要删除药品:"+drugInfo.DrugName+"吗?" } },
|
||||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||||
if(b)
|
if(b)
|
||||||
{
|
{
|
||||||
// 数据库删除
|
// 数据库删除
|
||||||
drugInfoDao.DeleteDrugInfo(drugInfo.DrugId);
|
drugInfoDao.DeleteDrugInfo(drugInfo.DrugId);
|
||||||
|
@ -289,7 +289,7 @@
|
||||||
void CancelEdit(DrugManuNo drugManuNo)
|
void CancelEdit(DrugManuNo drugManuNo)
|
||||||
{
|
{
|
||||||
Reset(drugManuNo);
|
Reset(drugManuNo);
|
||||||
|
SelectedDrugs.FirstOrDefault().Manus.Remove(drugManuNo);
|
||||||
ManusGrid.CancelEditRow(drugManuNo);
|
ManusGrid.CancelEditRow(drugManuNo);
|
||||||
ManusGrid.Reload();
|
ManusGrid.Reload();
|
||||||
}
|
}
|
||||||
|
@ -308,6 +308,7 @@
|
||||||
);
|
);
|
||||||
if(b)
|
if(b)
|
||||||
{
|
{
|
||||||
|
SelectedDrugs.FirstOrDefault().Manus.Remove(drugManuNo);
|
||||||
// 数据库删除
|
// 数据库删除
|
||||||
drugManuNoDao.DeleteDrugManuNo(drugManuNo.Id);
|
drugManuNoDao.DeleteDrugManuNo(drugManuNo.Id);
|
||||||
await ManusGrid.Reload();
|
await ManusGrid.Reload();
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
@page "/manage/setting/Fridge"
|
||||||
|
@using MasaBlazorApp3.Util
|
||||||
|
@using Newtonsoft.Json.Linq
|
||||||
|
@using log4net
|
||||||
|
@layout SettingLayout
|
||||||
|
<div class="main">
|
||||||
|
<div class="top-row px-4">
|
||||||
|
<RadzenButton Icon="account_circle" Style="margin-left: auto;" Click="@SaveMethod">
|
||||||
|
<ChildContent>
|
||||||
|
保存设置
|
||||||
|
</ChildContent>
|
||||||
|
</RadzenButton>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content px-4">
|
||||||
|
<RadzenCard class="rz-my-6">
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" Wrap="FlexWrap.Wrap">
|
||||||
|
<RadzenStack Orientation="Orientation.Vertical" Gap="4px">
|
||||||
|
冰箱温度区间
|
||||||
|
<RadzenTextBox Placeholder="2-8" Value="@temperatureRange" Change="@(args=>temperatureRange=args)"></RadzenTextBox>
|
||||||
|
</RadzenStack>
|
||||||
|
<RadzenStack Orientation="Orientation.Vertical" Gap="4px">
|
||||||
|
冰箱状态
|
||||||
|
<RadzenRadioButtonList Value=@fridgeStateValue TValue="int" Change=@(args => fridgeStateValue = args)>
|
||||||
|
<Items>
|
||||||
|
<RadzenRadioButtonListItem Text="开" Value="0" />
|
||||||
|
<RadzenRadioButtonListItem Text="关" Value="1" />
|
||||||
|
</Items>
|
||||||
|
</RadzenRadioButtonList>
|
||||||
|
</RadzenStack>
|
||||||
|
<RadzenStack Orientation="Orientation.Vertical" Gap="4px">
|
||||||
|
报警状态
|
||||||
|
<RadzenRadioButtonList Value="@alertStateValue" TValue="int" Change="@(args=>alertStateValue=args)">
|
||||||
|
<Items>
|
||||||
|
<RadzenRadioButtonListItem Text="开" Value="0"/>
|
||||||
|
<RadzenRadioButtonListItem Text="关" Value="1"/>
|
||||||
|
</Items>
|
||||||
|
</RadzenRadioButtonList>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenCard>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.fridgeConfig> setting;
|
||||||
|
@inject PortUtil port;
|
||||||
|
@inject NotificationService _message
|
||||||
|
|
||||||
|
@code {
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
|
||||||
|
int fridgeStateValue = 1;
|
||||||
|
int alertStateValue = 1;
|
||||||
|
string temperatureRange = "2-8";
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
fridgeStateValue = setting.Value.fridgeState;
|
||||||
|
alertStateValue = setting.Value.alertState;
|
||||||
|
temperatureRange = setting.Value.temperatureRange;
|
||||||
|
base.OnInitialized();
|
||||||
|
}
|
||||||
|
//保存
|
||||||
|
async Task SaveMethod()
|
||||||
|
{
|
||||||
|
// 获取当前工作目录
|
||||||
|
string currentDirectory = Directory.GetCurrentDirectory();
|
||||||
|
// setting.Value.fridgeState = fridgeStateValue;
|
||||||
|
// setting.Value.alertState = alertStateValue;
|
||||||
|
// setting.Value.temperatureRange = temperatureRange;
|
||||||
|
string filePath =Path.Combine(currentDirectory, "appsettings.json");
|
||||||
|
string jsonString= File.ReadAllText(filePath);
|
||||||
|
var jsonNode = JObject.Parse(jsonString);
|
||||||
|
jsonNode["fridge"]["temperatureRange"] = temperatureRange;
|
||||||
|
jsonNode["fridge"]["fridgeState"]= fridgeStateValue;
|
||||||
|
jsonNode["fridge"]["alertState"] = alertStateValue;
|
||||||
|
var options = new JsonSerializerOptions { WriteIndented = true };
|
||||||
|
File.WriteAllText(filePath, jsonNode.ToString(Newtonsoft.Json.Formatting.Indented));
|
||||||
|
if (fridgeStateValue==0)
|
||||||
|
{
|
||||||
|
await port.FridegOpen(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await port.FridgeOff(1);
|
||||||
|
}
|
||||||
|
if (alertStateValue==0)
|
||||||
|
{
|
||||||
|
await port.FridgeAlarmOn(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await port.FridgeAlarmOff(1);
|
||||||
|
}
|
||||||
|
string[] newRange = temperatureRange.Split('-');
|
||||||
|
if(newRange.Length>=2)
|
||||||
|
{
|
||||||
|
string[] range= setting.Value.temperatureRange.Split('-');
|
||||||
|
bool bMix = float.TryParse(newRange[0], out float Min);
|
||||||
|
bool bMax = float.TryParse(newRange[1], out float Max);
|
||||||
|
if (bMix && bMax)
|
||||||
|
{
|
||||||
|
if (range == null || range[0] == null||(range != null && range[0] != null && range[0] != newRange[0]))
|
||||||
|
{
|
||||||
|
//设定冰箱温度最小值
|
||||||
|
await port.FridgeMinSetting(Min, 1);
|
||||||
|
}
|
||||||
|
if (range == null || range[0] == null || (range != null && range[1] != null && range[1] != newRange[1]))
|
||||||
|
{
|
||||||
|
//设定冰箱温度最大值
|
||||||
|
await port.FridgeMaxSetting(Max, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"保存成功", Duration = 4000 }
|
||||||
|
);
|
||||||
|
logger.Info($"修改冰箱设置");
|
||||||
|
}
|
||||||
|
}
|
|
@ -120,7 +120,7 @@
|
||||||
}
|
}
|
||||||
</RadzenStack>
|
</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%">
|
<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>
|
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">系统管理</RadzenText>
|
||||||
@if (globalStateService.Operator != null)
|
@if (globalStateService.Operator != null)
|
||||||
{
|
{
|
||||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10))
|
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10))
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
@inject PortUtil PortUtil;
|
@inject PortUtil PortUtil;
|
||||||
@inject FingerprintUtil FingerprintUtil;
|
@inject FingerprintUtil FingerprintUtil;
|
||||||
@inject GlobalStateService globalStateService;
|
@inject GlobalStateService globalStateService;
|
||||||
|
@inject IOptions<PortConfig> portSetting;
|
||||||
|
|
||||||
|
|
||||||
string msg;
|
string msg;
|
||||||
|
@ -106,6 +107,22 @@
|
||||||
errMsg += "【条码扫描模块连接失败】";
|
errMsg += "【条码扫描模块连接失败】";
|
||||||
InvokeAsync(StateHasChanged);
|
InvokeAsync(StateHasChanged);
|
||||||
}
|
}
|
||||||
|
if (portSetting.Value.fridgePortExist)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PortUtil.fridgeSerial.Open();
|
||||||
|
logger.Info($"冰箱串口打开结果【{PortUtil.fridgeSerial.IsOpen}】");
|
||||||
|
msg = "冰箱串口连接成功";
|
||||||
|
InvokeAsync(StateHasChanged);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
msg = "冰箱串口打开失败";
|
||||||
|
errMsg += "【冰箱串口打开失败】";
|
||||||
|
InvokeAsync(StateHasChanged);
|
||||||
|
}
|
||||||
|
}
|
||||||
globalStateService.isInit = true;
|
globalStateService.isInit = true;
|
||||||
dialogService.Close();
|
dialogService.Close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
@page "/manage/setting/login"
|
||||||
|
@page "/manage/setting"
|
||||||
|
@using Newtonsoft.Json.Linq
|
||||||
|
@using log4net
|
||||||
|
@layout SettingLayout
|
||||||
|
<div class="main">
|
||||||
|
<div class="top-row px-4">
|
||||||
|
<RadzenButton Icon="account_circle" Style="margin-left: auto;" Click="@SaveMethod">
|
||||||
|
<ChildContent>
|
||||||
|
保存设置
|
||||||
|
</ChildContent>
|
||||||
|
</RadzenButton>
|
||||||
|
</div>
|
||||||
|
<div class="content px-4">
|
||||||
|
<RadzenCard class="rz-my-6">
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Start" Wrap="FlexWrap.Wrap">
|
||||||
|
<RadzenStack Orientation="Orientation.Vertical" Gap="4px">
|
||||||
|
登录模式
|
||||||
|
<RadzenRadioButtonList Value=@loginValue TValue="int" Change=@(args => loginValue = args)>
|
||||||
|
<Items>
|
||||||
|
<RadzenRadioButtonListItem Text="单人登录" Value="1" />
|
||||||
|
<RadzenRadioButtonListItem Text="双人登录" Value="2" />
|
||||||
|
</Items>
|
||||||
|
</RadzenRadioButtonList>
|
||||||
|
</RadzenStack>
|
||||||
|
@* <RadzenStack Orientation="Orientation.Vertical" Gap="4px">
|
||||||
|
优先登录
|
||||||
|
<RadzenRadioButtonList Value=@preValue TValue="int" Change=@(args => preValue = args)>
|
||||||
|
<Items>
|
||||||
|
<RadzenRadioButtonListItem Text="操作人" Value="1" />
|
||||||
|
<RadzenRadioButtonListItem Text="审核人" Value="2" />
|
||||||
|
</Items>
|
||||||
|
</RadzenRadioButtonList>
|
||||||
|
</RadzenStack> *@
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenCard>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.setting> setting;
|
||||||
|
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
|
||||||
|
@inject NotificationService _message
|
||||||
|
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
|
||||||
|
int loginValue = 1;
|
||||||
|
// int preValue = 1;
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
loginValue = setting.Value.loginMode;
|
||||||
|
base.OnInitialized();
|
||||||
|
}
|
||||||
|
//保存
|
||||||
|
async Task SaveMethod()
|
||||||
|
{
|
||||||
|
// 获取当前工作目录
|
||||||
|
string currentDirectory = Directory.GetCurrentDirectory();
|
||||||
|
// setting.Value.fridgeState = fridgeStateValue;
|
||||||
|
// setting.Value.alertState = alertStateValue;
|
||||||
|
// setting.Value.temperatureRange = temperatureRange;
|
||||||
|
string filePath = Path.Combine(currentDirectory, "appsettings.json");
|
||||||
|
string jsonString = File.ReadAllText(filePath);
|
||||||
|
var jsonNode = JObject.Parse(jsonString);
|
||||||
|
jsonNode["setting"]["loginMode"] = loginValue;
|
||||||
|
var options = new JsonSerializerOptions { WriteIndented = true };
|
||||||
|
File.WriteAllText(filePath, jsonNode.ToString(Newtonsoft.Json.Formatting.Indented));
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"保存成功", Duration = 4000 }
|
||||||
|
);
|
||||||
|
logger.Info($"修改用户登录设置");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,431 @@
|
||||||
|
@page "/Box/Plan"
|
||||||
|
<style>
|
||||||
|
.rz-custom-header {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-4">
|
||||||
|
<RadzenFieldset>
|
||||||
|
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
|
||||||
|
<RadzenRow AlignItems="AlignItems.Center">
|
||||||
|
<RadzenColumn Size="12" Style="margin-top:12px">
|
||||||
|
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="刷新" ButtonStyle="ButtonStyle.Warning" />
|
||||||
|
<RadzenButton Size="ButtonSize.Large" ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" Click="@InsertPlanRow" Text="新增套餐" />
|
||||||
|
</RadzenColumn>
|
||||||
|
</RadzenRow>
|
||||||
|
</RadzenStack>
|
||||||
|
</RadzenFieldset>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mb-4">
|
||||||
|
<RadzenDataGrid @ref="grid"
|
||||||
|
LoadData="@LoadData"
|
||||||
|
@bind-Value="@SelectedPlan"
|
||||||
|
IsLoading="@isLoading"
|
||||||
|
Count="@count"
|
||||||
|
EmptyText="无数据"
|
||||||
|
Data="@_forecasts"
|
||||||
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
|
SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di)=>{OnUpdatePlanRow(di);})" RowCreate="@((Plan di)=>{OnCreatePlanRow(di);})"
|
||||||
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Frozen="true" Title="套餐名称" Property="Name">
|
||||||
|
<EditTemplate Context="planInfo">
|
||||||
|
<RadzenTextBox Name="Name" @bind-Value="planInfo.Name" Style="width:100%; display: block;" />
|
||||||
|
<RadzenRequiredValidator Text="请填写套餐名称" Component="Name" Popup="true" />
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Width="200px" Title="套餐描述" Property="Description">
|
||||||
|
<EditTemplate Context="planInfo">
|
||||||
|
<RadzenTextBox Name="Description" @bind-Value="planInfo.Description" Style="width:100%;display:block;" />
|
||||||
|
<RadzenRequiredValidator Text="请填写套餐描述" Component="Description" Popup="true" />
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
|
||||||
|
<RadzenDataGridColumn Context="planInfo" Title="操作" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Frozen="true" FrozenPosition="FrozenColumnPosition.Right" Width="8rem">
|
||||||
|
<Template Context="planInfo">
|
||||||
|
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditPlanRow(planInfo))" @onclick:stopPropagation="true">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeletePlanRow(planInfo))" @onclick:stopPropagation="true">
|
||||||
|
</RadzenButton>
|
||||||
|
</Template>
|
||||||
|
<EditTemplate Context="planInfo">
|
||||||
|
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => SavePlanRow(planInfo))" aria-label="Save">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelPlanEdit(planInfo))" aria-label="Cancel">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeletePlanRow(planInfo))" aria-label="Delete">
|
||||||
|
</RadzenButton>
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mb-4">
|
||||||
|
<RadzenDataGrid @ref="PlanDetailsGrid" EmptyText="无数据"
|
||||||
|
Data="@(SelectedPlan?.FirstOrDefault()?._PlanDetails)"
|
||||||
|
RowUpdate="@((PlanDetails pd) => { OnUpdateRow(pd); })"
|
||||||
|
RowCreate="@((PlanDetails pd) => { OnCreateRow(pd); })"
|
||||||
|
KeyProperty="Id"
|
||||||
|
AllowColumnResize="true" AllowAlternatingRows="false">
|
||||||
|
@* <HeaderTemplate>
|
||||||
|
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
||||||
|
<RadzenButton Icon="download" Text="添加" Variant="Variant.Outlined" />
|
||||||
|
</RadzenRow>
|
||||||
|
</HeaderTemplate> *@
|
||||||
|
<Columns>
|
||||||
|
<RadzenDataGridColumn Title="序号" Property="index" Width="5rem">
|
||||||
|
<Template Context="data">
|
||||||
|
@(SelectedPlan.FirstOrDefault()?._PlanDetails.IndexOf(data) + 1)
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="药品" Property="_DrugInfo.DrugName" Width="25rem">
|
||||||
|
<Template Context="data">
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1"><b>@(data._DrugInfo?.DrugName)</b></RadzenText>
|
||||||
|
<RadzenText TextStyle="TextStyle.Body1"><b>@(data._DrugInfo?.DrugSpec)</b></RadzenText>
|
||||||
|
</Template>
|
||||||
|
<EditTemplate Context="planDetails">
|
||||||
|
|
||||||
|
<RadzenDropDownDataGrid AllowVirtualization="true" Name="drugName" TValue="DrugInfo" @bind-Value="planDetails._DrugInfo" Data="@drugInfos"
|
||||||
|
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="DrugName">
|
||||||
|
<Columns>
|
||||||
|
<RadzenDropDownDataGridColumn Property="DrugId" Title="药品编码" />
|
||||||
|
<RadzenDropDownDataGridColumn Property="DrugName" Width="120px" Title="名称" />
|
||||||
|
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
|
||||||
|
</Columns>
|
||||||
|
</RadzenDropDownDataGrid>
|
||||||
|
<RadzenCustomValidator Component="drugName" Validator="@(()=>(planDetails._DrugInfo.DrugId!=null))" Text="请选择药品" Popup=true />
|
||||||
|
<RadzenCustomValidator Component="drugName" Validator="@(()=>ValidatroDrug(planDetails))" Text="套餐中已包含该药品" Popup=true />
|
||||||
|
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="基数" Property="BaseQuantity" Width="5rem">
|
||||||
|
<EditTemplate Context="planDetails">
|
||||||
|
<RadzenNumeric Name="BaseQuantity" @bind-Value="planDetails.BaseQuantity" Style="width:100%; display: block;" />
|
||||||
|
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的添加数量" Component="BaseQuantity" Popup="true" />
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
<RadzenDataGridColumn Title="操作" Filterable="false" Sortable="false" TextAlign="TextAlign.Left" Frozen="true" FrozenPosition="FrozenColumnPosition.Right" Width="8rem">
|
||||||
|
<Template Context="planDetails">
|
||||||
|
<RadzenButton Icon="edit" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@(args => EditRow(planDetails))" @onclick:stopPropagation="true">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(planDetails))" @onclick:stopPropagation="true">
|
||||||
|
</RadzenButton>
|
||||||
|
</Template>
|
||||||
|
<EditTemplate Context="planDetails">
|
||||||
|
<RadzenButton Icon="check" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Size="ButtonSize.Medium" Click="@((args) => InsertRow(planDetails))" aria-label="Save">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton Icon="close" ButtonStyle="ButtonStyle.Light" Variant="Variant.Flat" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@((args) => CancelEdit(planDetails))" aria-label="Cancel">
|
||||||
|
</RadzenButton>
|
||||||
|
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Variant="Variant.Flat" Shade="Shade.Lighter" Size="ButtonSize.Medium" class="my-1 ms-1" Click="@(args => DeleteRow(planDetails))" aria-label="Delete">
|
||||||
|
</RadzenButton>
|
||||||
|
</EditTemplate>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
</Columns>
|
||||||
|
</RadzenDataGrid>
|
||||||
|
<div style="margin-top:5px">
|
||||||
|
<RadzenButton Size="ButtonSize.Medium" ButtonStyle="ButtonStyle.Success" Icon="add_circle_outline" Click="@InsertRow" Text="新增药品" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
@inject IPlanDao planDao;
|
||||||
|
@inject DialogService dialogService;
|
||||||
|
@inject NotificationService _message
|
||||||
|
|
||||||
|
RadzenDataGrid<Plan> grid;
|
||||||
|
RadzenDataGrid<PlanDetails> PlanDetailsGrid;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
|
private IEnumerable<Plan>? _forecasts;
|
||||||
|
IList<Plan>? SelectedPlan { get; set; } = new List<Plan>();
|
||||||
|
List<PlanDetails> SelectedPlanDetails = new List<PlanDetails>();
|
||||||
|
List<DrugInfo> drugInfos;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
|
||||||
|
var result = await planDao.GetAllPlanInfo();
|
||||||
|
// Update the Data property
|
||||||
|
_forecasts = result.Desserts;
|
||||||
|
count = result.TotalDesserts;
|
||||||
|
SelectedPlan = new List<Plan>() { _forecasts.FirstOrDefault() };
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
drugInfos = result.Other;
|
||||||
|
}
|
||||||
|
// async Task LoadDetailDate(LoadDataArgs args)
|
||||||
|
// {
|
||||||
|
// // SelectedPlan = new List<Plan>() { await planDao.GetPlanById(SelectedPlan.FirstOrDefault().Id) };
|
||||||
|
// }
|
||||||
|
async Task reloadGrid()
|
||||||
|
{
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
void OnUpdatePlanRow(Plan dl)
|
||||||
|
{
|
||||||
|
// Reset(dl);
|
||||||
|
|
||||||
|
// 数据库更新
|
||||||
|
planDao.UpdatePlanInfo(dl);
|
||||||
|
grid.Reload();
|
||||||
|
}
|
||||||
|
void OnCreatePlanRow(Plan dl)
|
||||||
|
{
|
||||||
|
// 数据库添加套餐
|
||||||
|
planDao.InsertPlanInfo(dl);
|
||||||
|
SelectedPlan.Remove(dl);
|
||||||
|
grid.Reload();
|
||||||
|
}
|
||||||
|
//新增套餐
|
||||||
|
async Task InsertPlanRow()
|
||||||
|
{
|
||||||
|
var planInfo = new Plan();
|
||||||
|
if (_forecasts.Count() <= 0)
|
||||||
|
{
|
||||||
|
_forecasts = new List<Plan>
|
||||||
|
{
|
||||||
|
new Plan()
|
||||||
|
};
|
||||||
|
await grid.InsertRow(_forecasts.FirstOrDefault());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await grid.InsertRow(planInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//修改套餐
|
||||||
|
async Task EditPlanRow(Plan planInfo)
|
||||||
|
{
|
||||||
|
await grid.EditRow(planInfo);
|
||||||
|
}
|
||||||
|
//删除套餐
|
||||||
|
async Task DeletePlanRow(Plan planInfo)
|
||||||
|
{
|
||||||
|
if (planInfo.Id > 0)
|
||||||
|
{
|
||||||
|
//弹出确认提示框
|
||||||
|
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||||
|
$"删除确认",
|
||||||
|
new Dictionary<string, object>() { { "confirmInfo", "确认要删除套餐:" + planInfo.Name + "吗?" } },
|
||||||
|
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
// 数据库删除
|
||||||
|
if (await planDao.DeletePlanInfo(planInfo.Id))
|
||||||
|
{
|
||||||
|
_message.Notify
|
||||||
|
(
|
||||||
|
new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Success,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = $"删除成功",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify
|
||||||
|
(
|
||||||
|
new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Error,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "删除失败",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grid.CancelEditRow(planInfo);
|
||||||
|
await grid.Reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//保存套餐信息
|
||||||
|
async Task SavePlanRow(Plan planInfo)
|
||||||
|
{
|
||||||
|
await grid.UpdateRow(planInfo);
|
||||||
|
}
|
||||||
|
async Task CancelPlanEdit(Plan planInfo)
|
||||||
|
{
|
||||||
|
grid.CancelEditRow(planInfo);
|
||||||
|
await grid.Reload();
|
||||||
|
await PlanDetailsGrid.Reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Reset(PlanDetails pd)
|
||||||
|
{
|
||||||
|
SelectedPlanDetails.Remove(pd);
|
||||||
|
}
|
||||||
|
//修改药品
|
||||||
|
async Task EditRow(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
// planDetail.DrugId = null;
|
||||||
|
|
||||||
|
await PlanDetailsGrid.EditRow(planDetail);
|
||||||
|
}
|
||||||
|
//保存修改药品
|
||||||
|
async Task InsertRow(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
await PlanDetailsGrid.UpdateRow(planDetail);
|
||||||
|
}
|
||||||
|
//取消修改药品
|
||||||
|
async Task CancelEdit(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
PlanDetailsGrid.CancelEditRow(planDetail);
|
||||||
|
SelectedPlan.FirstOrDefault()._PlanDetails.RemoveAll(pd => pd.Id == 0);
|
||||||
|
await PlanDetailsGrid.Reload();
|
||||||
|
}
|
||||||
|
//删除药品
|
||||||
|
async Task DeleteRow(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
// Reset(planDetail);
|
||||||
|
|
||||||
|
if (planDetail.Id > 0)
|
||||||
|
{
|
||||||
|
//弹出确认提示框
|
||||||
|
var b = await dialogService.OpenAsync<ConfirmDialog>(
|
||||||
|
$"确认删除",
|
||||||
|
new Dictionary<string, object>() { { "confirmInfo", "确认要删除药品:" + planDetail._DrugInfo.DrugName + "吗?" } },
|
||||||
|
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }
|
||||||
|
);
|
||||||
|
if (b)
|
||||||
|
{
|
||||||
|
SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
|
||||||
|
// 数据库删除
|
||||||
|
if (await planDao.DeletePlanDetail(planDetail))
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Success,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "删除成功",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Error,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "删除失败",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
await PlanDetailsGrid.Reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlanDetailsGrid.CancelEditRow(planDetail);
|
||||||
|
}
|
||||||
|
SelectedPlan.FirstOrDefault()._PlanDetails.RemoveAll(pd => pd.Id == 0);
|
||||||
|
}
|
||||||
|
async void OnUpdateRow(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
// Reset(planDetail);
|
||||||
|
|
||||||
|
SelectedPlanDetails.Add(planDetail);
|
||||||
|
// 数据库更新
|
||||||
|
if (await planDao.UpdatePlanDetail(planDetail))
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Success,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "修改成功",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Error,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "修改失败",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await PlanDetailsGrid.Reload();
|
||||||
|
}
|
||||||
|
//保存套餐下添加的药品
|
||||||
|
async void OnCreateRow(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
if (SelectedPlan.FirstOrDefault() != null)
|
||||||
|
{
|
||||||
|
planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
|
||||||
|
planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId;
|
||||||
|
if (await planDao.AddPlanDetail(planDetail))
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Success,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "保存成功",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(new NotificationMessage
|
||||||
|
{
|
||||||
|
Severity = NotificationSeverity.Error,
|
||||||
|
Summary = "提示",
|
||||||
|
Detail = "保存失败",
|
||||||
|
Duration = 4000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// await grid.Reload();
|
||||||
|
await PlanDetailsGrid.Reload();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//新增药品
|
||||||
|
async Task InsertRow()
|
||||||
|
{
|
||||||
|
var detail = new Pojo.PlanDetails()
|
||||||
|
{
|
||||||
|
PlanId = SelectedPlan.FirstOrDefault().Id
|
||||||
|
};
|
||||||
|
SelectedPlan.FirstOrDefault()._PlanDetails.Add(detail);
|
||||||
|
await PlanDetailsGrid.InsertRow(detail);
|
||||||
|
|
||||||
|
}
|
||||||
|
//验证药品是否已存在套餐中
|
||||||
|
bool ValidatroDrug(PlanDetails planDetail)
|
||||||
|
{
|
||||||
|
if (planDetail.PlanId == 0)
|
||||||
|
{
|
||||||
|
//新增的
|
||||||
|
planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
|
||||||
|
}
|
||||||
|
return planDao.CheckDrugById(planDetail);
|
||||||
|
}
|
||||||
|
}
|
|
@ -144,9 +144,9 @@
|
||||||
<RadzenDropDownDataGrid Change="@((args) => { channel.drugManuNo = null; })" AllowVirtualization="true" Name="@("Drug_" + channel.Id)" TValue="DrugInfo" @bind-Value="channel.Drug" Data="@drugInfos"
|
<RadzenDropDownDataGrid Change="@((args) => { channel.drugManuNo = null; })" AllowVirtualization="true" Name="@("Drug_" + channel.Id)" TValue="DrugInfo" @bind-Value="channel.Drug" Data="@drugInfos"
|
||||||
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="DrugName">
|
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="DrugName">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDropDownDataGridColumn Property="DrugId" Title="药品编码" />
|
<RadzenDropDownDataGridColumn Property="DrugId" Title="药品编码" Sortable="false" />
|
||||||
<RadzenDropDownDataGridColumn Property="DrugName" Width="120px" Title="名称" />
|
<RadzenDropDownDataGridColumn Property="DrugName" Width="120px" Title="名称" Sortable="false" />
|
||||||
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
|
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" Sortable="false" />
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDropDownDataGrid>
|
</RadzenDropDownDataGrid>
|
||||||
} else
|
} else
|
||||||
|
@ -161,8 +161,8 @@
|
||||||
{
|
{
|
||||||
<RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
|
<RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" />
|
<RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" Sortable="false" />
|
||||||
<RadzenDropDownDataGridColumn Property="EffDate" Title="效期" />
|
<RadzenDropDownDataGridColumn Property="EffDate" Title="效期" Sortable="false" />
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDropDownDataGrid>
|
</RadzenDropDownDataGrid>
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,14 +95,15 @@
|
||||||
</RadzenDataGridColumn>
|
</RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn MinWidth="120px" Title="盘点数量" Property="CheckQuantity">
|
<RadzenDataGridColumn MinWidth="120px" Title="盘点数量" Property="CheckQuantity">
|
||||||
<EditTemplate Context="cs">
|
<EditTemplate Context="cs">
|
||||||
@if (cs.BoardType == 2)
|
@if (cs.BoardType.ToString().Contains("2") || cs.BoardType.ToString().Contains("3"))
|
||||||
{
|
{
|
||||||
@cs.CheckQuantity
|
@cs.CheckQuantity
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<RadzenNumeric Min="0" Style="display: block" Name="CheckQuantity" @bind-Value=@cs.CheckQuantity />
|
<RadzenNumeric Style="display: block" Name="CheckQuantity" @bind-Value=@cs.CheckQuantity>
|
||||||
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的盘点数量" Component="CheckQuantity" Popup="true" />
|
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="1" Max="100" Text="请填写正确的取出数量" Component="CheckQuantity" />
|
||||||
|
</RadzenNumeric>
|
||||||
}
|
}
|
||||||
</EditTemplate>
|
</EditTemplate>
|
||||||
</RadzenDataGridColumn>
|
</RadzenDataGridColumn>
|
||||||
|
@ -243,7 +244,6 @@
|
||||||
this.BeforeQuantity = new int[9];
|
this.BeforeQuantity = new int[9];
|
||||||
this.AfterQuantity = new int[9];
|
this.AfterQuantity = new int[9];
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task CheckFinish()
|
async Task CheckFinish()
|
||||||
{
|
{
|
||||||
if (channels.Any(cl => cl.CheckQuantity != cl.Quantity && cl.DrugId != null && cl.drugManuNo != null))
|
if (channels.Any(cl => cl.CheckQuantity != cl.Quantity && cl.DrugId != null && cl.drugManuNo != null))
|
||||||
|
@ -257,7 +257,7 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Info, Summary = "提示", Detail = $"盘点完成", Duration = 4000 });
|
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"盘点完成", Duration = 4000 });
|
||||||
logger.Info($"盘点完成");
|
logger.Info($"盘点完成");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,37 @@
|
||||||
@page "/stock/list"
|
@page "/stock/list"
|
||||||
<style>
|
<style>
|
||||||
.rz-custom-header {
|
@@keyframes shake {
|
||||||
width: 100%;
|
0% { opacity:1;color:red; }
|
||||||
|
25%{opacity:1;color:orange;}
|
||||||
|
50% { opacity:0;color:yellow;}
|
||||||
|
75%{opacity:1;color:crimson;}
|
||||||
|
100% { opacity:1;color:red; }
|
||||||
}
|
}
|
||||||
|
.rz-custom-header {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.shaky-text {
|
||||||
|
animation: shake 2s infinite ease-in-out;
|
||||||
|
/* 你可以根据需要调整动画的持续时间和迭代次数 */
|
||||||
|
transition:color 0.5s linear,opacity 0.5s linear;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<RadzenDataGrid @ref="grid"
|
<RadzenDataGrid @ref="grid"
|
||||||
IsLoading="@isLoading"
|
IsLoading="@isLoading"
|
||||||
RowRender="@RowRender"
|
RowRender="@RowRender"
|
||||||
EmptyText="无数据"
|
EmptyText="无数据"
|
||||||
Data="@_forecasts"
|
Data="@_forecasts"
|
||||||
AllowColumnResize="true" AllowAlternatingRows="false"
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
SelectionMode="DataGridSelectionMode.Single"
|
SelectionMode="DataGridSelectionMode.Single"
|
||||||
ExpandMode="DataGridExpandMode.Multiple">
|
ExpandMode="DataGridExpandMode.Multiple">
|
||||||
<HeaderTemplate>
|
<HeaderTemplate>
|
||||||
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
||||||
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" />
|
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
|
||||||
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" />
|
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
</HeaderTemplate>
|
</HeaderTemplate>
|
||||||
<Template Context="di">
|
<Template Context="di">
|
||||||
|
@ -29,16 +42,44 @@
|
||||||
@s.DrawerNo - @s.ColNo
|
@s.DrawerNo - @s.ColNo
|
||||||
</Template>
|
</Template>
|
||||||
</RadzenDataGridColumn>
|
</RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="数量" Property="Quantity"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="数量" Property="Quantity">
|
||||||
|
</RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="Åú´Î" Property="ManuNo"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="Åú´Î" Property="ManuNo"></RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="效期" Property="EffDate"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="效期" Property="EffDate">
|
||||||
|
<Template Context="s">
|
||||||
|
@{
|
||||||
|
DateTime dateTime;
|
||||||
|
bool success = DateTime.TryParse(s.EffDate, out dateTime);
|
||||||
|
if(success&&dateTime<=DateTime.Now.AddMonths(3))
|
||||||
|
{
|
||||||
|
@s.EffDate<p class="shaky-text">近效期药品!</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@s.EffDate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDataGrid>
|
</RadzenDataGrid>
|
||||||
</Template>
|
</Template>
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn Frozen="true" Width="200px" Title="Ò©Æ·Ãû³Æ" Property="DrugName"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Frozen="true" Width="200px" Title="Ò©Æ·Ãû³Æ" Property="DrugName"></RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="¹æ¸ñ" Property="DrugSpec"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="¹æ¸ñ" Property="DrugSpec"></RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="总库存" Property="StockQuantity"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="总库存" Property="StockQuantity">
|
||||||
|
<Template Context="s">
|
||||||
|
@if(s.StockQuantity<10)
|
||||||
|
{
|
||||||
|
@s.StockQuantity<p class="shaky-text">库存预警!</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@s.StockQuantity
|
||||||
|
}
|
||||||
|
</Template>
|
||||||
|
</RadzenDataGridColumn>
|
||||||
|
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDataGrid>
|
</RadzenDataGrid>
|
||||||
</div>
|
</div>
|
||||||
|
@ -83,7 +124,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
async void StockExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async void AccountBookExport()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
[Table("account_book_g2")]
|
||||||
|
public class AccountBookG2
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 主键
|
||||||
|
/// </summary>
|
||||||
|
[Column("id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 药品id
|
||||||
|
/// </summary>
|
||||||
|
[Column("drug_id")]
|
||||||
|
public string DrugId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1领入2发出3日结4总结5转结
|
||||||
|
/// </summary>
|
||||||
|
[Column("type")]
|
||||||
|
public int Type { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 科室
|
||||||
|
/// </summary>
|
||||||
|
[Column("department")]
|
||||||
|
public string Department { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备内记录凭证
|
||||||
|
/// </summary>
|
||||||
|
[Column("invoice_no")]
|
||||||
|
public string InvoiceNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处方号或凭证号
|
||||||
|
/// </summary>
|
||||||
|
[Column("order_no")]
|
||||||
|
public string OrderNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 批次
|
||||||
|
/// </summary>
|
||||||
|
[Column("manu_no")]
|
||||||
|
public string ManuNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 效期
|
||||||
|
/// </summary>
|
||||||
|
[Column("eff_date")]
|
||||||
|
public string EffDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上日结存
|
||||||
|
/// </summary>
|
||||||
|
[Column("yesterday_quantity")]
|
||||||
|
public int YQuantity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 收入
|
||||||
|
/// </summary>
|
||||||
|
[Column("add_quantity")]
|
||||||
|
public int AddQuantity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发出
|
||||||
|
/// </summary>
|
||||||
|
[Column("out_quantity")]
|
||||||
|
public int OutQuantity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 批次结存
|
||||||
|
/// </summary>
|
||||||
|
[Column("manu_stock")]
|
||||||
|
public int ManuStock { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 总结存
|
||||||
|
/// </summary>
|
||||||
|
[Column("total_stock")]
|
||||||
|
public int TotalStock { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发药领药人id
|
||||||
|
/// </summary>
|
||||||
|
[Column("user_id1")]
|
||||||
|
public int? UserId1 { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复核人id
|
||||||
|
/// </summary>
|
||||||
|
[Column("user_id2")]
|
||||||
|
public int? UserId2 { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备id
|
||||||
|
/// </summary>
|
||||||
|
[Column("machine_id")]
|
||||||
|
public string MachineId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 日期
|
||||||
|
/// </summary>
|
||||||
|
[Column("create_date")]
|
||||||
|
public string CreateDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 插入更新时间(当前时间戳)
|
||||||
|
/// </summary>
|
||||||
|
[Column("create_time")]
|
||||||
|
public DateTime CreateTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 药品名称
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public string DrugName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 规格
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public string DrugSpec { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 厂家
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public string Manufactory { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发药人
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public string OperatorName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复核人
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public string ReviewerName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 手术间
|
||||||
|
/// </summary>
|
||||||
|
[Column("shoushuJian")]
|
||||||
|
public string ShoushuJian { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -44,5 +44,11 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
|
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
|
||||||
public DrugInfo Drug { get; set; } = new();
|
public DrugInfo Drug { get; set; } = new();
|
||||||
|
|
||||||
|
//关联药品中的套餐信息表
|
||||||
|
[Association(ThisKey =nameof(DrugId),OtherKey = nameof(Plan.Id))]
|
||||||
|
public Plan PlanInfo { get; set; }=new();
|
||||||
|
//手术室药箱中的库存总数
|
||||||
|
[Column("stock_quantity")]
|
||||||
|
public int TotalQuantity { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
using LinqToDB.Common.Internal.Cache;
|
using LinqToDB.Mapping;
|
||||||
using LinqToDB.Mapping;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace MasaBlazorApp3.Pojo
|
namespace MasaBlazorApp3.Pojo
|
||||||
{
|
{
|
||||||
|
@ -37,7 +31,9 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("drawer_type")]
|
[Column("drawer_type")]
|
||||||
public int DrawerType { get; set; }
|
public int DrawerType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1物理隔板;2单支计数;3管控药盒;4储物箱;5智能显示;6称重计数;63称重计数药盒;653称重计数药盒智能显示;
|
||||||
|
/// </summary>
|
||||||
[Column("board_type")]
|
[Column("board_type")]
|
||||||
public int BoardType { get; set; }
|
public int BoardType { get; set; }
|
||||||
|
|
||||||
|
@ -47,7 +43,7 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("eff_date")]
|
[Column("eff_date")]
|
||||||
public string EffDate { get; set; }
|
public string EffDate { get; set; }
|
||||||
|
|
||||||
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
|
[LinqToDB.Mapping.Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
|
||||||
public DrugInfo? Drug { get; set; }
|
public DrugInfo? Drug { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +58,7 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("dmnguid")]
|
[Column("dmnguid")]
|
||||||
public string Dmnguid { get; set; }
|
public string Dmnguid { get; set; }
|
||||||
|
|
||||||
[Association(ThisKey = nameof(Dmnguid), OtherKey = nameof(DrugManuNo.Id))]
|
[LinqToDB.Mapping.Association(ThisKey = nameof(Dmnguid), OtherKey = nameof(DrugManuNo.Id))]
|
||||||
public DrugManuNo? drugManuNo { get; set; }
|
public DrugManuNo? drugManuNo { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,7 +68,6 @@ namespace MasaBlazorApp3.Pojo
|
||||||
|
|
||||||
[Column(IsColumn = false)]
|
[Column(IsColumn = false)]
|
||||||
public int CanReturnQuantity { get; set; }
|
public int CanReturnQuantity { get; set; }
|
||||||
|
|
||||||
[Column(IsColumn = false)]
|
[Column(IsColumn = false)]
|
||||||
public int CheckQuantity
|
public int CheckQuantity
|
||||||
{
|
{
|
||||||
|
@ -81,5 +76,18 @@ namespace MasaBlazorApp3.Pojo
|
||||||
}
|
}
|
||||||
[Column("Pos_No")]
|
[Column("Pos_No")]
|
||||||
public int BiaoDingStatus { get; set; }
|
public int BiaoDingStatus { get; set; }
|
||||||
|
|
||||||
|
//手术室药箱中的药品基数
|
||||||
|
[Column("Check_Quantity")]
|
||||||
|
public int BaseQuantity { get; set; }
|
||||||
|
//手术室药箱中某药品全部批次的需要加药数
|
||||||
|
[Column("col_no2")]
|
||||||
|
public int NeedQuantity { get; set; }
|
||||||
|
//手术室药箱中某药品全部批次的已取药待入库数
|
||||||
|
[Column("col_no1")]
|
||||||
|
public int AddToQuantity { get; set; }
|
||||||
|
//手术室药箱中药品补药状态(1需补药2已补药待入库0满库状态)
|
||||||
|
[Column("state")]
|
||||||
|
public int BoxState { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,5 +19,9 @@ namespace MasaBlazorApp3.Pojo.Config
|
||||||
public bool canBusExsit { get; set; }
|
public bool canBusExsit { get; set; }
|
||||||
public int doorAddr { get; set; }
|
public int doorAddr { get; set; }
|
||||||
public int storageBoxAddr { get; set; }
|
public int storageBoxAddr { get; set; }
|
||||||
|
//存在冰箱串口
|
||||||
|
public bool fridgePortExist { get; set; }
|
||||||
|
//冰箱串口号
|
||||||
|
public string fridgePortPath { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,8 @@ namespace MasaBlazorApp3.Pojo.Config
|
||||||
public bool opFirst { get; set; }
|
public bool opFirst { get; set; }
|
||||||
//自动退出登录时间,单位秒(0不自动退出)
|
//自动退出登录时间,单位秒(0不自动退出)
|
||||||
public int autoOutLog { get; set; }
|
public int autoOutLog { get; set; }
|
||||||
|
//手术室药盒的设备id
|
||||||
|
public string boxMachineId { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo.Config
|
||||||
|
{
|
||||||
|
//冰箱配置文件
|
||||||
|
public class fridgeConfig
|
||||||
|
{
|
||||||
|
public string temperatureRange { get; set; }
|
||||||
|
public int fridgeState { get; set; }
|
||||||
|
public int alertState { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 药品基数
|
||||||
|
/// </summary>
|
||||||
|
[Table("drug_base")]
|
||||||
|
public class DrugBase
|
||||||
|
{
|
||||||
|
[PrimaryKey]
|
||||||
|
[Column("drugid")]
|
||||||
|
public string DrugId { get; set; }
|
||||||
|
|
||||||
|
[Column("machine_id")]
|
||||||
|
public string MachineId { get; set; }
|
||||||
|
|
||||||
|
[Column("baseQuantity")]
|
||||||
|
public int BaseQuantity { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
//交接班表
|
||||||
|
[Table("hkc_changeshifts")]
|
||||||
|
public class HkcChangeShifts
|
||||||
|
{
|
||||||
|
[Column("Id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[Column("optDate")]
|
||||||
|
public DateTime optDate { get; set; }
|
||||||
|
[Column("FromOperator")]
|
||||||
|
public string FromOperator { get; set; }
|
||||||
|
[Column("FromRviewer")]
|
||||||
|
public string FromRviewer { get; set; }
|
||||||
|
[Column("ToOperator")]
|
||||||
|
public string ToOperator { get; set; }
|
||||||
|
[Column("ToReviewer")]
|
||||||
|
public string ToReviewer { get; set; }
|
||||||
|
[Column("ToDate")]
|
||||||
|
public DateTime ToDate { get; set; }
|
||||||
|
[Column("State")]
|
||||||
|
public string State { get; set; }
|
||||||
|
[Column("optState")]
|
||||||
|
public string optState { get; set; }
|
||||||
|
[Column("machine_id")]
|
||||||
|
public string MachineId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -154,6 +154,14 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("state")]
|
[Column("state")]
|
||||||
public int state { get; set; } = 0;
|
public int state { get; set; } = 0;
|
||||||
|
|
||||||
|
[Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
|
||||||
|
public OrderDetail Detail { get; set; } = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否选中
|
||||||
|
/// </summary>
|
||||||
|
[Column(IsColumn =false)]
|
||||||
|
public bool ItemIsChecked { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
[Table("Plan")]
|
||||||
|
public class Plan
|
||||||
|
{
|
||||||
|
//主键
|
||||||
|
[Column("Id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
//套餐名
|
||||||
|
[Column("Name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
//套餐描述
|
||||||
|
[Column("Description")]
|
||||||
|
public string Description { get; set; }
|
||||||
|
[Association(ThisKey = nameof(Id), OtherKey = nameof(PlanDetails.PlanId))]
|
||||||
|
public List<PlanDetails> _PlanDetails { get; set; } = new();
|
||||||
|
//添加时间
|
||||||
|
[Column("AddTime")]
|
||||||
|
public DateTime AddTime { get; set; }
|
||||||
|
//可用状态:0不可用1可用
|
||||||
|
[Column("usestate")]
|
||||||
|
public int UseState { get; set; }
|
||||||
|
//操作人
|
||||||
|
[Column("operatorUser")]
|
||||||
|
public int OperatorUser { get; set; }
|
||||||
|
//审核人
|
||||||
|
[Column("reviewerUser")]
|
||||||
|
public int ReviewerUser { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
[Table("Plan_Details")]
|
||||||
|
public class PlanDetails
|
||||||
|
{
|
||||||
|
//主键
|
||||||
|
[Column("Id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
//套餐外键
|
||||||
|
[Column("Plan_Id")]
|
||||||
|
public int PlanId { get; set; }
|
||||||
|
//药品基数
|
||||||
|
[Column("Base_Quantity")]
|
||||||
|
public int BaseQuantity { get; set; }
|
||||||
|
//药品ID
|
||||||
|
[Column("Drug_Id")]
|
||||||
|
public string DrugId { get; set; }
|
||||||
|
|
||||||
|
[Association(ThisKey = nameof(Id), OtherKey = nameof(PlanDetails.DrugId))]
|
||||||
|
public DrugInfo _DrugInfo { get; set; } = new();
|
||||||
|
//添加时间
|
||||||
|
[Column("AddTime")]
|
||||||
|
public DateTime AddTime { get; set; }
|
||||||
|
//可用状态:0不可用1可用
|
||||||
|
[Column("usestate")]
|
||||||
|
public int UseState { get; set; }
|
||||||
|
//操作人
|
||||||
|
[Column("operatorUser")]
|
||||||
|
public int OperatorUser { get; set; }
|
||||||
|
//审核人
|
||||||
|
[Column("reviewerUser")]
|
||||||
|
public int ReviewerUser { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -195,13 +195,70 @@ namespace MasaBlazorApp3.Pojo
|
||||||
PremissionName = "权限管理",
|
PremissionName = "权限管理",
|
||||||
PremissionPath = "/manage/role"
|
PremissionPath = "/manage/role"
|
||||||
});
|
});
|
||||||
|
Premission set = new Premission()
|
||||||
|
{
|
||||||
|
Id = 53,
|
||||||
|
PremissionName = "系统设置",
|
||||||
|
PremissionPath = "/manage/setting"
|
||||||
|
//PremissionPath = "/Box/Plan"
|
||||||
|
};
|
||||||
|
set.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 531,
|
||||||
|
PremissionName = "登录设置",
|
||||||
|
PremissionPath = "/manage/setting/login"
|
||||||
|
|
||||||
|
});
|
||||||
|
set.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 532,
|
||||||
|
PremissionName = "冰箱设置",
|
||||||
|
PremissionPath = "/manage/setting/Fridge"
|
||||||
|
|
||||||
|
});
|
||||||
|
x.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 54,
|
||||||
|
PremissionName = "套餐管理",
|
||||||
|
PremissionPath = "/Box/Plan"
|
||||||
|
});
|
||||||
|
x.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 55,
|
||||||
|
PremissionName = "绑定药箱",
|
||||||
|
PremissionPath = "/Box/BoxBindings"
|
||||||
|
});
|
||||||
|
x.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 56,
|
||||||
|
PremissionName = "药箱核对",
|
||||||
|
PremissionPath = "/Box/Check"
|
||||||
|
});
|
||||||
|
x.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 57,
|
||||||
|
PremissionName = "药箱加药",
|
||||||
|
PremissionPath = "/Box/BoxAdd"
|
||||||
|
});
|
||||||
|
x.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 58,
|
||||||
|
PremissionName = "药箱入库",
|
||||||
|
PremissionPath = "/Box/BoxAddBox"
|
||||||
|
});
|
||||||
list.Add(q);
|
list.Add(q);
|
||||||
list.Add(j);
|
list.Add(j);
|
||||||
list.Add(h);
|
list.Add(h);
|
||||||
list.Add(k);
|
list.Add(k);
|
||||||
|
x.AddChild(set);
|
||||||
list.Add(x);
|
list.Add(x);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasChild()
|
||||||
|
{
|
||||||
|
return this.Items.Count() > 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
using LinqToDB.Mapping;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo
|
||||||
|
{
|
||||||
|
//系统设置中的菜单
|
||||||
|
[Table("SettingManu")]
|
||||||
|
public class SettingManu
|
||||||
|
{
|
||||||
|
[PrimaryKey, Identity]
|
||||||
|
[Column("id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[Column("Manu_Name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
[Column("Manu_Icon")]
|
||||||
|
public string Icon { get; set; }
|
||||||
|
[Column("Path")]
|
||||||
|
public string Path { get; set; }
|
||||||
|
[Column(IsColumn = false)]
|
||||||
|
public List<SettingManu> Children { get; set; } = new();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Pojo.Vo
|
||||||
|
{
|
||||||
|
public class BoxTakeVo
|
||||||
|
{
|
||||||
|
public DrugInfo Drug { get; set; }
|
||||||
|
|
||||||
|
public ChannelStock BoxDetail { get; set; }
|
||||||
|
|
||||||
|
public ChannelStock ChannelStock { get; set; }
|
||||||
|
|
||||||
|
public int StockQuantity { get; set; }
|
||||||
|
|
||||||
|
public int Quantity { get; set; }
|
||||||
|
|
||||||
|
public int GetQuantity { get; set; } = 0;
|
||||||
|
|
||||||
|
public int Status { get; set; } = 0;
|
||||||
|
|
||||||
|
public int[] BeforeQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
public int[] AfterQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
public int AddQuantity { get; set; } = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,7 @@ using System.Reflection;
|
||||||
using MasaBlazorApp3.Pojo.Config;
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using LinqToDB.Common;
|
using LinqToDB.Common;
|
||||||
|
using MasaBlazorApp3.Util;
|
||||||
|
|
||||||
namespace MasaBlazorApp3.Port
|
namespace MasaBlazorApp3.Port
|
||||||
{
|
{
|
||||||
|
@ -32,6 +33,9 @@ namespace MasaBlazorApp3.Port
|
||||||
// 条码枪串口
|
// 条码枪串口
|
||||||
public SerialPort scanCodeSerial;
|
public SerialPort scanCodeSerial;
|
||||||
|
|
||||||
|
//冰箱串口
|
||||||
|
public SerialPort fridgeSerial;
|
||||||
|
|
||||||
|
|
||||||
public bool Operate { get; set; }
|
public bool Operate { get; set; }
|
||||||
public DateTime dateTime { get; set; } = DateTime.Now;
|
public DateTime dateTime { get; set; } = DateTime.Now;
|
||||||
|
@ -95,7 +99,21 @@ namespace MasaBlazorApp3.Port
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (_portConfig.fridgePortExist)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string FridgePortPath = _portConfig.fridgePortPath;
|
||||||
|
logger.Info($"打开冰箱串口【{FridgePortPath}】");
|
||||||
|
fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8);
|
||||||
|
//fridgeSerial.Open();
|
||||||
|
//logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.Error("冰箱串口打开错误" + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1001,5 +1019,382 @@ namespace MasaBlazorApp3.Port
|
||||||
#endregion 称重操作
|
#endregion 称重操作
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 冰箱
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱使能
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridegOpen(int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x01, 0x0C, 0xF2 };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
logger.Info($"冰箱使能【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
await Task.Delay(80);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"冰箱使能发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱失能
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeOff(int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x00, 0xCD, 0x32 };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
logger.Info($"冰箱失能【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
await Task.Delay(80);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"冰箱失能发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱报警使能
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeAlarmOn(int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x01, 0x5D, 0x32 };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x01 };
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
logger.Info($"冰箱报警使能【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
await Task.Delay(80);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"冰箱报警使能发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱报警失能
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeAlarmOff(int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x00, 0x9C, 0xF2 };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x00 };
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
logger.Info($"冰箱报警失能【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
await Task.Delay(80);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"冰箱报警失能发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱温度设定最小
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeMinSetting(float min, int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
int iMix = Convert.ToInt32(min * 10);
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
//byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] bufferMin = new byte[] { bAddress, 0x06, 0x10, 0xC9, 0x00, (byte)(iMix & 0xff) };
|
||||||
|
//获取数组CRC校验码
|
||||||
|
byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMin);
|
||||||
|
//Array.Reverse(byteDate);
|
||||||
|
int dataLength = bufferMin.Length;
|
||||||
|
Array.Resize(ref bufferMin, dataLength + byteDate.Length);
|
||||||
|
for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
{
|
||||||
|
bufferMin[dataLength + i] = byteDate[i];
|
||||||
|
}
|
||||||
|
logger.Info($"冰箱温度设定Min:【{Convert.ToHexString(bufferMin)}】");
|
||||||
|
fridgeSerial.Write(bufferMin, 0, 8);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱温度设定最大
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeMaxSetting(float max, int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int iMax = Convert.ToInt32(max * 10);
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
//byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] bufferMax = new byte[] { bAddress, 0x06, 0x10, 0xC8, 0x00, (byte)(iMax & 0xff) };
|
||||||
|
//获取数组CRC校验码
|
||||||
|
byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMax);
|
||||||
|
//Array.Reverse(byteDate);
|
||||||
|
int dataLength = bufferMax.Length;
|
||||||
|
Array.Resize(ref bufferMax, dataLength + byteDate.Length);
|
||||||
|
for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
{
|
||||||
|
bufferMax[dataLength + i] = byteDate[i];
|
||||||
|
}
|
||||||
|
logger.Info($"冰箱温度设定Max:【{Convert.ToHexString(bufferMax)}】");
|
||||||
|
fridgeSerial.Write(bufferMax, 0, 8);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取冰箱温度
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<float> GetFridgeTemperature(int iIndex)
|
||||||
|
{
|
||||||
|
float temperature = 0.0f;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21, 0x0A };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
|
||||||
|
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
|
||||||
|
logger.Info($"获取冰箱温度【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
|
||||||
|
byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
|
||||||
|
|
||||||
|
logger.Info($"获取冰箱温度返回【{Convert.ToHexString(retByte)}】");
|
||||||
|
|
||||||
|
if (retByte != null && retByte.Length >= 7)
|
||||||
|
{
|
||||||
|
var hight = retByte[3];
|
||||||
|
var low = retByte[4];
|
||||||
|
int iHight = Convert.ToInt32(hight << 8);
|
||||||
|
int iLow = Convert.ToInt32(retByte[4]);
|
||||||
|
temperature = Convert.ToSingle(iHight + iLow) / 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
return temperature;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置冰箱温度
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<float> SetFridgeTemperature(float temperature, int iIndex)
|
||||||
|
{
|
||||||
|
int tpt = (int)temperature * 10;
|
||||||
|
byte Temperature = (byte)(tpt & 0xff);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//if (!FridgeOperate)
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21,0x0A };
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0x02, 0x00, (byte)Temperature };
|
||||||
|
|
||||||
|
//获取数组CRC校验码
|
||||||
|
byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
//Array.Reverse(byteDate);
|
||||||
|
int dataLength = buffer.Length;
|
||||||
|
Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
{
|
||||||
|
buffer[dataLength + i] = byteDate[i];
|
||||||
|
}
|
||||||
|
logger.Info($"设置冰箱温度【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
|
||||||
|
await GetBufferByPort(fridgeSerial, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
return temperature;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 冰箱延迟报警
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task FridgeDelayWarm(int iIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//if (!FridgeOperate)
|
||||||
|
{
|
||||||
|
fridgeSerial.DiscardInBuffer();
|
||||||
|
byte bAddress;
|
||||||
|
if (iIndex == 1)
|
||||||
|
{
|
||||||
|
bAddress = 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bAddress = 0x02;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xCD, 0x00, 0x01, 0xDD, 0x35 };
|
||||||
|
//byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xCD, 0x00, 0x01 };
|
||||||
|
////获取数组CRC校验码
|
||||||
|
//byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
|
||||||
|
////Array.Reverse(byteDate);
|
||||||
|
//int dataLength = buffer.Length;
|
||||||
|
//Array.Resize(ref buffer, dataLength + byteDate.Length);
|
||||||
|
//for (int i = 0; i < byteDate.Length; i++)
|
||||||
|
//{
|
||||||
|
// buffer[dataLength + i] = byteDate[i];
|
||||||
|
//}
|
||||||
|
logger.Info($"冰箱延迟报警【{Convert.ToHexString(buffer)}】");
|
||||||
|
fridgeSerial.Write(buffer, 0, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
|
||||||
|
logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ internal class Program
|
||||||
appBuilder.Services.Configure<SettingConfig>(config.GetSection("setting"));
|
appBuilder.Services.Configure<SettingConfig>(config.GetSection("setting"));
|
||||||
appBuilder.Services.Configure<PortConfig>(config.GetSection("port"));
|
appBuilder.Services.Configure<PortConfig>(config.GetSection("port"));
|
||||||
appBuilder.Services.Configure<DrawerConfig>(config.GetSection("drawer"));
|
appBuilder.Services.Configure<DrawerConfig>(config.GetSection("drawer"));
|
||||||
|
appBuilder.Services.Configure<fridgeConfig>(config.GetSection("fridge"));
|
||||||
|
|
||||||
// i18n
|
// i18n
|
||||||
//appBuilder.Services.AddI18nText();
|
//appBuilder.Services.AddI18nText();
|
||||||
|
@ -62,6 +63,8 @@ internal class Program
|
||||||
appBuilder.Services.AddScoped<IDrugInfoDao, DrugInfoDao>();
|
appBuilder.Services.AddScoped<IDrugInfoDao, DrugInfoDao>();
|
||||||
appBuilder.Services.AddScoped<IMachineRecordDao, MachineRecordDao>();
|
appBuilder.Services.AddScoped<IMachineRecordDao, MachineRecordDao>();
|
||||||
appBuilder.Services.AddScoped<IInOutInvoiceDao, InOutInvoiceDao>();
|
appBuilder.Services.AddScoped<IInOutInvoiceDao, InOutInvoiceDao>();
|
||||||
|
appBuilder.Services.AddScoped<ISettingManuDao, SettingManuDao>();
|
||||||
|
appBuilder.Services.AddScoped<IPlanDao, PlanDao>();
|
||||||
|
|
||||||
//自选取药
|
//自选取药
|
||||||
appBuilder.Services.AddScoped<ISelfTakeDao, SelfTakeDao>();
|
appBuilder.Services.AddScoped<ISelfTakeDao, SelfTakeDao>();
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
@inherits LayoutComponentBase
|
||||||
|
@* @page "/manage/setting" *@
|
||||||
|
|
||||||
|
@layout MainLayout
|
||||||
|
|
||||||
|
<div class="app-container">
|
||||||
|
<div class="sidebar">
|
||||||
|
<RadzenPanelMenu>
|
||||||
|
@foreach (var menuItem in menuItems)
|
||||||
|
{
|
||||||
|
@if (menuItem.Children.Any())
|
||||||
|
{
|
||||||
|
<RadzenPanelMenuItem Text="@menuItem.Name" Icon="@menuItem.Icon">
|
||||||
|
@foreach (var child in menuItem.Children)
|
||||||
|
{
|
||||||
|
<RadzenPanelMenuItem Text="@child.Name" Icon="@child.Icon" />
|
||||||
|
}
|
||||||
|
</RadzenPanelMenuItem>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<RadzenPanelMenuItem Text="@menuItem.Name" Icon="@menuItem.Icon" Path="@menuItem.Path" />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</RadzenPanelMenu>
|
||||||
|
</div>
|
||||||
|
<!-- 右侧内容区域 -->
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
@Body
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.app-container {
|
||||||
|
display: flex;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 250px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-right: 1px solid #dee2e6;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-header {
|
||||||
|
padding: 1rem;
|
||||||
|
border-bottom: 1px solid #dee2e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100vh;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
height: 60px;
|
||||||
|
border-bottom: 1px solid #dee2e6;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
flex: 1;
|
||||||
|
padding: 1rem;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
@inject NavigationManager Navigation
|
||||||
|
@inject ISettingManuDao settingManuDao;
|
||||||
|
@code {
|
||||||
|
RadzenPanelMenu panelMenu;
|
||||||
|
List<SettingManu> menuItems = new();
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
menuItems = await settingManuDao.GetMenuItemsAsync();
|
||||||
|
}
|
||||||
|
// async void jump2Page(string path)
|
||||||
|
// {
|
||||||
|
// Navigation.NavigateTo(path);
|
||||||
|
// //可以在这里添加其他逻辑,例如记录导航历史或更新状态
|
||||||
|
// Console.WriteLine($"Navigating to: {path}");
|
||||||
|
// }
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MasaBlazorApp3.Util
|
||||||
|
{
|
||||||
|
public class CRC16MODBUS
|
||||||
|
{
|
||||||
|
/// Name: CRC-16/MODBUS x16+x15+x2+1
|
||||||
|
/// Poly: 0x8005
|
||||||
|
/// Init: 0xFFFF
|
||||||
|
/// Refin: true
|
||||||
|
/// Refout: true
|
||||||
|
/// Xorout: 0x0000
|
||||||
|
///******************************添加数据CRC16MODBUS校验位*******************************************
|
||||||
|
public static byte[] CrcModBus(byte[] buffer, int start = 0, int len = 0)
|
||||||
|
{
|
||||||
|
if (buffer == null || buffer.Length == 0) return null;
|
||||||
|
if (start < 0) return null;
|
||||||
|
if (len == 0) len = buffer.Length - start;
|
||||||
|
int length = start + len;
|
||||||
|
if (length > buffer.Length) return null;
|
||||||
|
ushort crc = 0xFFFF;// Initial value
|
||||||
|
for (int i = start; i < length; i++)
|
||||||
|
{
|
||||||
|
crc ^= buffer[i];
|
||||||
|
for (int j = 0; j < 8; j++)
|
||||||
|
{
|
||||||
|
if ((crc & 1) > 0)
|
||||||
|
crc = (ushort)((crc >> 1) ^ 0xA001);// 0xA001 = reverse 0x8005
|
||||||
|
else
|
||||||
|
crc = (ushort)(crc >> 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
byte[] ret = BitConverter.GetBytes(crc);
|
||||||
|
//Array.Reverse(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,8 @@
|
||||||
"loginMode": 1,
|
"loginMode": 1,
|
||||||
"opFirst": true,
|
"opFirst": true,
|
||||||
//自动退出登录时间,单位秒(0不自动退出)
|
//自动退出登录时间,单位秒(0不自动退出)
|
||||||
"autoOutLog": 0
|
"autoOutLog": 0,
|
||||||
|
"boxMachineId": "DM5"
|
||||||
},
|
},
|
||||||
"port": {
|
"port": {
|
||||||
"drawerPortPath": "COM1",
|
"drawerPortPath": "COM1",
|
||||||
|
@ -20,13 +21,23 @@
|
||||||
"canBusPortPath": "COM31",
|
"canBusPortPath": "COM31",
|
||||||
"canBusExsit": true,
|
"canBusExsit": true,
|
||||||
"doorAddr": 0,
|
"doorAddr": 0,
|
||||||
"storageBoxAddr": 0
|
"storageBoxAddr": 0,
|
||||||
|
"fridgePortExist": false,
|
||||||
|
"fridgePortPath": "COM3"
|
||||||
},
|
},
|
||||||
"drawer": {
|
"drawer": {
|
||||||
"single": [ 3 ],
|
"single": [ 3 ],
|
||||||
"weigh": [4],
|
"weigh": [ 4 ],
|
||||||
"box": [4],
|
"box": [ 4 ],
|
||||||
"label": [4]
|
"label": [ 4 ]
|
||||||
|
},
|
||||||
|
"fridge": {
|
||||||
|
//冰箱温度区间
|
||||||
|
"temperatureRange": "2-8",
|
||||||
|
//冰箱状态1关闭;0打开
|
||||||
|
"fridgeState": 0,
|
||||||
|
//冰箱报警状态1关闭;0打开
|
||||||
|
"alertState": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue