修改提交

This commit is contained in:
马巧 2025-08-30 08:54:40 +08:00
parent ba687a1dd0
commit a0c1e6c174
26 changed files with 463 additions and 190 deletions

View File

@ -66,23 +66,23 @@ namespace MasaBlazorApp3.DataAccess.Dao
Task<bool> BoxAddBoxFinish(ChannelList boxChannelList); Task<bool> BoxAddBoxFinish(ChannelList boxChannelList);
//手术室药盒获取药盒药品及库存信息 //手术室药盒获取药盒药品及库存信息
Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip); Task<PageData<PlanDetails>> GetBoxDrugInfo(string DrawerNo, int? take, int? skip);
//药盒移库时获取选中药盒号的药品信息 //药盒移库时获取选中药盒号的药品信息
Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip); Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, string drawerNo, int? take, int? skip);
/// <summary> /// <summary>
/// 药盒交换药品获取所有除本药盒外的所有药盒号 /// 药盒交换药品获取所有除本药盒外的所有药盒号
/// </summary> /// </summary>
/// <param name="machineId"></param> /// <param name="machineId"></param>
/// <returns></returns> /// <returns></returns>
Task<int[]> GetDrawerNum(ChannelStock channelStock); Task<string[]> GetDrawerNum(ChannelStock channelStock);
/// <summary> /// <summary>
/// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号 /// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号
/// </summary> /// </summary>
/// <param name="machineId"></param> /// <param name="machineId"></param>
/// <returns></returns> /// <returns></returns>
Task<int[]> GetDrawerNumForRemove(ChannelStock channelStock); Task<string[]> GetDrawerNumForRemove(ChannelStock channelStock);
//手术室药盒交换药品完成 //手术室药盒交换药品完成
Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> Stocks); Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> Stocks);

View File

@ -31,7 +31,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
//获取待处理处方中的麻醉师 //获取待处理处方中的麻醉师
public Task<PageData<OrderInfo>> GetAllOrderInfo(string Name, string OrderrNo, DateTime? OrderDate, int? take, int? skip); public Task<PageData<OrderInfo>> GetAllOrderInfo(string Name, string OrderrNo, DateTime? OrderDate, int? take, int? skip);
//获取所有药盒号 //获取所有药盒号
public Task<int[]> GetDrawerNum(string machineId); public Task<List<ChannelStock>> GetDrawerNum(string machineId);
/// 获取指定药盒号
public Task<List<BoxModel>> GetDrawerNumByOperationNum(string machineId, List<int> operationNum);
//核对处方 //核对处方
public Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo); public Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo);
} }

View File

@ -24,7 +24,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
private readonly PortUtil _portUtil; private readonly PortUtil _portUtil;
private readonly ILog logger = LogManager.GetLogger(typeof(ChannelListDao)); private readonly ILog logger = LogManager.GetLogger(typeof(ChannelListDao));
private readonly IServiceProvider _serviceProvider;
public ChannelListDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService, PortUtil portUtil) public ChannelListDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService, PortUtil portUtil)
{ {
_globalStateService = globalStateService; _globalStateService = globalStateService;
@ -574,6 +574,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
list[i].PlanInfo = _connection.Plan.AsQueryable().Where(p => p.Id == Convert.ToInt32(list[i].DrugId)).FirstOrDefault(); list[i].PlanInfo = _connection.Plan.AsQueryable().Where(p => p.Id == Convert.ToInt32(list[i].DrugId)).FirstOrDefault();
} }
list[i].BoxDisabled = list[i].TotalQuantity > 0 ? true : false;
} }
} }
@ -630,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
ListId = list.Id, ListId = list.Id,
MachineId = list.MachineId, MachineId = list.MachineId,
DrawerNo = list.DrawerNo, DrawerNo = list.DrawerNo,
ColNo=list.ColNo,
DrugId = planInfos[i].DrugId.ToString(), DrugId = planInfos[i].DrugId.ToString(),
BaseQuantity = planInfos[i].BaseQuantity, BaseQuantity = planInfos[i].BaseQuantity,
//BoxState = 1 //BoxState = 1
@ -706,6 +708,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
ListId = list.Id, ListId = list.Id,
MachineId = list.MachineId, MachineId = list.MachineId,
DrawerNo = list.DrawerNo, DrawerNo = list.DrawerNo,
ColNo=list.ColNo,
DrugId = planInfos[i].DrugId.ToString(), DrugId = planInfos[i].DrugId.ToString(),
BaseQuantity = planInfos[i].BaseQuantity, BaseQuantity = planInfos[i].BaseQuantity,
//BoxState = 1 //BoxState = 1
@ -817,11 +820,12 @@ namespace MasaBlazorApp3.DataAccess.Impl
List<ChannelList> channelLists = new List<ChannelList>(); List<ChannelList> channelLists = new List<ChannelList>();
var query = _connection.ChannelStock//.AsQueryable() var query = _connection.ChannelStock//.AsQueryable()
.Where(cs => cs.MachineId == _setting.boxMachineId) .Where(cs => cs.MachineId == _setting.boxMachineId)
.GroupBy(cs => new { cs.DrawerNo, cs.DrugId }) .GroupBy(cs => new { cs.DrawerNo,cs.ColNo, cs.DrugId })
.Select(g => new .Select(g => new
{ {
DrawerNo = g.Key.DrawerNo, DrawerNo = g.Key.DrawerNo,
DrugId = g.Key.DrugId, DrugId = g.Key.DrugId,
ColNo=g.Key.ColNo,
sumQuantity = g.Sum(cs => cs.Quantity), sumQuantity = g.Sum(cs => cs.Quantity),
baseQuantity = g.Max(cs => cs.BaseQuantity), baseQuantity = g.Max(cs => cs.BaseQuantity),
sumAdd=g.Sum(cs=>cs.AddToQuantity) sumAdd=g.Sum(cs=>cs.AddToQuantity)
@ -838,9 +842,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
foreach (var item in query) foreach (var item in query)
{ {
if (queryList[i].DrawerNo == item.DrawerNo) if (queryList[i].DrawerNo == item.DrawerNo && queryList[i].ColNo==item.ColNo)
{ {
ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault(); ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.ColNo==item.ColNo&&cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
if (stock != null) if (stock != null)
{ {
stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity; stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity;
@ -1078,7 +1082,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
#endregion #endregion
//查询药盒中是否有该批次药品有则把对应数量累加无则insert //查询药盒中是否有该批次药品有则把对应数量累加无则insert
ChannelStock? BoxChannelStock = _connection.ChannelStock.AsQueryable() ChannelStock? BoxChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrawerNo == boxTakeVo.BoxDetail.DrawerNo && cs.DrugId == boxTakeVo.ChannelStock.DrugId && cs.ManuNo == boxTakeVo.ChannelStock.ManuNo && cs.EffDate == EffDate).FirstOrDefault(); .Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrawerNo == boxTakeVo.BoxDetail.DrawerNo&&cs.ColNo==boxTakeVo.BoxDetail.ColNo && cs.DrugId == boxTakeVo.ChannelStock.DrugId && cs.ManuNo == boxTakeVo.ChannelStock.ManuNo && cs.EffDate == EffDate).FirstOrDefault();
int boxID = 0; int boxID = 0;
if (BoxChannelStock != null) if (BoxChannelStock != null)
{ {
@ -1097,6 +1101,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
ListId = boxTakeVo.BoxDetail.ListId, ListId = boxTakeVo.BoxDetail.ListId,
MachineId = _setting.boxMachineId, MachineId = _setting.boxMachineId,
DrawerNo = boxTakeVo.BoxDetail.DrawerNo, DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
ColNo=boxTakeVo.BoxDetail.ColNo,
//AddToQuantity = boxTakeVo.Quantity,//boxTakeVo.GetQuantity, //AddToQuantity = boxTakeVo.Quantity,//boxTakeVo.GetQuantity,
//NeedQuantity = 0, //NeedQuantity = 0,
Quantity = boxTakeVo.GetQuantity, Quantity = boxTakeVo.GetQuantity,
@ -1114,6 +1119,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
MachineId = _setting.machineId, MachineId = _setting.machineId,
DrawerNo = boxTakeVo.BoxDetail.DrawerNo, DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
ColNo=boxTakeVo.BoxDetail.ColNo,
DrugId = boxTakeVo.ChannelStock.DrugId, DrugId = boxTakeVo.ChannelStock.DrugId,
ManuNo = boxTakeVo.ChannelStock.ManuNo, ManuNo = boxTakeVo.ChannelStock.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,
@ -1124,7 +1130,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = boxTakeVo.ChannelStock.Id.ToString(), InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
}); });
int delResutl = await _connection.ChannelStock.Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrugId == boxTakeVo.BoxDetail.DrugId && cs.ManuNo == null).DeleteAsync(); int delResutl = await _connection.ChannelStock.Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrugId == boxTakeVo.BoxDetail.DrugId&&cs.DrawerNo==boxTakeVo.BoxDetail.DrawerNo && cs.ColNo == boxTakeVo.BoxDetail.ColNo && cs.ManuNo == null).DeleteAsync();
if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0) if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0)
{ {
if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5")) if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5"))
@ -1405,82 +1411,107 @@ namespace MasaBlazorApp3.DataAccess.Impl
} }
//手术室药盒获取药盒药品及库存信息 //手术室药盒获取药盒药品及库存信息
public async Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip) public async Task<PageData<PlanDetails>> GetBoxDrugInfo(string strDrawerNoCol, int? take, int? skip)
{ {
var query = _connection.PlanDetails.AsQueryable() if (!string.IsNullOrEmpty(strDrawerNoCol))
.InnerJoin(
_connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)),
(pd, cl) => pd.PlanId.ToString() == cl.DrugId,
(pd, cl) => pd).Where(pd => pd.UseState == 1);
int pagedData = await query.CountAsync();
List<PlanDetails> list = await query
.LoadWith(pd => pd._DrugInfo)
//.LoadWith(pd => cl._PlanDetails._DrugInfo)
.OrderBy((pd) => pd.DrugId)
//.ThenBy((cl) => cl.ColNo)
.Skip((int)skip)
.Take((int)take)
.ToListAsync();
if (list != null && list.Count > 0)
{ {
for (int i = 0; i < list.Count; i++) int drawerNo = 0;
int colNo = 0;
var spl = strDrawerNoCol.Split('-');
if (spl != null && spl.Count() > 0)
{ {
list[i].channelStocks = _connection.ChannelStock.AsQueryable() drawerNo = Convert.ToInt32(spl[0]);
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == DrawerNo && cs.DrugId == list[i].DrugId) colNo = Convert.ToInt32(spl[1]);
.LoadWith(cs => cs.Drug)
.LoadWith(cs => cs.Drug.Manus)
.ToList();
} }
}
//List<ChannelStock> list = await query var query = _connection.PlanDetails.AsQueryable()
// .LoadWith(cl => cl.Drug) .InnerJoin(
// .LoadWith(cl => cl.Drug.Manus) _connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(drawerNo) && cl.ColNo.Equals(colNo)),
// .LoadWith(cl => cl.drugManuNo) (pd, cl) => pd.PlanId.ToString() == cl.DrugId,
// .OrderBy((cl) => cl.DrawerNo) (pd, cl) => pd).Where(pd => pd.UseState == 1);
// .ThenBy((cl) => cl.ColNo)
// .Skip((int)skip)
// .Take((int)take)
// .ToListAsync();
return new PageData<PlanDetails>()
{
TotalDesserts = pagedData,
Desserts = list
};
}
//药盒移库时获取选中药盒号的药品信息
public async Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip)
{
try
{
var query = _connection.ChannelStock.AsQueryable().Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo.Equals(drawerNo) && c.DrugId.Equals(cs.DrugId) && c.ManuNo != cs.ManuNo && c.EffDate != cs.EffDate);
int pagedData = await query.CountAsync(); int pagedData = await query.CountAsync();
List<ChannelStock> list = await query List<PlanDetails> list = await query
.LoadWith(cs => cs.Drug) .LoadWith(pd => pd._DrugInfo)
.OrderBy((cs) => cs.DrugId) //.LoadWith(pd => cl._PlanDetails._DrugInfo)
.OrderBy((pd) => pd.DrugId)
//.ThenBy((cl) => cl.ColNo)
.Skip((int)skip) .Skip((int)skip)
.Take((int)take) .Take((int)take)
.ToListAsync(); .ToListAsync();
if (list != null && list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
list[i].channelStocks = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == drawerNo && cs.ColNo == colNo && cs.DrugId == list[i].DrugId)
.LoadWith(cs => cs.Drug)
.LoadWith(cs => cs.Drug.Manus)
.ToList();
}
}
return new PageData<ChannelStock>() //List<ChannelStock> list = await query
// .LoadWith(cl => cl.Drug)
// .LoadWith(cl => cl.Drug.Manus)
// .LoadWith(cl => cl.drugManuNo)
// .OrderBy((cl) => cl.DrawerNo)
// .ThenBy((cl) => cl.ColNo)
// .Skip((int)skip)
// .Take((int)take)
// .ToListAsync();
return new PageData<PlanDetails>()
{ {
TotalDesserts = pagedData, TotalDesserts = pagedData,
Desserts = list Desserts = list
}; };
} }
else
{
return null;
}
}
//药盒移库时获取选中药盒号的药品信息
public async Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, string strDrawerNoCol, int? take, int? skip)
{
try
{
int drawerNo = 0;
int colNo = 0;
var spl = strDrawerNoCol.Split('-');
if (spl != null && spl.Count() > 0)
{
drawerNo = Convert.ToInt32(spl[0]);
colNo = Convert.ToInt32(spl[1]);
}
var query = _connection.ChannelStock.AsQueryable().Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo.Equals(drawerNo) && c.ColNo.Equals(colNo) && c.DrugId.Equals(cs.DrugId) && c.ManuNo != cs.ManuNo && c.EffDate != cs.EffDate);
int pagedData = await query.CountAsync();
List<ChannelStock> list = await query
.LoadWith(cs => cs.Drug)
.OrderBy((cs) => cs.DrugId)
.Skip((int)skip)
.Take((int)take)
.ToListAsync();
return new PageData<ChannelStock>()
{
TotalDesserts = pagedData,
Desserts = list
};
}
catch (Exception ex) catch (Exception ex)
{ {
logger.Info($"药盒移库时获取选中药盒号的药品信息异常:{ex.Message}"); logger.Info($"药盒移库时获取选中药盒号的药品信息异常:{ex.Message}");
@ -1494,21 +1525,21 @@ namespace MasaBlazorApp3.DataAccess.Impl
/// </summary> /// </summary>
/// <param name="machineId"></param> /// <param name="machineId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int[]> GetDrawerNum(ChannelStock channelStock) public async Task<string[]> GetDrawerNum(ChannelStock channelStock)
{ {
int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo && !string.IsNullOrEmpty(cs.ManuNo) && cs.ManuNo != channelStock.ManuNo) string[] stringArray = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo && !string.IsNullOrEmpty(cs.ManuNo) && cs.ManuNo != channelStock.ManuNo)
.GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); .GroupBy(cs =>new { cs.DrawerNo, cs.ColNo }).Select(cs => cs.Key.DrawerNo.ToString()+"-"+cs.Key.ColNo.ToString()).ToArray();
return ints; return stringArray;
} }
/// <summary> /// <summary>
/// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号 /// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号
/// </summary> /// </summary>
/// <param name="machineId"></param> /// <param name="machineId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int[]> GetDrawerNumForRemove(ChannelStock channelStock) public async Task<string[]> GetDrawerNumForRemove(ChannelStock channelStock)
{ {
int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); string[] stringArray = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo&&cs.ColNo!=channelStock.ColNo).GroupBy(cs => new { cs.DrawerNo, cs.ColNo }).Select(cs => cs.Key.DrawerNo.ToString()+"-"+cs.Key.ColNo.ToString()).ToArray();
return ints; return stringArray;
} }
//手术室药盒交换药品完成 //手术室药盒交换药品完成
public async Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> stockList) public async Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> stockList)

View File

@ -102,14 +102,15 @@ namespace MasaBlazorApp3.DataAccess.Impl
public async Task<PageData<MachineRecord>> GetMachineRecordAsync(DateTime start, DateTime end, int operatorId, string drugId, int type, int? take, int? skip) public async Task<PageData<MachineRecord>> GetMachineRecordAsync(DateTime start, DateTime end, int operatorId, string drugId, int type, int? take, int? skip)
{ {
var query = _connection.MachineRecord.AsQueryable().Where(it => it.MachineId.Equals(_setting.machineId)); var query = from mr in _connection.MachineRecord select mr;
if (start != null && start != DateTime.MinValue) if (start != null && start != DateTime.MinValue)
{ {
query = query.Where(mr => mr.OperationTime > start); query = query.Where(mr => mr.OperationTime > start);
} }
if (end != null && end != DateTime.MinValue) if (end != null && end != DateTime.MinValue)
{ {
query = query.Where(mr => mr.OperationTime < end); query = query.Where(mr => mr.OperationTime < end.AddDays(1));
} }
if (operatorId != 0) if (operatorId != 0)
{ {
@ -123,14 +124,48 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
query = query.Where(mr => mr.DrugId == drugId); query = query.Where(mr => mr.DrugId == drugId);
} }
query =from mr in query
from dr in _connection.DrugInfo.Where(d => d.DrugId == mr.DrugId)
from us in _connection.User.Where(u => u.Id == mr.Operator)
select MachineRecord.Build(mr, dr, us);
int pagedData = await query.CountAsync(); int pagedData = await query.CountAsync();
List<MachineRecord> MachineRecords = await query.LoadWith(mr => mr.Drug) List<MachineRecord> MachineRecords = await query
.LoadWith(mr => mr.OperatorUser)
.OrderByDescending(mr => mr.OperationTime) .OrderByDescending(mr => mr.OperationTime)
.Skip((int)skip) .Skip((int)skip)
.Take((int)take) .Take((int)take)
.ToListAsync(); .ToListAsync();
//var query = _connection.MachineRecord.AsQueryable().Where(it => it.MachineId.Equals(_setting.machineId));
//if (start != null && start != DateTime.MinValue)
//{
// query = query.Where(mr => mr.OperationTime > start);
//}
//if (end != null && end != DateTime.MinValue)
//{
// query = query.Where(mr => mr.OperationTime < end.AddDays(1));
//}
//if (operatorId != 0)
//{
// query = query.Where(mr => mr.Operator == operatorId);
//}
//if (type != 0)
//{
// query = query.Where(mr => mr.Type == type);
//}
//if (!String.IsNullOrEmpty(drugId))
//{
// query = query.Where(mr => mr.DrugId == drugId);
//}
//int pagedData = await query.CountAsync();
//List<MachineRecord> MachineRecords = await query.LoadWith(mr => mr.Drug)
// .LoadWith(mr => mr.OperatorUser)
// .OrderByDescending(mr => mr.OperationTime)
// .Skip((int)skip)
// .Take((int)take)
// .ToListAsync();
return new PageData<MachineRecord>() { Desserts = MachineRecords, TotalDesserts = pagedData }; return new PageData<MachineRecord>() { Desserts = MachineRecords, TotalDesserts = pagedData };
} }

View File

@ -43,6 +43,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
public async Task<PageData<OrderInfo>> GetAllOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip) public async Task<PageData<OrderInfo>> GetAllOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip)
{ {
//var query = _connection.OrderInfo.AsQueryable(); //var query = _connection.OrderInfo.AsQueryable();
//query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo); //query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo);
@ -762,10 +763,31 @@ namespace MasaBlazorApp3.DataAccess.Impl
/// </summary> /// </summary>
/// <param name="machineId"></param> /// <param name="machineId"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int[]> GetDrawerNum(string machineId) public async Task<List<ChannelStock>> GetDrawerNum(string machineId)
{ {
int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); List<ChannelStock> stockList = _connection.ChannelStock
return ints; .Where(cs => cs.MachineId == machineId)
.GroupBy(cs => new { cs.DrawerNo, cs.ColNo })
.Select(g => new ChannelStock
{
DrawerNo = g.Key.DrawerNo,
ColNo = g.Key.ColNo,
})
.ToList();
return stockList;
}
/// <summary>
/// 获取指定药盒号
/// </summary>
/// <param name="machineId"></param>
/// <returns></returns>
public async Task<List<BoxModel>> GetDrawerNumByOperationNum(string machineId,List<int> operationNum)
{
List<BoxModel> boxModelList = new List<BoxModel>();
boxModelList =await _connection.ChannelStock
.Where(cs => cs.MachineId == machineId&& operationNum.Contains(cs.DrawerNo))
.Select(cs => new BoxModel { BoxName = cs.DrawerNo.ToString(), BoxNo = Convert.ToInt32(cs.ColNo) }).ToListAsync();
return boxModelList;
} }
//核对处方 //核对处方
public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo) public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo)

View File

@ -52,6 +52,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="log4net.config"> <Content Update="log4net.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>

View File

@ -109,7 +109,7 @@
<Columns> <Columns>
<RadzenDataGridColumn Frozen="true" Width="200px" Title="药盒号" Property="DrawerNo"> <RadzenDataGridColumn Frozen="true" Width="200px" Title="药盒号" Property="DrawerNo">
<Template Context="DrawerNo"> <Template Context="DrawerNo">
@DrawerNo.DrawerNo 号药盒 @($"{DrawerNo.DrawerNo}-{DrawerNo.ColNo}")
</Template> </Template>
</RadzenDataGridColumn> </RadzenDataGridColumn>
<RadzenDataGridColumn Title="总库存" Property="TotalQuantity"></RadzenDataGridColumn> <RadzenDataGridColumn Title="总库存" Property="TotalQuantity"></RadzenDataGridColumn>

View File

@ -1,49 +1,73 @@
@page "/Box/BoxBindings123" @page "/Box/BoxBindings"
<style>
.mycol {
width: calc(100%/7);
margin: 4px !important;
}
</style>
<div class="container-fluid"> <div class="container-fluid">
<div class="row">
<div class="col-12 mb-4">
@* <RadzenFieldset Text="查询">
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center">
<RadzenText TextStyle="TextStyle.Overline" class="rz-display-flex rz-mt-2 rz-my-0">选择套餐</RadzenText>
<RadzenDropDownDataGrid AllowVirtualization="true" Name="planName" TValue="Plan" Data="@plans" Value="@selectedPlan" ValueChanged="@OnPlanSelected"
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="Name">
<Columns>
<RadzenDropDownDataGridColumn Property="Name" Title="套餐名称" Sortable="false" />
</Columns>
</RadzenDropDownDataGrid>
<RadzenButton ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Outlined" Size="ButtonSize.Small" Click="@EditChannel" Text="绑定/解绑" />
</RadzenStack>
</RadzenFieldset> *@
<form onsubmit="@(() => EditChannel())">
<RadzenFieldset Text="选择套餐">
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
<RadzenRow AlignItems="AlignItems.Center">
<RadzenDropDownDataGrid AllowVirtualization="true" Name="planName" TValue="Plan" Data="@plans" Value="@selectedPlan" ValueChanged="@OnPlanSelected"
Style="width:100%; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="Name">
<Columns>
<RadzenDropDownDataGridColumn Property="Name" Title="套餐名称" Sortable="false" />
</Columns>
</RadzenDropDownDataGrid>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="12">
<RadzenButton ButtonType="ButtonType.Submit" Size="ButtonSize.Medium" Text="绑定/解绑" />
@* <RadzenButton Size="ButtonSize.Medium" Click="@EditChannel" IsBusy="isLoading" Text="解绑" ButtonStyle="ButtonStyle.Warning" /> *@
</RadzenColumn>
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <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" <RadzenDataList @ref="grid" LoadData="@LoadData" WrapItems="true" Count="@count" IsLoading="@isLoading" Data="@_forecasts" PageSize="54" style="height:61vh; overflow:auto">
ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Template Context="channel"> <Template Context="channel">
<RadzenCard class="col-3"> <RadzenCard class="mycol" onclick="@(() => CardClick(channel))">
<RadzenRow> <RadzenRow>
<RadzenColumn Size="8" Class="rz-text-truncate"> <RadzenColumn Size="8" Class="rz-text-truncate">
<b class="rz-pr-3">@(channel.DrawerNo)</b> <b class="rz-pr-3">@($"{channel.DrawerNo}-{channel.ColNo}")</b>
<b>号药盒</b> @* <b>号药盒</b> *@
</RadzenColumn> </RadzenColumn>
<RadzenColumn Size="4" Class="rz-text-align-end"> <RadzenColumn Size="4" class="rz-text-align-end">
@if (channel.TotalQuantity == 0) <RadzenCheckBox TValue="bool" Disabled=@channel.BoxDisabled @bind-Value=@channel.IsChecked />
{
<RadzenButton ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Outlined" Size="ButtonSize.Small" Click="@(() => EditChannel(channel))" Text="绑定/解绑" />
}
</RadzenColumn> </RadzenColumn>
</RadzenRow> </RadzenRow>
<hr style="border: none; background-color: rgba(0,0,0,.2); height: 1px; margin: 1rem 0;" /> <hr style="border: none; background-color: rgba(0,0,0,.2); height: 1px; margin: 1rem 0;" />
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center"> <RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center">
<RadzenStack Gap="0"> <RadzenStack Gap="0">
<RadzenText TextStyle="TextStyle.Overline" class="rz-display-flex rz-mt-2 rz-my-0">套餐</RadzenText> <RadzenText TextStyle="TextStyle.Overline" class="rz-display-flex rz-mt-2 rz-my-0">套餐</RadzenText>
@if (channel.DrugId == null || channel.TotalQuantity == 0) <RadzenText TextStyle="TextStyle.Body1"><b>@(channel.PlanInfo.Name)</b></RadzenText>
{
<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.Overline" class="rz-display-flex rz-mt-4 rz-mb-0">总库存</RadzenText>
<RadzenText TextStyle="TextStyle.Body1"><b>@(channel.TotalQuantity)</b></RadzenText> <RadzenText TextStyle="TextStyle.Body1"><b>@(channel.TotalQuantity)</b></RadzenText>
</RadzenStack> </RadzenStack>
@ -60,6 +84,7 @@
@inject IDrugInfoDao drugInfoDao; @inject IDrugInfoDao drugInfoDao;
@inject DialogService dialogService; @inject DialogService dialogService;
@inject NotificationService _message @inject NotificationService _message
@inject IPlanDao planDao;
RadzenDataList<ChannelList> grid; RadzenDataList<ChannelList> grid;
bool isLoading; bool isLoading;
int count; int count;
@ -74,22 +99,26 @@
List<Plan> plans; List<Plan> plans;
int firstFlag = 0;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();
var resultPlan = await planDao.GetAllPlanInfo();
plans = resultPlan.Desserts.Where(p => p._PlanDetails.Count > 0).ToList();
firstFlag = 0;
//drugInfos = await drugInfoDao.GetAllDrug();
} }
async Task LoadData(LoadDataArgs args) async Task LoadData(LoadDataArgs args)
{ {
isLoading = true; isLoading = true;
var result = await channelListDao.GetAllChannelListWithPlan(args.Top, args.Skip); var result = await channelListDao.GetAllChannelListWithPlan(args.Top, args.Skip);
// Update the Data property // Update the Data property
_forecasts = result.Desserts; _forecasts = result.Desserts;
// Update the count // Update the count
count = result.TotalDesserts; count = result.TotalDesserts;
@ -103,60 +132,120 @@
await grid.Reload(); await grid.Reload();
} }
async Task EditChannel(ChannelList list)
// 默认选中的项
private Plan selectedPlan = new();
// 处理选择变更(可选)
private void OnPlanSelected(Plan plan)
{ {
if (list.PlanInfo.Id > 0) selectedPlan = plan;
}
//绑定
async Task EditChannel()
{
List<ChannelList> bindList = _forecasts.Where(b => b.IsChecked).ToList();
if (bindList == null || bindList.Count <= 0)
{ {
// 说明之前有绑定并且未改变,那么就是在进行解绑 _message.Notify(
if (list.DrugId != null && list.DrugId.Equals(list.PlanInfo.Id.ToString())) new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请先选择药箱号再点击按钮", Duration = 4000 }
);
return;
}
if (!string.IsNullOrEmpty(bindList[0].DrugId))
{
//之前有绑定,在进行解绑
foreach (var item in bindList)
{ {
var b = await channelListDao.UnBindBox(list); var b = await channelListDao.UnBindBox(item);
if (b) if (b)
{ {
_message.Notify( _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"解除绑定成功", Duration = 4000 } 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();
} }
await grid.Reload();
} }
} }
else else
{ {// 否则是进行解绑
if (list.PlanInfo != null) if (selectedPlan != null && selectedPlan.Id > 0)
{ {
// 说明只设置了药品 foreach (var item in bindList)
var b = await channelListDao.BindBox(list);
if (b)
{ {
_message.Notify( var b = await channelListDao.BindBox(item, selectedPlan);
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"绑定成功", Duration = 4000 } if (b)
); {
await reloadGrid(); _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"绑定成功", Duration = 4000 }
);
}
} }
await grid.Reload();
} }
// 什么都没有选择或者么有改变,只是点击了按钮,此时不操作
else else
{ {
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请选择套餐", Duration = 4000 }
);
} }
} }
} }
async Task CardClick(ChannelList list)
{
if (firstFlag == 0 && !(list.BoxDisabled))
{
firstFlag = 1;
if (!string.IsNullOrEmpty(list.DrugId))
{
list.IsChecked = !list.IsChecked;
//已绑药品需要解绑,未绑定的不可选
if (list.IsChecked)
{
_forecasts.Where(it => it.DrugId != list.DrugId || it.TotalQuantity > 0).ToList().ForEach(it => it.BoxDisabled = true);
selectedPlan = await planDao.GetPlanById(Convert.ToInt32(list.DrugId));
}
else
{
_forecasts.Where(it => it.TotalQuantity <= 0).ToList().ForEach(it => it.BoxDisabled = false);
firstFlag = 0;
}
}
else
{
list.IsChecked = !list.IsChecked;
//未绑定药品则已绑定的不可选
if (list.IsChecked)
{
_forecasts.Where(it => !string.IsNullOrEmpty(it.DrugId) || it.TotalQuantity > 0).ToList().ForEach(it => it.BoxDisabled = true);
}
else
{
_forecasts.ToList().Where(it => it.TotalQuantity <= 0).ToList().ForEach(it => it.BoxDisabled = false);
firstFlag = 0;
}
}
}
else
{
if (!list.BoxDisabled)
{
list.IsChecked = !list.IsChecked;
}
//isChecked==false 1)是否全部是false是则将所有isChecked==true不是则不做改变
if (!_forecasts.Any(b => b.IsChecked == true))
{
_forecasts.Where(it => it.TotalQuantity <= 0).ToList().ForEach(it => it.BoxDisabled = false);
firstFlag = 0;
}
}
await InvokeAsync(StateHasChanged);
}
} }

View File

@ -1,9 +1,9 @@
@page "/Box/BoxBindings" @page "/Box/BoxBindings123"
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<RadzenFieldset class="col-12 mb-4 justify-content-around align-items-center" style="overflow:auto" Text="选择药盒"> <RadzenFieldset class="col-12 mb-4" Text="选择药盒">
<div class="col-12 row justify-content-center align-items-center text-center"> <div class="col-12 row justify-content-center align-items-center text-center">
<div class="row justify-content-around align-items-center" style="overflow:auto"> <div class="row justify-content-around align-items-center" style="overflow:auto">
@if (BoxList != null) @if (BoxList != null)
@ -12,14 +12,22 @@
{ {
<div class="col-2"> <div class="col-2">
<RadzenCheckBox Style="width:40px;height:40px;margin:2px" TValue="bool" Disabled=@item.BoxDisabled @bind-Value=@item.IsChecked Name="@($"CheckBox_{item.DrawerNo}")" Change="@((bool isChecked) => OnCheckBoxChange(isChecked, item.DrawerNo))" /> <RadzenCheckBox Style="width:40px;height:40px;margin:2px" TValue="bool" Disabled=@item.BoxDisabled @bind-Value=@item.IsChecked Name="@($"CheckBox_{item.DrawerNo}")" Change="@((bool isChecked) => OnCheckBoxChange(isChecked, item.DrawerNo))" />
<RadzenLabel Text=@item.DrawerNo.ToString() Component="@($"CheckBox_{item.DrawerNo}")" /> @if(item.DrawerNo<51)
{
<RadzenLabel Text="@($"{(item.DrawerNo % 2 == 0 ? item.DrawerNo : item.DrawerNo+1)/2}-{(item.DrawerNo % 2 == 0 ? 2 : 1)}")" Component="@($"CheckBox_{item.DrawerNo}")" />
}
else
{
<RadzenLabel Text="@($"{item.DrawerNo -25}")" Component="@($"CheckBox_{item.DrawerNo}")" />
}
</div> </div>
} }
} }
</div> </div>
</div> </div>
</RadzenFieldset> </RadzenFieldset>
<RadzenCard class="col-12 mb-4"> <RadzenCard class="col-12 mb-2">
<RadzenButton ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Outlined" Size="ButtonSize.Small" Click="@EditChannel" Text="绑定/解绑" /> <RadzenButton ButtonStyle="ButtonStyle.Secondary" Variant="Variant.Outlined" Size="ButtonSize.Small" Click="@EditChannel" Text="绑定/解绑" />
<hr style="border: none; background-color: rgba(0,0,0,.2); height: 1px; margin: 1rem 0;" /> <hr style="border: none; background-color: rgba(0,0,0,.2); height: 1px; margin: 1rem 0;" />
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center"> <RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center">

View File

@ -51,11 +51,11 @@
@inject PortUtil PortUtil; @inject PortUtil PortUtil;
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog)); private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
int removeQuantity; string removeQuantity = "1-1";
int status; int status;
int[] DrawerNos; string[] DrawerNos;
int SelectedDrawerNo = 0; string SelectedDrawerNo = "1-1";
[Parameter] public ChannelStock channelStock { get; set; } [Parameter] public ChannelStock channelStock { get; set; }
private bool CanTakeDrug = true; private bool CanTakeDrug = true;
@ -102,12 +102,12 @@
} }
async Task Save() async Task Save()
{ {
if (removeQuantity<=0) if (string.IsNullOrEmpty(removeQuantity))
{ {
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入移入数量", Duration = 4000 }); _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入移入数量", Duration = 4000 });
return; return;
} }
if (SelectedDrawerNo<=0) if (string.IsNullOrEmpty(SelectedDrawerNo))
{ {
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药盒", Duration = 4000 }); _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药盒", Duration = 4000 });
return; return;

View File

@ -68,8 +68,8 @@
int status; int status;
bool isLoading; bool isLoading;
int count; int count;
int[] DrawerNos; string[] DrawerNos;
int SelectedDrawerNo=0; string SelectedDrawerNo="";
[Parameter] public ChannelStock channelStock { get; set; } [Parameter] public ChannelStock channelStock { get; set; }
private bool CanTakeDrug = true; private bool CanTakeDrug = true;

View File

@ -4,9 +4,9 @@
<RadzenStack Orientation="Orientation.Horizontal" class="col-12 mb-4"> <RadzenStack Orientation="Orientation.Horizontal" class="col-12 mb-4">
<div class="col-2 row justify-content-center align-items-center text-center" > <div class="col-2 row justify-content-center align-items-center text-center" >
<div class="row justify-content-around align-items-center" style="height:600px;overflow:auto"> <div class="row justify-content-around align-items-center" style="height:600px;overflow:auto">
@foreach (int i in DrawerNos) @foreach (var cs in channelStockList)
{ {
<RadzenButton class="col-12" Style="margin-bottom:5px" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo != i ? Variant.Outlined : Variant.Flat)" /> <RadzenButton class="col-12" Style="margin-bottom:5px" Click="@(() => SelectDrawer((cs.DrawerNo.ToString() + "-" + cs.ColNo.ToString())))" Text="@($"{cs.DrawerNo.ToString() + "-" + cs.ColNo.ToString()}")" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo != (cs.DrawerNo.ToString() + "-" + cs.ColNo.ToString()) ? Variant.Outlined : Variant.Flat)" />
} }
</div> </div>
@ -122,13 +122,14 @@
bool isLoading; bool isLoading;
int count; int count;
int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
List<ChannelStock> channelStockList = new();
int status = 0; int status = 0;
int drawerNo = 1; string drawerNo="1-1";
string OrderNo; string OrderNo;
DateTime OrderDate; DateTime OrderDate;
void SelectDrawer(int drawerNo) void SelectDrawer(string strDrawerNoColNo)
{ {
this.drawerNo = drawerNo; this.drawerNo = strDrawerNoColNo;
grid.Reload(); grid.Reload();
} }
// void OnCurrentDateChanged(DateTime args) // void OnCurrentDateChanged(DateTime args)
@ -160,7 +161,7 @@
isLoading = false; isLoading = false;
DrawerNos = await orderInfoDao.GetDrawerNum(setting.Value.boxMachineId); channelStockList = await orderInfoDao.GetDrawerNum(setting.Value.boxMachineId);
} }
//替换按钮 //替换按钮
async Task replaceClick(ChannelStock cs) async Task replaceClick(ChannelStock cs)

View File

@ -308,7 +308,7 @@
} }
if(OrderDate != null && OrderDate != DateTime.MinValue) if(OrderDate != null && OrderDate != DateTime.MinValue)
{ {
orderInfos = orderInfos.Where(it => it.OrderDate.Date == OrderDate.Value.Date); orderInfos = orderInfos.Where(it => it.ChargeDate.Date == OrderDate.Value.Date);
// Update the count // Update the count
count = orderInfos.Count(); count = orderInfos.Count();
} }
@ -320,15 +320,16 @@
} }
if (Name != null && OrderDate != null && OrderDate != DateTime.MinValue && !string.IsNullOrEmpty(OrderNo)) if (Name != null && OrderDate != null && OrderDate != DateTime.MinValue && !string.IsNullOrEmpty(OrderNo))
{ {
orderInfos = orderInfos.Where(it => it.anaesthetistName == Name.Name && it.OrderDate.Date == OrderDate.Value.Date && it.OrderNo.Contains(OrderNo)); orderInfos = orderInfos.Where(it => it.anaesthetistName == Name.Name && it.ChargeDate.Date == OrderDate.Value.Date && it.OrderNo.Contains(OrderNo));
// Update the count // Update the count
count = orderInfos.Count(); count = orderInfos.Count();
} }
orderInfos = orderInfos.Skip(args.Skip.Value).Take(args.Top.Value).ToList(); orderInfos = orderInfos.Skip(args.Skip.Value).Take(args.Top.Value).ToList();
//查找该麻醉师对应的手术室 //查找该麻醉师对应的手术室
List<string> roomNameList = orderInfos.Select(it => it.RoomName).Distinct().ToList(); //List<string> roomNameList = orderInfos.Select(it => it.RoomName).Distinct().ToList();
BoxList = roomNameList.Select(it => new BoxModel { BoxName = it, BoxNo = Convert.ToInt32(it.Substring(it.Length - 2, 2)) }).ToList(); List<int> roomNameList = orderInfos.Select(it => Convert.ToInt32(it.RoomName.Substring(it.RoomName.Length - 2, 2))).ToList();
BoxList = await orderInfoDao.GetDrawerNumByOperationNum(setting.Value.machineId, roomNameList); //roomNameList.Select(it => new BoxModel { BoxName = it, BoxNo = Convert.ToInt32(it.Substring(it.Length - 2, 2)) }).ToList();
BoxNum = BoxList.FirstOrDefault(); BoxNum = BoxList.FirstOrDefault();
@ -339,14 +340,14 @@
//麻醉药品使用登记本导出 //麻醉药品使用登记本导出
async Task StockExport() async Task StockExport()
{ {
if (OrderDate == DateTime.MinValue) if (PortOrderDate == DateTime.MinValue)
{ {
_message.Notify( _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请选择处方时间再导出", Duration = 4000 } new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请选择处方时间再导出", Duration = 4000 }
); );
return; return;
} }
PageData<ReportUsageDateInfo> pageData = await reportDataDao.GetOrderInfoData(OrderDate); PageData<ReportUsageDateInfo> pageData = await reportDataDao.GetOrderInfoData(PortOrderDate);
GridReportUtil.PrintReport("Usage_Temp.grf", pageData); GridReportUtil.PrintReport("Usage_Temp.grf", pageData);
} }
// protected override async Task OnInitializedAsync() // protected override async Task OnInitializedAsync()

View File

@ -65,8 +65,8 @@
<RadzenDataGridColumn Width="70px" Title="库位" Property="ColNo"></RadzenDataGridColumn> <RadzenDataGridColumn Width="70px" Title="库位" Property="ColNo"></RadzenDataGridColumn>
<RadzenDataGridColumn Width="130px" Title="药品名称" Property="Drug.DrugName"> <RadzenDataGridColumn Width="130px" Title="药品名称" Property="Drug.DrugName">
<Template Context="channel"> <Template Context="channel">
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.Drug.DrugName</RadzenText> <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.Drug?.DrugName</RadzenText>
<RadzenText TextStyle="TextStyle.Caption">@channel.Drug.DrugSpec</RadzenText> <RadzenText TextStyle="TextStyle.Caption">@channel.Drug?.DrugSpec</RadzenText>
</Template> </Template>
</RadzenDataGridColumn> </RadzenDataGridColumn>
<RadzenDataGridColumn Width="110px" Title="批次" Property="ManuNo"> <RadzenDataGridColumn Width="110px" Title="批次" Property="ManuNo">

View File

@ -230,6 +230,7 @@
} }
else else
{ {
logger.Info($"{setting.Value.autoOutLog}未自动退出{(DateTime.Now - _portUtil.dateTime).TotalSeconds}-{CheckComputerFreeState.GetLastInputTime()}");
next(); next();
} }
} }

View File

@ -1,6 +1,5 @@
@page "/take/order" @page "/take/order"
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
@ -65,6 +64,7 @@
@code { @code {
@inject IOrderInfoDao orderInfoDao; @inject IOrderInfoDao orderInfoDao;
@inject DialogService dialogService; @inject DialogService dialogService;
RadzenDataGrid<OrderInfo> grid; RadzenDataGrid<OrderInfo> grid;
bool isLoading; bool isLoading;
int count; int count;

View File

@ -158,8 +158,8 @@
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
var colNo=data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo));
await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().ToArray()); await PortUtil.NoLightOnByCol(drawerNo, colNo.SelectMany(x => x).ToArray());
} }
var b = await PortUtil.OpenDrawerStatus(drawerNo); var b = await PortUtil.OpenDrawerStatus(drawerNo);
if (b) if (b)
@ -233,7 +233,7 @@
catch (Exception e) catch (Exception e)
{ {
RestData(); RestData();
logger.Info($"调拨加药发生错误,{e.Message}"); logger.Info($"药发生错误,{e.Message}");
_message.Notify( _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
); );

View File

@ -142,10 +142,10 @@
@if (channel.DrugId == null || channel.Quantity == 0) @if (channel.DrugId == null || channel.Quantity == 0)
{ {
<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:260px; display: block;" AllowFilteringByAllStringColumns="true" TextProperty="DrugName">
<Columns> <Columns>
<RadzenDropDownDataGridColumn Property="DrugId" Title="药品编码" Sortable="false" /> <RadzenDropDownDataGridColumn Property="DrugId" Title="药品编码" Sortable="false" />
<RadzenDropDownDataGridColumn Property="DrugName" Width="120px" Title="名称" Sortable="false" /> <RadzenDropDownDataGridColumn Property="DrugName" Title="名称" Sortable="false" />
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" Sortable="false" /> <RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" Sortable="false" />
</Columns> </Columns>
</RadzenDropDownDataGrid> </RadzenDropDownDataGrid>
@ -210,7 +210,6 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
await base.OnInitializedAsync(); await base.OnInitializedAsync();
//drugInfos = await drugInfoDao.GetAllDrug(); //drugInfos = await drugInfoDao.GetAllDrug();
} }

View File

@ -28,5 +28,7 @@ namespace MasaBlazorApp3.Pojo.Config
public bool fridgePortExist { get; set; } public bool fridgePortExist { get; set; }
//冰箱串口号 //冰箱串口号
public string fridgePortPath { get; set; } public string fridgePortPath { get; set; }
//储物箱串口
public int StorageCan { get; set; }
} }
} }

View File

@ -146,5 +146,15 @@ namespace MasaBlazorApp3.Pojo
{ {
get => DrawerNo + "-" + ColNo; get => DrawerNo + "-" + ColNo;
} }
public static MachineRecord Build(MachineRecord machineRecord,DrugInfo drug,User user)
{
if(machineRecord!=null)
{
machineRecord.Drug = drug;
machineRecord.OperatorUser = user;
}
return machineRecord;
}
} }
} }

View File

@ -231,14 +231,14 @@ namespace MasaBlazorApp3.Port
{ {
//if (DrawerNo > 8) //if (DrawerNo > 8)
//{ //{
if (DrawerNo % 2 == 0) if (DrawerNo % 2 == 0)
{ {
buffer = new byte[] { 0xaa, 0x22, 0xee }; buffer = new byte[] { 0xaa, 0x22, 0xee };
} }
else else
{ {
buffer = new byte[] { 0xaa, 0x12, 0xee }; buffer = new byte[] { 0xaa, 0x12, 0xee };
} }
//} //}
//else //else
//{ //{
@ -293,12 +293,22 @@ namespace MasaBlazorApp3.Port
// 打开电控门储物箱(有灯使能) // 打开电控门储物箱(有灯使能)
public async Task<byte[]> OpenStorage() public async Task<byte[]> OpenStorage()
{ {
canBusSerial.DiscardInBuffer(); if (_portConfig.StorageCan == 2)
byte[] buffer = new byte[] { 0xaa, (byte)(_portConfig.doorAddr), 0x01, (byte)_portConfig.storageBoxAddr, 0x00, 0x00, 0x00, 0xee }; {
canBusSerial.Write(buffer, 0, 8); canBusSerial.DiscardInBuffer();
byte[] buffer = new byte[] { 0xaa, (byte)(_portConfig.doorAddr), 0x01, (byte)_portConfig.storageBoxAddr, 0x00, 0x00, 0x00, 0xee };
canBusSerial.Write(buffer, 0, 8);
return await GetBufferByPort(canBusSerial, 8);
}
else
{
canBusSerialTwo.DiscardInBuffer();
byte[] buffer = new byte[] { 0xaa, (byte)(_portConfig.doorAddr), 0x01, (byte)_portConfig.storageBoxAddr, 0x00, 0x00, 0x00, 0xee };
canBusSerialTwo.Write(buffer, 0, 8);
return await GetBufferByPort(canBusSerialTwo, 8);
}
return await GetBufferByPort(canBusSerial, 8);
} }
// 关闭电控门储物箱(有灯失能) // 关闭电控门储物箱(有灯失能)
public void CloseStorage() public void CloseStorage()

View File

@ -54,7 +54,7 @@ internal class Program
// 数据库 // 数据库
appBuilder.Services.AddLinqToDBContext<AppDataConnection>((provider, options) => appBuilder.Services.AddLinqToDBContext<AppDataConnection>((provider, options) =>
options.UseMySql(config.GetValue<String>("connectionStrings")) options.UseMySql(config.GetValue<String>("connectionStrings"))
.UseDefaultLogging(provider)); .UseDefaultLogging(provider), ServiceLifetime.Scoped);
// dao层数据库操作 // dao层数据库操作
appBuilder.Services.AddScoped<IUserDao, UserDao>(); appBuilder.Services.AddScoped<IUserDao, UserDao>();
appBuilder.Services.AddScoped<IRoleDao, RoleDao>(); appBuilder.Services.AddScoped<IRoleDao, RoleDao>();

View File

@ -1,5 +1,5 @@
{ {
"connectionStrings": "server=127.0.0.1;port=3306;database=zhongbuzhanqu;userid=root;password=qq1223;Charset=utf8mb4;", "connectionStrings": "server=127.0.0.1;port=3306;database=zbzq;userid=root;password=qq1223;Charset=utf8mb4;",
"finger": { "finger": {
"ip": "192.168.50.59", "ip": "192.168.50.59",
"port": 4370, "port": 4370,
@ -25,6 +25,7 @@
"canBusPortPath": "COM5", "canBusPortPath": "COM5",
"totalDrawerCount": 16, "totalDrawerCount": 16,
"canBusTwoExsit": true, "canBusTwoExsit": true,
"StorageCan": 1,
//can线 //can线
"canBusPortPathTwo": "COM31", "canBusPortPathTwo": "COM31",
"doorAddr": 0, "doorAddr": 0,

View File

@ -0,0 +1,58 @@
DELETE from channel_list where machine_id='DM5';
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_1','DM5',1,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_1','DM5',1,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_2','DM5',2,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_2','DM5',2,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_3','DM5',3,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_3','DM5',3,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_4','DM5',4,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_4','DM5',4,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_5','DM5',5,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_5','DM5',5,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_6','DM5',6,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_6','DM5',6,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_7','DM5',7,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_7','DM5',7,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_8','DM5',8,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_8','DM5',8,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_9','DM5',9,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_9','DM5',9,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_10','DM5',10,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_10','DM5',10,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_11','DM5',11,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_11','DM5',11,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_12','DM5',12,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_12','DM5',12,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_13','DM5',13,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_13','DM5',13,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_14','DM5',14,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_14','DM5',14,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_15','DM5',15,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_15','DM5',15,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_16','DM5',16,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_16','DM5',16,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_17','DM5',17,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_17','DM5',17,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_18','DM5',18,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_18','DM5',18,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_19','DM5',19,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_19','DM5',19,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_20','DM5',20,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_20','DM5',20,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_21','DM5',21,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_21','DM5',21,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_22','DM5',22,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_22','DM5',22,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_23','DM5',23,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_23','DM5',23,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_24','DM5',24,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_24','DM5',24,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_25','DM5',25,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_25','DM5',25,2);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_26','DM5',26,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_27','DM5',27,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_28','DM5',28,1);
INSERT into channel_list(chnguid,machine_id,row_no,col_no) values('DM5_CHANNEL_29','DM5',29,1);
delete from channel_stock where machine_id='DM5'

Binary file not shown.

Binary file not shown.