Compare commits

..

2 Commits

Author SHA1 Message Date
马巧 396fb8743f 修改更新 2025-07-05 10:07:33 +08:00
马巧 ff96d4e676 更新提交 2025-06-27 09:54:42 +08:00
35 changed files with 2595 additions and 792 deletions

View File

@ -8,13 +8,19 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.ActiveCfg = Debug|x64
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.Build.0 = Debug|x64
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.Build.0 = Release|Any CPU
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.ActiveCfg = Release|x64
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -50,10 +50,36 @@ namespace MasaBlazorApp3.DataAccess.Dao
//手术室药箱补药获取毒麻柜中的药品信息
Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
//手术室药箱补药完成
Task<bool> BoxTakeFinish(List<BoxTakeVo> datas);
Task<bool> BoxTakeFinish(List<BoxTakeVo> datas, ChannelList boxChannelList);
//手术室药箱入库
Task<PageData<ChannelList>> GetBoxWaitInfo(int? take, int? skip);
//手术室药箱入库获取待入库明细
Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl);
Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl, int? take, int? skip);
// 手术室药箱待入库明细入库完成
Task<bool> BoxAddBoxFinish(ChannelList boxChannelList);
//手术室药箱获取药箱药品及库存信息
Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip);
//药箱移库时获取选中药箱号的药品信息
Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip);
/// <summary>
/// 药箱交换药品获取所有除本药箱外的所有药箱号
/// </summary>
/// <param name="machineId"></param>
/// <returns></returns>
Task<int[]> GetDrawerNum(ChannelStock channelStock);
/// <summary>
/// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号
/// </summary>
/// <param name="machineId"></param>
/// <returns></returns>
Task<int[]> GetDrawerNumForRemove(ChannelStock channelStock);
//手术室药箱交换药品完成
Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> Stocks);
//手术室药箱移出药品完成
Task<bool> BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity);
}
}

View File

@ -51,6 +51,10 @@ namespace MasaBlazorApp3.DataAccess.Dao
/// <param name="details"></param>
/// <returns></returns>
Task<bool> UpdatePlanDetail(PlanDetails details);
//查询要删除的套餐下是否有绑定,且绑定有库存
Task<bool> CheckPlanBind(int planId);
//查询要删除的药品是否有绑定且库存大于0
Task<bool> CheckPlanDetailBind(PlanDetails planDetail);
/// <summary>
/// 删除套餐中的药品
/// </summary>

View File

@ -21,5 +21,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
Task<bool> UpdateSign(int id, string sign);
bool UpdateUserPassword(User user);
//查询当前值班信息
HkcChangeShifts GetOnDuty();
//保存交接班信息
Task<bool> UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew);
}
}

View File

@ -315,7 +315,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
var q = _connection.ChannelStock
.Where(cs => cs.Id == Stock.Id)
.Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
.Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().Substring(0, 10) ?? String.Empty)
.Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.Value.ToString("yyyy-MM-dd") ?? String.Empty)
.Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty);
if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
@ -617,7 +617,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.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);
var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id&&p.UseState==1);
List<PlanDetails> planInfos = await query.ToListAsync();
if (planInfos != null && planInfos.Count > 0)
{
@ -631,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
DrawerNo = list.DrawerNo,
DrugId = planInfos[i].DrugId.ToString(),
BaseQuantity = planInfos[i].BaseQuantity,
BoxState = 1
});
if (mid > 0)
{
@ -789,7 +790,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
if (flag)
{
// 盘点库存是否足够
if (total > Quantity)
if (total >= Quantity)
{
for (var j = 0; Quantity > 0; j++)
@ -848,7 +849,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
}
}
//手术室药箱补药完成
public async Task<bool> BoxTakeFinish(List<BoxTakeVo> datas)
public async Task<bool> BoxTakeFinish(List<BoxTakeVo> datas, ChannelList boxChannelList)
{
try
@ -950,7 +951,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
#endregion
//更新药箱中的药品数量
int boxID = _connection.Insert(new ChannelStock() {
int boxID = _connection.Insert(new ChannelStock()
{
Id = Guid.NewGuid().ToString(),
ListId = boxTakeVo.BoxDetail.Id,
MachineId = _setting.boxMachineId,
@ -959,7 +961,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
NeedQuantity = 0,
DrugId = boxTakeVo.ChannelStock.DrugId,
ManuNo = boxTakeVo.ChannelStock.ManuNo,
EffDate= boxTakeVo.ChannelStock.EffDate,
EffDate = EffDate,
BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
BoardType = boxTakeVo.BoxDetail.BoardType,
BoxState = 2 //补药完成
@ -979,12 +981,12 @@ namespace MasaBlazorApp3.DataAccess.Impl
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 totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId)&&p.DrugId== boxTakeVo.BoxDetail.DrugId).Sum(p => p.BaseQuantity);
//int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.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 (mid > 0 && r > 0 && boxID > 0 && boxMId > 0)
{
if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5"))
{
@ -1079,7 +1081,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
}
}
//手术室药箱入库获取待入库明细
public async Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl)
public async Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl, int? take, int? skip)
{
try
{
@ -1092,8 +1094,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
// 当前药品取药数量
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)
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
.AsQueryable()
.Skip((int)skip)
.Take((int)take)
.OrderBy(cs => cs.EffDate).ToListAsync();
// 当前药品的库存总量
@ -1105,58 +1109,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
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;
@ -1167,5 +1119,523 @@ namespace MasaBlazorApp3.DataAccess.Impl
return null;
}
}
// 手术室药箱待入库明细入库完成
public async Task<bool> BoxAddBoxFinish(ChannelList boxChannelList)
{
try
{
_connection.BeginTransaction();
bool flag = true;
int totalQuantity =0;
for (var i = 0; i < boxChannelList.ChannelStocks.Count; i++)
{
var EffDate = boxChannelList.ChannelStocks[i].EffDate;
//效期转换出错
if (boxChannelList.ChannelStocks[i].EffDate != null)
{
string[] idate = boxChannelList.ChannelStocks[i].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;
}
}
}
}
// 手术室药箱入库记录
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
{
MachineId = _setting.boxMachineId,
DrawerNo = boxChannelList.ChannelStocks[i].DrawerNo,
DrugId = boxChannelList.ChannelStocks[i].DrugId,
ManuNo = boxChannelList.ChannelStocks[i].ManuNo,
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
OperationTime = DateTime.Now,
Type = 1,
Quantity = boxChannelList.ChannelStocks[i].AddToQuantity,
Operator = _globalStateService.Operator.Id,
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = boxChannelList.ChannelStocks[i].Id.ToString(),
});
// 更新库存
boxChannelList.ChannelStocks[i].Quantity= boxChannelList.ChannelStocks[i].Quantity+ boxChannelList.ChannelStocks[i].AddToQuantity;
boxChannelList.ChannelStocks[i].AddToQuantity = 0;
boxChannelList.ChannelStocks[i].NeedQuantity = 0;
boxChannelList.ChannelStocks[i].BoxState=0;
boxChannelList.ChannelStocks[i].EffDate = EffDate;
int r = _connection.Update(boxChannelList.ChannelStocks[i]);
totalQuantity += _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId) && p.DrugId == boxChannelList.ChannelStocks[i].DrugId).Sum(p => p.BaseQuantity);
if (!(mid > 0 && r > 0 ))
{
flag = false;
break;
}
}
if (flag)
{
boxChannelList.TotalQuantity+= totalQuantity;
int updateResult = _connection
.Update(boxChannelList);
if (updateResult > 0)
{
_connection.CommitTransaction();
}
else
{ flag = false;
_connection.RollbackTransaction();
}
}
else
{
_connection.RollbackTransaction();
}
return flag;
}
catch (Exception ex)
{
logger.Info($"手术室药箱待入库明细入库完成操作异常:{ex.Message}");
return false;
}
}
//手术室药箱获取药箱药品及库存信息
public async Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip)
{
var query = _connection.PlanDetails.AsQueryable()
.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++)
{
list[i].channelStocks = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == DrawerNo && cs.DrugId == list[i].DrugId)
.LoadWith(cs => cs.Drug)
.LoadWith(cs => cs.Drug.Manus)
.ToList();
}
}
//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,
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();
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)
{
logger.Info($"药箱移库时获取选中药箱号的药品信息异常:{ex.Message}");
return null;
}
}
/// <summary>
/// 药箱交换药品获取所有除本药箱外的所有药箱号
/// </summary>
/// <param name="machineId"></param>
/// <returns></returns>
public async Task<int[]> 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)
.GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
return ints;
}
/// <summary>
/// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号
/// </summary>
/// <param name="machineId"></param>
/// <returns></returns>
public async Task<int[]> 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();
return ints;
}
//手术室药箱交换药品完成
public async Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> stockList)
{
try
{
bool flag = true;
_connection.BeginTransaction();
for (int i = 0; i < stockList.Count; i++)
{
//查询出药的药箱是否有该批次的药品
ChannelStock replace1ChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stock.DrawerNo && cs.DrugId == stockList[i].DrugId && cs.ManuNo == stockList[i].ManuNo && cs.EffDate == stockList[i].EffDate)
.FirstOrDefault();
if (replace1ChannelStock != null)
{
//如果有该批次的药品,则更新数量
int r = _connection.ChannelStock.Where(cs => cs.Id == replace1ChannelStock.Id)
.Set(cs => cs.Quantity, replace1ChannelStock.Quantity + stockList[i].AddQuantity)
.Update();
if (r <= 0)
{
logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
}
}
else
{
//如果没有该批次的药品,则新增一条记录
int mid = _connection.Insert(new ChannelStock()
{
Id = Guid.NewGuid().ToString(),
MachineId = stockList[i].MachineId,
DrawerNo = stock.DrawerNo,
DrugId = stockList[i].DrugId,
ManuNo = stockList[i].ManuNo,
EffDate = stockList[i].EffDate,
Quantity = stockList[i].AddToQuantity,
BaseQuantity = stockList[i].BaseQuantity,
BoxState = 1
});
if (mid <= 0)
{
logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false;
break;
}
}
//记录操作记录
int recordId = _connection.InsertWithInt32Identity(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
OperationTime = DateTime.Now,
Type = 69, //交换
Quantity = stockList[i].AddQuantity,
Operator = _globalStateService.Operator.Id,
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = stockList[i].Id.ToString(),
});
if (recordId <= 0)
{
logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false;
break;
}
//更新入药的药箱中的药品数量
ChannelStock replace2ChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stockList[i].DrawerNo && cs.DrugId == stock.DrugId && cs.ManuNo == stock.ManuNo && cs.EffDate == stock.EffDate)
.FirstOrDefault();
if (replace2ChannelStock != null)
{
//如果有该批次的药品,则更新数量
int r = _connection.ChannelStock.Where(cs => cs.Id == replace2ChannelStock.Id)
.Set(cs => cs.Quantity, replace2ChannelStock.Quantity + stockList[i].AddQuantity)
.Update();
if (r <= 0)
{
logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false;
break;
}
}
else
{
//如果没有该批次的药品,则新增一条记录
int mid = _connection.Insert(new ChannelStock()
{
Id = Guid.NewGuid().ToString(),
MachineId = stockList[i].MachineId,
DrawerNo = stockList[i].DrawerNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
Quantity = stockList[i].AddQuantity,
BaseQuantity = stock.BaseQuantity,
BoxState = 1
});
if (mid <= 0)
{
logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false;
break;
}
}
//记录操作记录
int record2Id = _connection.InsertWithInt32Identity(new MachineRecord()
{
MachineId = stockList[i].MachineId,
DrawerNo = stockList[i].DrawerNo,
DrugId = stockList[i].DrugId,
ManuNo = stockList[i].ManuNo,
EffDate = !String.IsNullOrEmpty(stockList[i].EffDate) ? DateTime.ParseExact(stockList[i].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
OperationTime = DateTime.Now,
Type = 69, //交换
Quantity = stockList[i].AddQuantity,
Operator = _globalStateService.Operator.Id,
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = stock.Id.ToString(),
});
if (record2Id <= 0)
{
logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false;
break;
}
//出库药箱减数量
int updateQuantity = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
.Set(cs => cs.Quantity, stock.Quantity - stockList[i].AddQuantity)
.Update();
if (updateQuantity <= 0)
{
logger.Info($"更新出库药箱药品减数量失败,药箱号:{stock.DrawerNo}药品ID{stock.DrugId}");
flag = false;
break;
}
//入库药箱减数量
int updateQuantity2 = _connection.ChannelStock.Where(cs => cs.Id == stockList[i].Id)
.Set(cs => cs.Quantity, stockList[i].Quantity - stockList[i].AddQuantity)
.Update();
if (updateQuantity2 <= 0)
{
logger.Info($"更新入库药箱药品减数量失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}"); flag = false;
break;
}
}
if (flag)
{
_connection.CommitTransaction();
}
else
{
_connection.RollbackTransaction();
}
return flag;
}
catch (Exception ex)
{
logger.Info($"手术室药箱交换药品完成异常:{ex.Message}");
_connection.RollbackTransaction();
return false;
}
}
//手术室药箱移出药品完成
public async Task<bool> BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity)
{
try
{
bool flag = true;
_connection.BeginTransaction();
//查询移入的药品是否有库存
ChannelStock inChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId && cs.ManuNo == stock.ManuNo && cs.EffDate == stock.EffDate)
.FirstOrDefault();
if (inChannelStock != null)
{
//如果有该批次的药品,则更新数量
int r = _connection.ChannelStock.Where(cs => cs.Id == inChannelStock.Id)
.Set(cs => cs.Quantity, inChannelStock.Quantity + removeQuantity)
.Update();
if (r <= 0)
{
logger.Info($"手术室药箱移出药品更新数量失败,药箱号:{SelectedDrawerNo}药品ID{stock.DrugId}");
}
}
else
{
//如果没有该批次的药品,先查询是否有未绑批次的,有则更新批次信息,无则新增一条记录
ChannelStock inDrugChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId)
.FirstOrDefault();
if (inDrugChannelStock != null)
{
int mid = _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id)
.Set(cs => cs.Quantity, removeQuantity)
.Set(cs => cs.ManuNo, stock.ManuNo)
.Set(cs => cs.EffDate, stock.EffDate)
.Update();
if (mid <= 0)
{
logger.Info($"更新药箱药品批次记录失败,药箱号:{stock.DrawerNo}药品ID{stock.DrugId}");
flag = false;
}
}
else
{
int mid = _connection.Insert(new ChannelStock()
{
Id = Guid.NewGuid().ToString(),
MachineId = stock.MachineId,
DrawerNo = SelectedDrawerNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
Quantity = removeQuantity,
BaseQuantity = stock.BaseQuantity,
BoxState = 1
});
if (mid <= 0)
{
logger.Info($"新增药箱药品记录失败,药箱号:{stock.DrawerNo}药品ID{stock.DrugId}");
flag = false;
}
}
}
if (flag)
{
//减本库位库存数量
int updateQuantity2 = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
.Set(cs => cs.Quantity, stock.Quantity - removeQuantity)
.Update();
if (updateQuantity2 <= 0)
{
logger.Info($"更新入库药箱药品减数量失败,药箱号:{stock.DrawerNo}药品ID{stock.DrugId}");
flag = false;
}
else
{
int updateTotalQuantity = 0;
int updateMoveToTotalQuantity = 0;
//修改总库存数
ChannelList channelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == stock.DrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault();
if (channelList != null)
{
updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == channelList.Id)
.Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity)
.Update();
}
//修改移入药箱的总库存数
ChannelList moveToChannelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == SelectedDrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault();
if (moveToChannelList != null)
{
updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == moveToChannelList.Id)
.Set(cl => cl.TotalQuantity, channelList.TotalQuantity + removeQuantity)
.Update();
}
if (updateTotalQuantity > 0 && updateMoveToTotalQuantity > 0)
{
flag = true;
}
else
{
flag = false;
}
}
if (flag)
{
//记录操作记录
int recordId = _connection.InsertWithInt32Identity(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
ColNo = SelectedDrawerNo,//移入的药箱号
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
OperationTime = DateTime.Now,
Type = 21, //交换
Quantity = removeQuantity,
Operator = _globalStateService.Operator.Id,
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = stock.Id.ToString(),
});
if (recordId <= 0)
{
logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stock.DrawerNo}药品ID{stock.DrugId}");
flag = false;
}
}
}
if (flag)
{
_connection.CommitTransaction();
}
else
{
_connection.RollbackTransaction();
}
return flag;
}
catch (Exception ex)
{
logger.Info($"手术室药箱移出药品异常{ex.Message}");
_connection.RollbackTransaction();
return false;
}
}
}
}

View File

@ -68,8 +68,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
int pagedData = await query.CountAsync();
List<OrderInfo> list = await query
.LoadWith(oi => oi.Detail)
.LoadWith(oi => oi.Detail.Drug)
//.LoadWith(oi => oi.Detail)
//.LoadWith(oi => oi.Detail.Drug)
.OrderBy((oi) => oi.RecvDate)
.ThenBy((oi => oi.OrderNo))
.Skip((int)skip)
@ -590,10 +590,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
/// <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
@ -601,7 +597,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
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));
@ -619,8 +614,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
int pagedData = await query.CountAsync();
List<OrderInfo> list = await query
//.LoadWith(oi => oi.Detail)
//.LoadWith(oi => oi.Detail.Drug)
//.LoadWith(oi => oi.DetailList)
.OrderBy((oi) => oi.RecvDate)
.ThenBy((oi => oi.OrderNo))
.Skip((int)skip)
@ -630,12 +624,56 @@ namespace MasaBlazorApp3.DataAccess.Impl
{
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)
for (int j = 0; j < list[i].DetailList.Count; j++)
{
list[i].DetailList[j].Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailList[j].DrugId).FirstOrDefaultAsync();
}
}
}
//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>()
{
@ -670,9 +708,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
OrderInfo oi = selectedOrderInfos[i];
//更新处方状态
if (oi.state == 1)
if (oi.Status == 1)
{
int iUpdate= _connection.OrderInfo.Where(o=>o.OrderNo==oi.OrderNo).Set(o=>o.state,2).Update();
int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update();
_connection.Insert(new OrderFinish()
{
OrderNo = oi.OrderNo,
@ -683,25 +721,34 @@ namespace MasaBlazorApp3.DataAccess.Impl
Operator = _globalStateService.Operator.NickName,
});
}
int drawerNo = DrawerNo + 1;
int drawerNo = DrawerNo;
if (oi.DetailList != null && oi.DetailList.Count > 0)
{
for (int j = 0; j < oi.DetailList.Count; j++)
{
ChannelStock cs = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.DrugId == oi.Detail.DrugId
&& cs.ManuNo == oi.Detail.SetManuNo
.Where(cs => cs.DrugId == oi.DetailList[j].DrugId
&& cs.ManuNo == oi.DetailList[j].SetManuNo
// && cs.EffDate == oi._OrderDetail.SetEffDate
&& cs.MachineId.Equals(_setting.boxMachineId)
&& cs.DrawerNo == drawerNo
&& cs.Quantity >= oi.Detail.Quantity).First();
&& cs.Quantity >= oi.DetailList[j].Quantity).First();
if (cs == null)
{
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存");
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存");
continue;
}
cs.Quantity = cs.Quantity - oi.Detail.Quantity;
cs.Quantity = cs.Quantity - oi.DetailList[j].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}");
logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}");
// 更新数据 库存信息
_connection.Update(cs);
//更新ChannelList对应的总库存
ChannelList channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs.MachineId) && cl.Id.Equals(cs.ListId) && cl.DrawerNo.Equals(cs.DrawerNo)).FirstOrDefault();
channelList.TotalQuantity = channelList.TotalQuantity - oi.DetailList[j].Quantity;
_connection.Update(channelList);
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
.Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
@ -709,6 +756,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.Where(it => it.ManuNo.Equals(cs.ManuNo))
.Where(it => it.DrawerType == 1)
.ToList();
if (cs != null)
{
_connection.Insert(new MachineRecord()
@ -722,7 +770,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
Operator = _globalStateService.Operator?.Id,
Reviewer = _globalStateService.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = oi.Detail.Quantity,
Quantity = oi.DetailList[j].Quantity,
Type = 2,
InvoiceId = oi.OrderNo
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
@ -733,18 +781,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
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.DrugId == oi.DetailList[j].DrugId)
.Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
//保存账册
int iInsertResult = _connection.Insert(new AccountBookG2()
{
DrugId = oi.Detail.DrugId,
DrugId = oi.DetailList[j].DrugId,
Type = 2,
Department = oi.DeptName,
OrderNo = oi.OrderNo,
ManuNo = cs.ManuNo,
EffDate = cs.EffDate,
OutQuantity = oi.Detail.Quantity,
OutQuantity = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId,
@ -752,19 +800,19 @@ namespace MasaBlazorApp3.DataAccess.Impl
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,
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailList[j].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.DrugId == oi.DetailList[j].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;
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity;
_connection.Update(accountBookG2Day);
}
else
@ -772,13 +820,13 @@ namespace MasaBlazorApp3.DataAccess.Impl
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = _connection.Insert(new AccountBookG2()
{
DrugId = oi.Detail.DrugId,
DrugId = oi.DetailList[j].DrugId,
Type = 3,
ManuNo = cs.ManuNo,
EffDate = cs.EffDate,
YQuantity = 0,
ManuStock = oi.Detail.Quantity,
TotalStock = oi.Detail.Quantity,
ManuStock = oi.DetailList[j].Quantity,
TotalStock = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId,
@ -787,18 +835,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
});
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
logger.Info($"未写入日结存数据{oi.DetailList[j].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.DrugId == oi.DetailList[j].DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity;
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity;
_connection.Update(accountBookG2Total);
}
else
@ -806,11 +854,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = _connection.Insert(new AccountBookG2()
{
DrugId = oi.Detail.DrugId,
DrugId = oi.DetailList[j].DrugId,
Type = 4,
YQuantity = 0,
ManuStock = oi.Detail.Quantity,
TotalStock = oi.Detail.Quantity,
ManuStock = oi.DetailList[j].Quantity,
TotalStock = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId,
@ -819,11 +867,14 @@ namespace MasaBlazorApp3.DataAccess.Impl
});
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}");
logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}");
}
}
}
}
}
}
return true;

View File

@ -4,6 +4,7 @@ using MasaBlazorApp3.DataAccess.Dao;
using MasaBlazorApp3.Pojo;
using MasaBlazorApp3.Pojo.Config;
using Microsoft.Extensions.Options;
using Org.BouncyCastle.Crypto;
using System;
using System.Collections.Generic;
using System.Data.Common;
@ -112,6 +113,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
plan.AddTime = DateTime.Now;
plan.OperatorUser = _globalStateService.Operator.Id;
plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
plan.UseState = 1;
return _connection.InsertWithInt32Identity(plan) > 0;
}
catch (Exception ex)
@ -143,6 +145,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
return false;
}
}
//查询要删除的套餐下是否有绑定,且绑定有库存
public async Task<bool> CheckPlanBind(int planId)
{
try
{
//查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
List<string> channelListsId =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.boxMachineId).Select(cl => cl.Id).ToListAsync();
if (channelListsId != null && channelListsId.Count > 0)
{
bool searchResult = _connection.ChannelStock.AsQueryable().Where(cs => channelListsId.Contains(cs.ListId)).Any(cs => cs.Quantity > 0);
if (searchResult)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
catch (Exception ex)
{
logger.Error($"查询要删除的套餐下是否有绑定异常{ex.Message}");
return false;
}
}
/// <summary>
/// 删除套餐
/// </summary>
@ -154,28 +188,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
{
_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();
pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync();
}
int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update();
if (pdResult > 0 && pResult > 0)
int pResult = await _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).UpdateAsync();
//如果套餐下有绑药且库存为0的也将绑定药品信息一并删除
List<string> listIds =await _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString()).Select(cl => cl.Id).ToListAsync();
int iDelResult = 1;
int iDelChannelListResult = 1;
if (listIds != null && listIds.Count > 0)
{
//删除channelStock表中的绑定药品
iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete();
_connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl=>cl.DrugId,"").Update();
}
if (pdResult > 0 && pResult > 0 && iDelResult > 0 && iDelChannelListResult > 0)
{
flag = true;
}
}
if (flag)
{
@ -207,7 +246,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
{
if (!string.IsNullOrEmpty(details.DrugId))
{
int id = _connection.InsertWithInt32Identity(details);
int id =await _connection.InsertWithInt32IdentityAsync(details);
details.Id = id;
return id > 0;
}
@ -235,7 +274,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.Where(p => p.Id == details.Id)
.Set(p => p.DrugId, details._DrugInfo.DrugId)
.Set(p => p.BaseQuantity, details.BaseQuantity);
return iResult.Update() > 0;
return await iResult.UpdateAsync() > 0;
}
catch (Exception ex)
{
@ -244,6 +283,26 @@ namespace MasaBlazorApp3.DataAccess.Impl
}
}
//查询要删除的药品是否有绑定且库存大于0
public async Task<bool> CheckPlanDetailBind(PlanDetails planDetail)
{
try
{
bool bFlag = true;
List<string> idList =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planDetail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync();
if (idList != null && idList.Count > 0)
{
bFlag = !(_connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == planDetail.DrugId).Any(cs => cs.Quantity > 0));
}
return bFlag;
}
catch (Exception ex)
{
logger.Error($"查询要删除的药品是否有绑定异常{ex.Message}");
return true;
}
}
/// <summary>
/// 删除套餐中的药品
/// </summary>
@ -253,9 +312,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
{
try
{
_connection.BeginTransaction();
logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}");
return _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p=>p.UseState,0).Update() > 0;
int iDelResult = 1;
//删除该套餐下该药品对应绑定的库位
List<string> idList = await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == detail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync();
if (idList != null && idList.Count > 0)
{
iDelResult= await _connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == detail.DrugId).DeleteAsync();
}
if (iDelResult > 0)
{
bool bUpdateResult= _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p => p.UseState, 0).Update() > 0;
if(bUpdateResult)
{
_connection.CommitTransaction();
return true;
}
else
{
_connection.RollbackTransaction();
return false;
}
}
else
{
return false;
}
}
catch (Exception ex)
{

View File

@ -1,5 +1,6 @@
using Google.Protobuf.WellKnownTypes;
using LinqToDB;
using log4net;
using MasaBlazorApp3.DataAccess.Dao;
using MasaBlazorApp3.Pojo;
using MasaBlazorApp3.Pojo.Config;
@ -17,6 +18,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
private readonly AppDataConnection _connection;
private readonly SettingConfig _setting;
private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
//public UserDao(MyContext context)
//{
@ -115,5 +117,50 @@ namespace MasaBlazorApp3.DataAccess.Impl
.Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
return statement.Update() > 0;
}
//查询当前值班信息
public HkcChangeShifts GetOnDuty()
{
try
{
return _connection.HkcChangeShifts.Where(cs => cs.MachineId == _setting.machineId && cs.State == "0").FirstOrDefault();
}
catch (Exception ex)
{
logger.Info($"查询当前值班信息异常{ex.Message}");
return null;
}
}
//保存交接班信息
public async Task<bool> UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew)
{
try
{
_connection.BeginTransaction();
var insertResult = _connection.InsertWithInt32Identity(changeShiftNew);
int updateResult = _connection.HkcChangeShifts
.Where(cs => cs.Id == changeShift.Id)
.Set(cs => cs.State, "1")
.Set(cs => cs.ToDate, DateTime.Now)
.Set(cs=>cs.ToOperator,changeShift.ToOperator).Update();
if (insertResult <= 0 || updateResult <= 0)
{
_connection.RollbackTransaction();
return false;
}
else
{
_connection.CommitTransaction();
return true;
}
}
catch (Exception ex)
{
logger.Error($"更新交接班信息异常: {ex.Message}");
return false;
}
}
}
}

View File

@ -6,6 +6,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<ApplicationIcon>favicon.ico</ApplicationIcon>
<Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<ItemGroup>

View File

@ -43,12 +43,12 @@
<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"
SelectionMode="DataGridSelectionMode.Single" LoadData="@LoadData" IsLoading="@isLoading"
Count="@count" AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"
ExpandMode="DataGridExpandMode.Multiple">
<Template Context="cs">
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
@ -95,9 +95,13 @@
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
var result = await channelStockDao.GetBoxWaitInfo(10, 0);
var result = await channelStockDao.GetBoxWaitInfo(args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
isLoading = false;
@ -112,7 +116,6 @@
// await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
}
}
void RowRender(RowRenderEventArgs<ChannelList> args)
{
args.Expandable = args.Data.ChannelStocks.Count > 0;
@ -121,7 +124,7 @@
async void OnRowSelect(ChannelList cl)
{
var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
$"{cl.DrawerNo}号药箱药",
$"{cl.DrawerNo}号药箱药品入库",
new Dictionary<string, object>() { { "boxChannelList", cl } },
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
);

View File

@ -8,51 +8,20 @@
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
<RadzenStack>
@if (CanTakeDrug)
{
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
<RadzenDataGrid Data="@boxChannelList.ChannelStocks" AllowAlternatingRows="true"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<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="数量" />
<RadzenDataGridColumn Property="ChannelStocks.Drug.DrugName" Title="药品" />
<RadzenDataGridColumn Property="ChannelStocks.Drug.DrugSpec" Title="规格" />
<RadzenDataGridColumn Property="AddToQuantity" 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="@Finish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="保存" Style="width: 120px" />
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
}
</RadzenStack>
</RadzenStack>
@ -64,10 +33,10 @@
@inject PortUtil PortUtil;
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
int status;
// int status;
bool isLoading;
int count;
[Parameter] public ChannelList boxChannelList { get; set; }
private bool CanTakeDrug = true;
public List<BoxTakeVo> data { get; set; }
//称重取药数量
@ -78,225 +47,212 @@
protected override async Task OnInitializedAsync()
{
data = await channelListDao.getTakeInfoByBox(boxChannelList);
// 如果有【stockQuantity】字段说明有药品库存不足
if (data.Any(it => it.ChannelStock == null))
{
CanTakeDrug = false;
}
base.OnInitializedAsync();
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
async Task OpenDrawer()
{
this.status = 1;
// 解析需要打开的抽屉列表
List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip);
// Update the Data property
isLoading = false;
}
// 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>();
// // 根据抽屉类型来决定打开前是否需要查询数量
// 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 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);
// 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);
}
// 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)
{
// //是药盒抽屉开药盒
// 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;
// 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.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]}】";
// 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);
}
// }
// 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
}
}
// 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();
}
});
}
// }
// 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()
async Task Finish()
{
// 保存账册、操作记录
var b = await channelListDao.BoxTakeFinish(data);
var b = await channelListDao.BoxAddBoxFinish(boxChannelList);
if (!b)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
@ -310,8 +266,6 @@
dialogService.Close(true);
}
//重置状态
this.RestData();
}

View File

@ -307,7 +307,7 @@
{
// 保存账册、操作记录
var b = await channelListDao.BoxTakeFinish(data);
var b = await channelListDao.BoxTakeFinish(data, boxChannelList);
if (!b)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });

View File

@ -42,13 +42,13 @@
<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">
ExpandMode="DataGridExpandMode.Multiple" LoadData="@LoadData" IsLoading="@isLoading" Count="@count"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Template Context="cs">
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
<Columns>
@ -94,14 +94,17 @@
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
var result = await channelStockDao.GetAllBoxAddDrug(10, 0);
var result = await channelStockDao.GetAllBoxAddDrug(args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
isLoading = false;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
base.OnAfterRender(firstRender);

View File

@ -0,0 +1,131 @@
@page "/Box/BoxRemove"
@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 Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">药名:</RadzenText>
<RadzenText Class="rz-text-truncate"><b>@(channelStock.Drug.DrugName)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">规格:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Drug.DrugSpec)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">批次:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.ManuNo)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">效期:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.EffDate)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">库存:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Quantity)</b></RadzenText>
</RadzenStack>
</RadzenStack>
<RadzenStack style="align-content:center">
<RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border);align-content:center" Orientation="Orientation.Horizontal" Gap="1rem">
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">移入药箱:</RadzenText>
<RadzenDropDown @bind-Value="SelectedDrawerNo" Data="@DrawerNos" Style="display: block;" Name="DropDownChangeEvent">
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@(SelectedDrawerNo)</RadzenText>
</RadzenDropDown>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">移入数量:</RadzenText>
<RadzenNumeric Min="0" Style="display: block" Max=@channelStock.Quantity Name="Quantity" @bind-Value="removeQuantity" />
</RadzenStack>
</RadzenStack>
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
<RadzenButton Click="@Save" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
</RadzenStack>
</RadzenStack>
@code {
@inject Radzen.DialogService dialogService;
@inject IChannelListDao channelListDao;
@inject IOptions<SettingConfig> setting;
@inject NotificationService _message
@inject PortUtil PortUtil;
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
int removeQuantity;
int status;
int[] DrawerNos;
int SelectedDrawerNo = 0;
[Parameter] public ChannelStock channelStock { 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()
{
DrawerNos = await channelListDao.GetDrawerNumForRemove(channelStock);
if (DrawerNos != null && DrawerNos.Count() > 0)
{
SelectedDrawerNo = DrawerNos[0];
// var result = await channelListDao.GetChannelStockByDrug(channelStock, SelectedDrawerNo, 8, 0);
// selectedDrawerData = result.Desserts;
}
base.OnInitializedAsync();
}
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 Save()
{
if (removeQuantity<=0)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入移入数量", Duration = 4000 });
return;
}
if (SelectedDrawerNo<=0)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药箱", Duration = 4000 });
return;
}
var b = await channelListDao.BoxRemoveFinish(channelStock, SelectedDrawerNo,removeQuantity);
if (!b)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
logger.Error($"药箱移出保存数据失败,数据{JsonConvert.SerializeObject(channelStock)}");
}
else
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交换完成", Duration = 4000 });
// 关闭弹窗
dialogService.Close(true);
}
//重置状态
this.RestData();
}
}

View File

@ -0,0 +1,169 @@
@page "/Box/BoxReplace"
@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 Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">药名:</RadzenText>
<RadzenText Class="rz-text-truncate"><b>@(channelStock.Drug.DrugName)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">规格:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Drug.DrugSpec)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">批次:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.ManuNo)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">效期:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.EffDate)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">库存:</RadzenText>
<RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Quantity)</b></RadzenText>
<RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">交换药箱:</RadzenText>
<RadzenDropDown @bind-Value="SelectedDrawerNo" Data="@DrawerNos" Style="display: block;" Change="@(args => SelectedDrawerChange(args))" Name="DropDownChangeEvent">
<RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@(SelectedDrawerNo)</RadzenText>
</RadzenDropDown>
</RadzenStack>
<RadzenDataGrid @ref="grid" Data="@selectedDrawerData" AllowAlternatingRows="true" LoadData="@LoadData" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
CellClick="@((DataGridCellMouseEventArgs<ChannelStock> args) => OnCellClick(args))"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Columns>
<RadzenDataGridColumn Property="DrawerNo" Title="药箱号">
</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="库存" />
<RadzenDataGridColumn MinWidth="100px" Title="交换数量" Property="AddQuantity">
<EditTemplate Context="cs">
<RadzenNumeric Min="0" Style="display: block" Max=@cs.Quantity Name="Quantity" @bind-Value=@cs.AddQuantity />
<RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的交换数量" Component="Quantity" Popup="true" />
</EditTemplate>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</RadzenStack>
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
<RadzenButton Click="@Save" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="保存" Style="width: 120px" />
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
</RadzenStack>
</RadzenStack>
@code {
@inject Radzen.DialogService dialogService;
@inject IChannelListDao channelListDao;
@inject IOptions<SettingConfig> setting;
@inject NotificationService _message
@inject PortUtil PortUtil;
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
int status;
bool isLoading;
int count;
int[] DrawerNos;
int SelectedDrawerNo=0;
[Parameter] public ChannelStock channelStock { get; set; }
private bool CanTakeDrug = true;
// public List<BoxTakeVo> data { get; set; }
public List<ChannelStock> selectedDrawerData{ 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()
{
DrawerNos = await channelListDao.GetDrawerNum(channelStock);
base.OnInitializedAsync();
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
if (DrawerNos != null && DrawerNos.Count() > 0)
{
SelectedDrawerNo = DrawerNos[0];
var result = await channelListDao.GetChannelStockByDrug(channelStock, SelectedDrawerNo, args.Top, args.Skip);
selectedDrawerData = result.Desserts;
count = result.TotalDesserts;
}
isLoading = false;
}
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 Save()
{
if (selectedDrawerData!=null&&selectedDrawerData.Any(cl => cl.AddQuantity != 0 && cl.DrugId != null && cl.ManuNo != null))
{
if (selectedDrawerData.Where(cs => cs.AddQuantity != 0).Sum(cs => cs.Quantity) > channelStock.Quantity)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = "提示", Detail = $"交换总数量不能大于库存", Duration = 4000 });
return;
}
var b = await channelListDao.BoxReplaceFinish(channelStock,selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList());
if (!b)
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
logger.Error($"药箱药品替换保存数据库失败,数据{JsonConvert.SerializeObject(selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList())}");
}
else
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交换完成", Duration = 4000 });
// 关闭弹窗
dialogService.Close(true);
}
//重置状态
this.RestData();
}
else
{
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = "提示", Detail = $"无可交换数据或未输入交换数量", Duration = 4000 });
return;
}
}
async Task SelectedDrawerChange(object drawerNo)
{
var result = await channelListDao.GetChannelStockByDrug(channelStock, Convert.ToInt32(drawerNo), 8, 0);
selectedDrawerData = result.Desserts;
}
int currentCol = 0;
RadzenDataGrid<ChannelStock> grid;
void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
{
currentCol = args.Data.ColNo;
grid.EditRow(args.Data);
}
}

View File

@ -0,0 +1,239 @@
@page "/Box/BoxStock"
@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">
@* <RadzenFieldset Text="">
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
<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> *@
@* <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> *@
<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="pd">
<RadzenCard Variant="Variant.Outlined" class="rz-p-0" Style="width: 100%; overflow: hidden;">
<RadzenRow Gap="0">
<RadzenColumn Size="12" SizeLG="2" class="rz-p-4 product-title">
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.DrugName)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="3" class="rz-p-4 product-title">
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.Manufactory)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="2" class="rz-p-4 product-title">
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.DrugSpec)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="1" class="rz-p-4 product-title">
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd.BaseQuantity)</RadzenText>
</RadzenColumn>
@* <RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
<RadzenButton Text="替换药品" Style="width: 100%" Click="@(() => replaceClick(pd))" />
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
<RadzenButton Text="移出药品" Style="width: 100%" Click="@(()=>removeClick(pd))" />
</RadzenColumn> *@
@if (pd.channelStocks != null && pd.channelStocks.Count > 0)
{
for (int i = 0; i < pd.channelStocks.Count; i++)
{
var manuInfo = pd.channelStocks[i];
var manuNo = 1;
if (i == 0)
{
manuNo = 0;
}
<RadzenColumn Size="12" SizeLG="7" class="rz-p-4">
@if (manuInfo != null && manuInfo.ManuNo != null)
{
<RadzenRow Gap="0">
<RadzenColumn Size="12" SizeMD="6" SizeLG="2">
@if (manuNo == 0)
{
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">批次</RadzenText>
}
<RadzenText TextStyle="TextStyle.Body2">@(manuInfo.ManuNo)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeMD="6" SizeLG="2">
@if (manuNo == 0)
{
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">效期</RadzenText>
}
<RadzenText TextStyle="TextStyle.Body2">@(manuInfo.EffDate)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeMD="6" SizeLG="2">
@if (manuNo == 0)
{
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">库存</RadzenText>
}
<RadzenText TextStyle="TextStyle.Body2">@(manuInfo.Quantity)</RadzenText>
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
<RadzenButton Text="替换药品" Style="width: 100%" Click="@(() => replaceClick(manuInfo))" />
</RadzenColumn>
<RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
<RadzenButton Text="移出药品" Style="width: 100%" Click="@(() => removeClick(manuInfo))" />
</RadzenColumn>
</RadzenRow>
}
else
{
<RadzenRow Gap="0">
<RadzenColumn Size="12" SizeMD="6" SizeLG="2">
<RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">未绑定批次</RadzenText>
</RadzenColumn>
</RadzenRow>
}
</RadzenColumn>
}
}
</RadzenRow>
</RadzenCard>
</Template>
</RadzenDataList>
</div>
</RadzenStack>
@code {
@inject IOrderInfoDao orderInfoDao;
@inject IChannelListDao channelListDao;
@inject DialogService dialogService;
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
@inject NotificationService _message
private IEnumerable<PlanDetails>? _forecasts;
bool allowRowSelectOnRowClick = true;
// IEnumerable<DrugManuNo> drugManuNos;
// IList<DrugManuNo> selectedDrugManuNos;
RadzenDataList<PlanDetails> grid;
// RadzenDataGrid<DrugManuNo> gridManuNo;
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 channelListDao.GetBoxDrugInfo(drawerNo, args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
// Update the count
count = result.TotalDesserts;
isLoading = false;
DrawerNos = await orderInfoDao.GetDrawerNum(setting.Value.boxMachineId);
}
//替换按钮
async Task replaceClick(ChannelStock cs)
{
if (cs.Quantity > 0)
{
var b = await dialogService.OpenAsync<BoxReplace>(
$"{cs.DrawerNo}号药箱替换药品详情",
new Dictionary<string, object>() { { "channelStock", cs } },
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
);
if (b)
{
await reloadGrid();
}
}
else
{
//库存为0无法操作
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"库存为0无法替换", Duration = 4000 }
);
}
}
//移除按钮
async Task removeClick(ChannelStock cs)
{
if (cs.Quantity > 0)
{
var b = await dialogService.OpenAsync<BoxRemoveDialog>(
$"{cs.DrawerNo}号药箱替换药品详情",
new Dictionary<string, object>() { { "channelStock", cs } },
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
);
if (b)
{
await reloadGrid();
}
}
else
{
//库存为0无法操作
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"库存为0没有要移出的药品", Duration = 4000 }
);
}
}
}

View File

@ -1,114 +1,330 @@
@page "/setting/Change"
@page "/0"
@using MasaBlazorApp3.Pojo.Config;
@using MasaBlazorApp3.Pojo.Vo;
@using MasaBlazorApp3.Util;
@using Microsoft.Extensions.Options;
@using Newtonsoft.Json;
@using log4net;
<style>
.rz-dialog-content {
padding: 0 !important;
}
</style>
<div class="container-fluid">
<div class="row">
<div class="col-12 mb-4">
<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
<RadzenColumn Size="12" SizeMD="5">
<RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
@if (userI == 1)
{
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
请交班操作人 @FromOperator?.NickName
<p>登录验证</p>
</RadzenText>
}
else if (userI == 2)
{
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
请交班复核人 @FromRviewer?.NickName
<p>登录验证</p>
</RadzenText>
}
else
@if (userI == 3)
{
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
请接班操作人 @ToOperator?.NickName
<p>登录验证</p>
</RadzenText>
}
else if (userI == 4)
{
<RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
请接班复核人 @ToReviewer?.NickName
<p>登录验证</p>
</RadzenText>
}
</RadzenCard>
</RadzenColumn>
<RadzenColumn Size="12" SizeMD="7">
<RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
<RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
登录
</RadzenText>
<RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
<div class="rz-form-row">
<label class="rz-label" for="username">账号</label>
<div class="rz-form-input-wrapper">
<!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
<RadzenTextBox id="username" Name="Username" @bind-Value="@loginModel.Username" Style="width:100%" />
<RadzenRequiredValidator Component="Username" Text="请填写用户名" />
</div>
</div>
<div class="rz-form-row">
<label class="rz-label" for="password">密码</label>
<div class="rz-form-input-wrapper">
<RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
<RadzenRequiredValidator Component="Password" Text="请填写密码" />
</div>
</div>
<div class="rz-form-row">
<label class="rz-label"></label>
<div class="rz-form-input-wrapper rz-login-buttons">
<RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="登录" />
<RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
<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" />
</div>
</div>
</RadzenTemplateForm>
</RadzenCard>
</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 Radzen.DialogService dialogService;
@inject NavigationManager navigate;
RadzenDataGrid<HkcChangeShifts> grid;
bool isLoading;
int count;
private IEnumerable<HkcChangeShifts>? _forecasts;
DateTime start;
DateTime end;
@inject FingerprintUtil FingerprintUtil;
@inject PortUtil PortUtil;
@inject NavigationManager na;
@inject NotificationService _message
@inject GlobalStateService globalStateService;
@inject IUserDao userDao;
@inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
[Parameter] public string type { get; set; }
protected override void OnParametersSet()
private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
private int loginMode = 1;
private bool opFirst = true;
[Parameter] public int userI { get; set; }
Pojo.User FromOperator = new Pojo.User();
Pojo.User FromRviewer = new Pojo.User();
Pojo.User ToOperator = new Pojo.User();
Pojo.User ToReviewer = new Pojo.User();
HkcChangeShifts hkcChange = new HkcChangeShifts();
bool isShow;
private Pojo.User loginModel = new();
protected override Task OnInitializedAsync()
{
if (grid != null)
{
reloadGrid();
}
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx;
var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
// Update the count
count = result.TotalDesserts;
loginMode = setting.Value.loginMode;
opFirst = setting.Value.opFirst;
isLoading = false;
//查询当前值班信息
hkcChange = userDao.GetOnDuty();
if (hkcChange != null && !string.IsNullOrEmpty(hkcChange.FromOperator))
{
FromOperator = userDao.GetByUsername(hkcChange.FromOperator);
}
if (hkcChange != null && string.IsNullOrEmpty(hkcChange.FromRviewer))
{
FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer);
}
return base.OnInitializedAsync();
}
async Task reloadGrid()
private async Task SetUser(Pojo.User user)
{
start = DateTime.MinValue;
end = DateTime.MinValue;
await grid.Reload();
if (userI == 1)
{
if(FromOperator.Id != user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班操作人有误,请核查当前值班人", Duration = 3000 }
);
return;
}
//交班人操作人登录
if (FromRviewer != null)
{
userI = 2;
}
else
{
userI = 3;
}
}
else if (userI == 2)
{
if (FromOperator != null && FromOperator.Id == user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
else
{
if(FromRviewer.Id!=user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班审核人有误,请核查当前值班人", Duration = 3000 }
);
return;
}
FromRviewer = user;
userI = 3;
}
}
else if (userI == 3)
{
if (loginMode == 2)
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
userI = 4;
ToOperator = user;
}
else
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
else
{
ToOperator = user;
//保存交接班信息
HkcChangeShifts hkcChangeNew = new HkcChangeShifts
{
FromOperator = ToOperator.Username,
optDate = DateTime.Now,
ToDate = DateTime.Now,
State = "0", //状态为1表示交接班完成
MachineId = hkcChange.MachineId
};
hkcChange.ToOperator = ToOperator.Username;
bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
if (bResult)
{
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToOperator?.NickName}");
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
);
dialogService.Close(true);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
);
}
}
}
}
else if (userI == 4)
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id) || (ToOperator != null && ToOperator.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
ToReviewer = user;
hkcChange.ToReviewer = ToReviewer?.Username;
//保存交接班信息
HkcChangeShifts hkcChangeNew = new HkcChangeShifts
{
FromOperator = ToOperator.Username,
FromRviewer = ToReviewer?.Username,
optDate = DateTime.Now,
State = "0", //状态为1表示交接班完成
MachineId = hkcChange.MachineId
};
bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
if (bResult)
{
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToReviewer?.NickName}");
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
);
dialogService.Close(true);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
);
}
}
}
private void Submit(Pojo.User user)
{
Pojo.User u = userDao.GetByUsername(loginModel.Username);
if (u != null)
{
if (Util.MD5.GetMD5Hash(loginModel.Password).ToLower().Equals(u.Password))
{
SetUser(u);
loginModel.Username = "";
loginModel.Password = "";
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"密码错误", Duration = 4000 }
);
logger.Info($"用户【{u.NickName}】密码输入错误");
}
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 }
);
logger.Info($"没有用户:【{loginModel.Username}】");
}
}
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
{
Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber));
if (u != null)
{
SetUser(u);
InvokeAsync(StateHasChanged);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 }
);
logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户");
}
}
private void Exit()
{
dialogService.Close(false);
}
}

View File

@ -0,0 +1,123 @@
@page "/stock/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">
<Template Context="state">
@if(state.State=="0")
{
<RadzenText>值班中</RadzenText>
}
else
{
<RadzenText>已交班</RadzenText>
}
</Template>
</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();
}
}

View File

@ -63,9 +63,33 @@
<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" />
<RadzenDataGridColumn Property="Detail.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem">
<Template Context="DetailList">
@for (int i = 0; i < DetailList.DetailList.Count; i++)
{
OrderDetail orderDetail = DetailList.DetailList[i];
<RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.Drug.DrugName</RadzenText>
}
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem">
<Template Context="DetailList">
@for (int i = 0; i < DetailList.DetailList.Count; i++)
{
OrderDetail orderDetail = DetailList.DetailList[i];
<RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.SetManuNo</RadzenText>
}
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem">
<Template Context="DetailList">
@for (int i = 0; i < DetailList.DetailList.Count; i++)
{
OrderDetail orderDetail = DetailList.DetailList[i];
<RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.Quantity</RadzenText>
}
</Template>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</div>

View File

@ -36,16 +36,31 @@
.rz-gauge .rz-tick-text {
fill: #ffffff !important;
}
<style >
.icon-preview div {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
width: 120px;
}
.icon-preview span {
color: white;
font-size: 0.75rem;
}
</style>
</style>
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
<RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
<RadzenColumn Size="4">
<RadzenColumn Size="2">
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
<RadzenColumn Size="3">
<RadzenColumn Size="2">
@if (globalStateService.Operator != null)
{
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
@ -58,11 +73,20 @@
<RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
}
</RadzenColumn>
<RadzenColumn Size="3">
<RadzenColumn Size="3" Orientation="Orientation.Horizontal" Wrap="FlexWrap.Wrap" class="icon-preview rz-p-12">
<div>
<RadzenIcon Icon="compare_arrows" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { changeShifts(); })" />
<span>交接班</span>
</div>
</RadzenColumn>
<RadzenColumn Size="2">
<RadzenIcon Icon="exit_to_app" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { logout(); })" />
</RadzenColumn>
</RadzenRow>
</RadzenColumn>
<RadzenColumn Size="2">
</RadzenColumn>
</RadzenRow>
<RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
@ -80,7 +104,8 @@
}
}
</RadzenStack>
<RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 50%">
<RadzenStack Orientation="Orientation.Horizontal" Style="height: 50%;width:100%">
<RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 100%;width:50%">
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
@if (globalStateService.Operator != null)
{
@ -92,6 +117,19 @@
}
}
</RadzenStack>
<RadzenStack class="home-menu rz-background-color-danger-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(6))" Style="height: 100%;width:50%">
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">药箱管理</RadzenText>
@if (globalStateService.Operator != null)
{
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 60 > 0 && id - 60 < 10))
{
<div class="mask">
<RadzenImage Path="images/no_auth.png" />
</div>
}
}
</RadzenStack>
</RadzenStack>
</RadzenStack>
<RadzenStack Style="height: 100%;width:59%" Gap="20">
<RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
@ -296,4 +334,15 @@
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
}
//交接班
async void changeShifts()
{
//修改复核人
await dialogService.OpenAsync<ChangeShifts>(
"",
new Dictionary<string, object>() { { "userI", 1 } },
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
}
}

View File

@ -3,6 +3,7 @@
@page "/return/record1/{type}"
@page "/return/record2/{type}"
@page "/stock/record/{type}"
@using MasaBlazorApp3.Report
<div class="container-fluid">
@ -35,6 +36,10 @@
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
</RadzenColumn>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
@ -111,7 +116,18 @@
await grid.Reload();
}
//库存导出
void StockExport()
{
}
//专用账册导出
void AccountBookExport()
{
// string drugId = drugName != null ? drugName.Split('/').Last().Trim():"";
// GridReportUtil gridReportUtil = new GridReportUtil();
GridReportUtil.PrintReport("stock_template.grf", null);
}

View File

@ -136,6 +136,7 @@
@inject IPlanDao planDao;
@inject DialogService dialogService;
@inject NotificationService _message
@inject GlobalStateService globalStateService;
RadzenDataGrid<Plan> grid;
RadzenDataGrid<PlanDetails> PlanDetailsGrid;
@ -218,6 +219,23 @@
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
if (b)
{
//查询要删除的套餐下是否有绑定,且绑定有库存
if (!(await planDao.CheckPlanBind(planInfo.Id)))
{
_message.Notify
(
new NotificationMessage
{
Severity = NotificationSeverity.Error,
Summary = "提示",
Detail = $"该套餐还有库存绑定且有库存,请先清库存",
Duration = 4000
}
);
return;
}
// 数据库删除
if (await planDao.DeletePlanInfo(planInfo.Id))
{
@ -306,7 +324,19 @@
);
if (b)
{
SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
//查询要删除的药品是否有绑定且库存大于0
if (!(await planDao.CheckPlanDetailBind(planDetail)))
{
_message.Notify(new NotificationMessage
{
Severity = NotificationSeverity.Error,
Summary = "提示",
Detail = "该药品有绑定且库存不为0请先清库存",
Duration = 4000
});
return;
}
// 数据库删除
if (await planDao.DeletePlanDetail(planDetail))
{
@ -318,6 +348,7 @@
Duration = 4000
}
);
SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
}
else
{
@ -377,6 +408,9 @@
{
planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId;
planDetail.UseState = 1;
planDetail.OperatorUser = globalStateService.Operator?.Username;
planDetail.ReviewerUser = globalStateService.Reviewer?.Username;
if (await planDao.AddPlanDetail(planDetail))
{
_message.Notify(new NotificationMessage

View File

@ -162,7 +162,11 @@
<RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
<Columns>
<RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" Sortable="false" />
<RadzenDropDownDataGridColumn Property="EffDate" Title="效期" Sortable="false" />
<RadzenDropDownDataGridColumn Property="EffDate" Title="效期" Sortable="false">
<Template Context="data">
@data.EffDate.ToString("yyyy-MM-dd")
</Template>
</RadzenDropDownDataGridColumn>
</Columns>
</RadzenDropDownDataGrid>
}

View File

@ -1,15 +1,37 @@
@page "/stock/list"
@using MasaBlazorApp3.Report
<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; }
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;
/* 你可以根据需要调整动画的持续时间和迭代次数 */
@ -17,8 +39,52 @@
}
</style>
<div class="col-12 mb-4">
<div class="container-fluid">
<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="6">
<RadzenLabel Text="药品名称/拼音码/编码" Component="drug" />
</RadzenColumn>
<RadzenColumn Size="6">
<RadzenAutoComplete Name="drug" Multiline="true" @bind-Value=@drugName Data=@drugInfo TextProperty="@nameof(DrugInfo.DrugNameSpecManufactory)"
Style="width: 100%;" InputAttributes="@(new Dictionary<string, object>() { { "aria-label", "drugInfo" } })" />
</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>
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
</div>
<div class="col-12 mb-4">
<RadzenDataGrid @ref="grid"
IsLoading="@isLoading"
@ -28,12 +94,12 @@
AllowColumnResize="true" AllowAlternatingRows="false"
SelectionMode="DataGridSelectionMode.Single"
ExpandMode="DataGridExpandMode.Multiple">
<HeaderTemplate>
@* <HeaderTemplate>
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
</RadzenRow>
</HeaderTemplate>
</HeaderTemplate> *@
<Template Context="di">
<RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
<Columns>
@ -52,7 +118,9 @@
bool success = DateTime.TryParse(s.EffDate, out dateTime);
if (success && dateTime <= DateTime.Now.AddMonths(3))
{
@s.EffDate<p class="shaky-text">近效期药品!</p>
@s.EffDate
<p class="shaky-text">近效期药品!</p>
}
else
{
@ -71,7 +139,9 @@
<Template Context="s">
@if (s.StockQuantity < 10)
{
@s.StockQuantity<p class="shaky-text">库存预警!</p>
@s.StockQuantity
<p class="shaky-text">库存预警!</p>
}
else
{
@ -94,7 +164,9 @@
DateTime start;
DateTime end;
string drugName;
IEnumerable<DrugInfo> drugInfo;
protected override async Task OnInitializedAsync()
{
@ -104,6 +176,9 @@
var result = await drugInfoDao.GetAllDrugAndStock();
// Update the Data property
_forecasts = result;
drugInfo = await drugInfoDao.GetAllDrug();
isLoading = false;
}
@ -123,17 +198,26 @@
}
async void StockExport()
//库存导出
void StockExport()
{
}
async void AccountBookExport()
//专用账册导出
void AccountBookExport()
{
// string drugId = drugName != null ? drugName.Split('/').Last().Trim():"";
// GridReportUtil gridReportUtil = new GridReportUtil();
GridReportUtil.PrintReport("stock_template.grf", null);
}
//重置
async Task reloadGrid()
{
start = DateTime.MinValue;
end = DateTime.MinValue;
drugName = string.Empty;
await grid.Reload();
}
}

View File

@ -50,5 +50,7 @@ namespace MasaBlazorApp3.Pojo
//手术室药箱中的库存总数
[Column("stock_quantity")]
public int TotalQuantity { get; set; }
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(PlanDetails.PlanId))]
public List<PlanDetails> _PlanDetails { get; set; } = new();
}
}

View File

@ -30,6 +30,13 @@ namespace MasaBlazorApp3.Pojo
[Column("pack_unit")]
public string PackUnit { get; set; }
[Column("py_code")]
public string PyCode { get; set; }
[Column(IsColumn =false)]
public string DrugNameSpecManufactory
{
get => DrugName + " / " + DrugSpec+ " / " + Manufactory+" / " + PyCode+" / " + DrugId;
}
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(ChannelStock.DrugId))]

View File

@ -13,20 +13,28 @@ namespace MasaBlazorApp3.Pojo
{
[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; }
//当班状态0当前值班1已交班
[Column("State")]
public string State { get; set; }
//操作状态0新增1修改
[Column("optState")]
public string optState { get; set; }
[Column("machine_id")]

View File

@ -72,7 +72,7 @@ namespace MasaBlazorApp3.Pojo
[Column("eff_date")]
public DateTime? EffDate { get; set; }
/// <summary>
/// 出库入库类型(1入库2出库31还药32还空瓶)
/// 出库入库类型(1入库2出库31还药32还空瓶,21药箱移出移入69药箱药品替换55药箱套餐绑定解绑)
///</summary>
[Column("type")]
public int Type { get; set; }

View File

@ -147,15 +147,15 @@ namespace MasaBlazorApp3.Pojo
///</summary>
[Column("win_no")]
public int WinNo { get; set; } = 0;
/// <summary>
///
/// 默认值: 0
///</summary>
[Column("state")]
public int state { get; set; } = 0;
///// <summary>
/////
///// 默认值: 0
/////</summary>
//[Column("state")]
//public int state { get; set; } = 0;
[Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
public OrderDetail Detail { get; set; } = new();
public List<OrderDetail> DetailList { get; set; } = new();
/// <summary>
/// 是否选中

View File

@ -23,7 +23,7 @@ namespace MasaBlazorApp3.Pojo
[Column("Drug_Id")]
public string DrugId { get; set; }
[Association(ThisKey = nameof(Id), OtherKey = nameof(PlanDetails.DrugId))]
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
public DrugInfo _DrugInfo { get; set; } = new();
//添加时间
[Column("AddTime")]
@ -33,9 +33,13 @@ namespace MasaBlazorApp3.Pojo
public int UseState { get; set; }
//操作人
[Column("operatorUser")]
public int OperatorUser { get; set; }
public string OperatorUser { get; set; }
//审核人
[Column("reviewerUser")]
public int ReviewerUser { get; set; }
public string ReviewerUser { get; set; }
public List<ChannelStock> channelStocks { get; set; } = new List<ChannelStock>();
public DrugManuNo _ManuNo { get; set; }
}
}

View File

@ -177,6 +177,12 @@ namespace MasaBlazorApp3.Pojo
PremissionName = "药品标定",
PremissionPath = "/stock/biaoDing"
});
k.AddChild(new Premission()
{
Id = 47,
PremissionName = "交接班列表",
PremissionPath = "/stock/Change"
});
Premission x = new Premission
{
Id = 5,
@ -216,40 +222,93 @@ namespace MasaBlazorApp3.Pojo
PremissionPath = "/manage/setting/Fridge"
});
x.AddChild(new Premission()
//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"
//});
//x.AddChild(new Premission()
//{
// Id = 59,
// PremissionName = "药箱库存",
// PremissionPath = "/Box/BoxStock"
//});
Premission b = new Premission
{
Id = 54,
Id = 6,
PremissionName = "药箱管理",
PremissionPath = "Box"
};
b.AddChild(new Premission()
{
Id = 61,
PremissionName = "套餐管理",
PremissionPath = "/Box/Plan"
});
x.AddChild(new Premission()
b.AddChild(new Premission()
{
Id = 55,
Id = 62,
PremissionName = "绑定药箱",
PremissionPath = "/Box/BoxBindings"
});
x.AddChild(new Premission()
b.AddChild(new Premission()
{
Id = 56,
Id = 63,
PremissionName = "药箱核对",
//PremissionName = "盘点交接",
PremissionPath = "/Box/Check"
});
x.AddChild(new Premission()
b.AddChild(new Premission()
{
Id = 57,
Id = 66,
PremissionName = "药箱加药",
//PremissionPath = "/stock/checkRecord"
PremissionPath = "/Box/BoxAdd"
});
x.AddChild(new Premission()
b.AddChild(new Premission()
{
Id = 58,
Id = 65,
PremissionName = "药箱入库",
PremissionPath = "/Box/BoxAddBox"
});
b.AddChild(new Premission()
{
Id = 66,
PremissionName = "药箱库存",
PremissionPath = "/Box/BoxStock"
});
list.Add(q);
list.Add(j);
list.Add(h);
list.Add(k);
list.Add(b);
x.AddChild(set);
list.Add(x);

View File

@ -72,6 +72,10 @@ internal class Program
//药品批次
appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
//交接班记录
appBuilder.Services.AddScoped<IHkcChangeShiftsDao, HkcChangeShiftsDao>();
//GlobalStateService.connStr = config.GetValue<String>("connectionStrings");
var app = appBuilder.Build();
app.MainWindow
.SetHeight(768)

View File

@ -1,5 +1,5 @@
{
"Version":"6.8.5.2",
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
@ -17,8 +17,6 @@
"CenterView":true,
"AppendBlankRow":true,
"Recordset":{
"ConnectionString":"MYSQL;\r\nDatabase=hkcdb;\r\nPassword=qq1223;\r\nPort=3307;\r\nServer=127.0.0.1;\r\nUser=root;",
"QuerySQL":"SELECT \r\n mr.`stock_quantity` AS `stockQuantity`,\r\n IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, 0)) AS `inQuantity`,\r\n IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), 0)) AS `outQuantity`,\r\n mr.`operation_time` AS `operationTime`,\r\n mr.`invoice_id` AS `invoiceId`,\r\n di.`drug_name` AS `drugName`,\r\n di.`drug_id` AS `drugId`,\r\n di.`drug_spec` AS `drugSpec`,\r\n di.`pack_unit` AS `packUnit`,\r\n di.`dosage` AS `dosage`,\r\n di.`manufactory` AS `manufactory`,\r\n mr.`manu_no` AS `manuNo`,\r\n mr.`eff_date` AS `effDate`,\r\n u1.`user_name` AS `operatorName`,\r\n u2.`user_name` AS `reviewerName`\r\nFROM\r\n dm_machine_record mr \r\n LEFT JOIN drug_info di ON mr.`drug_id` = di.`drug_id` \r\n LEFT JOIN user_list u1 ON mr.`operator` = u1.`id`\r\n LEFT JOIN user_list u2 ON mr.`reviewer` = u2.`id`\r\n ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`",
"Field":[
{
"Name":"日期",
@ -34,11 +32,6 @@
"Name":"批号",
"DBFieldName":"manuNo"
},
{
"Name":"上次批次结存",
"Type":"Integer",
"DBFieldName":"beforeManuQuan"
},
{
"Name":"入库数量",
"Type":"Integer",
@ -49,11 +42,6 @@
"Type":"Integer",
"DBFieldName":"outQuantity"
},
{
"Name":"批号结存",
"Type":"Integer",
"DBFieldName":"manuQuantity"
},
{
"Name":"总结存",
"Type":"Integer",
@ -65,7 +53,7 @@
},
{
"Name":"复核人",
"DBFieldName":"reviewName"
"DBFieldName":"reviewerName"
},
{
"Name":"药品名称",
@ -94,15 +82,12 @@
"DBFieldName":"effDate"
},
{
"Name":"sign1",
"Type":"Binary"
"Name":"drugId",
"DBFieldName":"drug_Id"
},
{
"Name":"sign2",
"Type":"Binary"
},
{
"Name":"drugId"
"Name":"凭证号",
"DBFieldName":"invoiceId"
}
]
},
@ -112,7 +97,7 @@
"Width":1.77271
},
{
"Name":"操作类型",
"Name":"凭证号",
"Width":2.19604
},
{
@ -121,7 +106,7 @@
},
{
"Name":"有效期",
"Width":2.43417
"Width":2.40771
},
{
"Name":"入库数量",
@ -157,20 +142,14 @@
"ColumnContentCell":[
{
"Column":"日期",
"WordWrap":true,
"TextAlign":"MiddleCenter",
"ShrinkFontToFit":true,
"DataField":"日期"
},
{
"Column":"操作类型",
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox10",
"Dock":"Fill",
"TextAlign":"MiddleCenter"
}
]
"Column":"凭证号",
"DataField":"凭证号"
},
{
"Column":"批号",
@ -228,11 +207,10 @@
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox6",
"Type":"FieldBox",
"Name":"FieldBox14",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"Text":"药库"
"TextAlign":"MiddleCenter"
}
]
},
@ -241,11 +219,10 @@
"FreeCell":true,
"Control":[
{
"Type":"StaticBox",
"Name":"StaticBox7",
"Type":"FieldBox",
"Name":"FieldBox15",
"Dock":"Fill",
"TextAlign":"MiddleCenter",
"Text":"门诊药房"
"TextAlign":"MiddleCenter"
}
]
}
@ -269,7 +246,7 @@
},
{
"GroupTitle":false,
"Column":"操作类型",
"Column":"凭证号",
"Font":{
"Name":"宋体",
"Size":105000,
@ -394,6 +371,7 @@
"Name":"Group1",
"ByFields":"drugId",
"GroupHeader":{
"NewPage":"Before",
"PrintGridBorder":false,
"RepeatOnPage":true,
"Control":[

View File

@ -1,7 +1,7 @@
{
"connectionStrings": "server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=root;Charset=utf8mb4;",
"connectionStrings": "server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=qq1223;Charset=utf8mb4;",
"finger": {
"ip": "192.168.50.201",
"ip": "192.168.50.59",
"port": 4370,
"type": 2
},
@ -15,9 +15,9 @@
"boxMachineId": "DM5"
},
"port": {
"drawerPortPath": "COM1",
"drawerPortPath": "COM2",
"drawerProtocol": 485,
"scanCodePortPath": "COM8",
"scanCodePortPath": "COM1",
"canBusPortPath": "COM31",
"canBusExsit": true,
"doorAddr": 0,