Compare commits
2 Commits
ac39763b13
...
396fb8743f
Author | SHA1 | Date | |
---|---|---|---|
|
396fb8743f |
|
|
|
ff96d4e676 |
|
|
@ -8,13 +8,19 @@ EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{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|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.ActiveCfg = Release|Any CPU
|
||||||
{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -50,10 +50,36 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
//手术室药箱补药获取毒麻柜中的药品信息
|
//手术室药箱补药获取毒麻柜中的药品信息
|
||||||
Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
|
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<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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,10 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
/// <param name="details"></param>
|
/// <param name="details"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<bool> UpdatePlanDetail(PlanDetails details);
|
Task<bool> UpdatePlanDetail(PlanDetails details);
|
||||||
|
//查询要删除的套餐下是否有绑定,且绑定有库存
|
||||||
|
Task<bool> CheckPlanBind(int planId);
|
||||||
|
//查询要删除的药品是否有绑定且库存大于0
|
||||||
|
Task<bool> CheckPlanDetailBind(PlanDetails planDetail);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除套餐中的药品
|
/// 删除套餐中的药品
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -21,5 +21,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
|
||||||
Task<bool> UpdateSign(int id, string sign);
|
Task<bool> UpdateSign(int id, string sign);
|
||||||
|
|
||||||
bool UpdateUserPassword(User user);
|
bool UpdateUserPassword(User user);
|
||||||
|
//查询当前值班信息
|
||||||
|
HkcChangeShifts GetOnDuty();
|
||||||
|
//保存交接班信息
|
||||||
|
Task<bool> UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,7 +315,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
var q = _connection.ChannelStock
|
var q = _connection.ChannelStock
|
||||||
.Where(cs => cs.Id == Stock.Id)
|
.Where(cs => cs.Id == Stock.Id)
|
||||||
.Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
|
.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);
|
.Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty);
|
||||||
|
|
||||||
if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
|
if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
|
||||||
|
@ -617,7 +617,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
|
.Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
|
||||||
//将套餐中的药品信息写入channelStock
|
//将套餐中的药品信息写入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();
|
List<PlanDetails> planInfos = await query.ToListAsync();
|
||||||
if (planInfos != null && planInfos.Count > 0)
|
if (planInfos != null && planInfos.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -631,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
DrawerNo = list.DrawerNo,
|
DrawerNo = list.DrawerNo,
|
||||||
DrugId = planInfos[i].DrugId.ToString(),
|
DrugId = planInfos[i].DrugId.ToString(),
|
||||||
BaseQuantity = planInfos[i].BaseQuantity,
|
BaseQuantity = planInfos[i].BaseQuantity,
|
||||||
|
BoxState = 1
|
||||||
});
|
});
|
||||||
if (mid > 0)
|
if (mid > 0)
|
||||||
{
|
{
|
||||||
|
@ -704,7 +705,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
List<ChannelList> channelLists = new List<ChannelList>();
|
List<ChannelList> channelLists = new List<ChannelList>();
|
||||||
var query = _connection.ChannelStock//.AsQueryable()
|
var query = _connection.ChannelStock//.AsQueryable()
|
||||||
.Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
|
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1)
|
||||||
.GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
|
.GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
|
@ -715,7 +716,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var queryChannelStock = _connection.ChannelStock.AsQueryable()
|
var queryChannelStock = _connection.ChannelStock.AsQueryable()
|
||||||
.Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
|
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1)
|
||||||
.LoadWith(cs => cs.Drug).ToList();
|
.LoadWith(cs => cs.Drug).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
@ -729,7 +730,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
|
ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
|
||||||
if (stock != null)
|
if (stock != null)
|
||||||
{
|
{
|
||||||
stock.NeedQuantity = stock.BaseQuantity-item.sumQuantity;
|
stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity;
|
||||||
queryList[i].ChannelStocks.Add(stock);
|
queryList[i].ChannelStocks.Add(stock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -772,9 +773,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
// 当前药品取药数量
|
// 当前药品取药数量
|
||||||
var Quantity = boxCs.NeedQuantity;
|
var Quantity = boxCs.NeedQuantity;
|
||||||
List<ChannelStock> stockList = await _connection.ChannelStock
|
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.machineId && cs.DrawerType == 1 && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
|
||||||
.AsQueryable()
|
.AsQueryable()
|
||||||
.OrderBy(cs=>cs.EffDate).ToListAsync();
|
.OrderBy(cs => cs.EffDate).ToListAsync();
|
||||||
|
|
||||||
// 当前药品的库存总量
|
// 当前药品的库存总量
|
||||||
var total = stockList.Sum(current => current.Quantity);
|
var total = stockList.Sum(current => current.Quantity);
|
||||||
|
@ -789,7 +790,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
// 盘点库存是否足够
|
// 盘点库存是否足够
|
||||||
if (total > Quantity)
|
if (total >= Quantity)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (var j = 0; Quantity > 0; j++)
|
for (var j = 0; Quantity > 0; j++)
|
||||||
|
@ -801,7 +802,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
tempData.Add(new BoxTakeVo()
|
tempData.Add(new BoxTakeVo()
|
||||||
{
|
{
|
||||||
Drug = boxCs.Drug,
|
Drug = boxCs.Drug,
|
||||||
BoxDetail= boxCs,
|
BoxDetail = boxCs,
|
||||||
ChannelStock = stock,
|
ChannelStock = stock,
|
||||||
StockQuantity = total,
|
StockQuantity = total,
|
||||||
Quantity = stock.Quantity,
|
Quantity = stock.Quantity,
|
||||||
|
@ -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
|
try
|
||||||
|
@ -950,19 +951,20 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
//更新药箱中的药品数量
|
//更新药箱中的药品数量
|
||||||
int boxID = _connection.Insert(new ChannelStock() {
|
int boxID = _connection.Insert(new ChannelStock()
|
||||||
|
{
|
||||||
Id = Guid.NewGuid().ToString(),
|
Id = Guid.NewGuid().ToString(),
|
||||||
ListId = boxTakeVo.BoxDetail.Id,
|
ListId = boxTakeVo.BoxDetail.Id,
|
||||||
MachineId = _setting.boxMachineId,
|
MachineId = _setting.boxMachineId,
|
||||||
DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
|
DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
|
||||||
AddToQuantity = boxTakeVo.GetQuantity,
|
AddToQuantity = boxTakeVo.GetQuantity,
|
||||||
NeedQuantity=0,
|
NeedQuantity = 0,
|
||||||
DrugId = boxTakeVo.ChannelStock.DrugId,
|
DrugId = boxTakeVo.ChannelStock.DrugId,
|
||||||
ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
ManuNo = boxTakeVo.ChannelStock.ManuNo,
|
||||||
EffDate= boxTakeVo.ChannelStock.EffDate,
|
EffDate = EffDate,
|
||||||
BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
|
BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
|
||||||
BoardType = boxTakeVo.BoxDetail.BoardType,
|
BoardType = boxTakeVo.BoxDetail.BoardType,
|
||||||
BoxState= 2 //补药完成
|
BoxState = 2 //补药完成
|
||||||
});
|
});
|
||||||
// 手术室药箱入库记录
|
// 手术室药箱入库记录
|
||||||
int boxMId = _connection.InsertWithInt32Identity(new MachineRecord()
|
int boxMId = _connection.InsertWithInt32Identity(new MachineRecord()
|
||||||
|
@ -979,12 +981,12 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||||||
InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
|
InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
|
||||||
});
|
});
|
||||||
int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxTakeVo.BoxDetail.DrugId)).Sum(p => p.BaseQuantity);
|
//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 == boxTakeVo.BoxDetail.Id)
|
//int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.Id)
|
||||||
.Set(cl => cl.TotalQuantity, totalQuantity)
|
// .Set(cl => cl.TotalQuantity, totalQuantity)
|
||||||
.Update();
|
// .Update();
|
||||||
int delResutl = await _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.BoxDetail.Id).DeleteAsync();
|
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"))
|
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
|
try
|
||||||
{
|
{
|
||||||
|
@ -1092,8 +1094,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
// 当前药品取药数量
|
// 当前药品取药数量
|
||||||
var Quantity = boxCs.NeedQuantity;
|
var Quantity = boxCs.NeedQuantity;
|
||||||
List<ChannelStock> stockList = await _connection.ChannelStock
|
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()
|
.AsQueryable()
|
||||||
|
.Skip((int)skip)
|
||||||
|
.Take((int)take)
|
||||||
.OrderBy(cs => cs.EffDate).ToListAsync();
|
.OrderBy(cs => cs.EffDate).ToListAsync();
|
||||||
|
|
||||||
// 当前药品的库存总量
|
// 当前药品的库存总量
|
||||||
|
@ -1105,58 +1109,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
StockQuantity = total,
|
StockQuantity = total,
|
||||||
Quantity = Quantity
|
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;
|
return tempData;
|
||||||
|
|
||||||
|
@ -1167,5 +1119,523 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
return null;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,8 +68,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
int pagedData = await query.CountAsync();
|
int pagedData = await query.CountAsync();
|
||||||
|
|
||||||
List<OrderInfo> list = await query
|
List<OrderInfo> list = await query
|
||||||
.LoadWith(oi => oi.Detail)
|
//.LoadWith(oi => oi.Detail)
|
||||||
.LoadWith(oi => oi.Detail.Drug)
|
//.LoadWith(oi => oi.Detail.Drug)
|
||||||
.OrderBy((oi) => oi.RecvDate)
|
.OrderBy((oi) => oi.RecvDate)
|
||||||
.ThenBy((oi => oi.OrderNo))
|
.ThenBy((oi => oi.OrderNo))
|
||||||
.Skip((int)skip)
|
.Skip((int)skip)
|
||||||
|
@ -590,10 +590,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip)
|
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
|
var query2 = from od in _connection.OrderDetail
|
||||||
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
|
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
|
||||||
group od by od.OrderNo into temp
|
group od by od.OrderNo into temp
|
||||||
|
@ -601,7 +597,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
var query = from oi in _connection.OrderInfo
|
var query = from oi in _connection.OrderInfo
|
||||||
from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
|
from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
|
||||||
select oi;
|
select oi;
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(OrderrNo))
|
if (!String.IsNullOrEmpty(OrderrNo))
|
||||||
{
|
{
|
||||||
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||||||
|
@ -619,8 +614,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
int pagedData = await query.CountAsync();
|
int pagedData = await query.CountAsync();
|
||||||
|
|
||||||
List<OrderInfo> list = await query
|
List<OrderInfo> list = await query
|
||||||
//.LoadWith(oi => oi.Detail)
|
//.LoadWith(oi => oi.DetailList)
|
||||||
//.LoadWith(oi => oi.Detail.Drug)
|
|
||||||
.OrderBy((oi) => oi.RecvDate)
|
.OrderBy((oi) => oi.RecvDate)
|
||||||
.ThenBy((oi => oi.OrderNo))
|
.ThenBy((oi => oi.OrderNo))
|
||||||
.Skip((int)skip)
|
.Skip((int)skip)
|
||||||
|
@ -630,13 +624,57 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
for (int i = 0; i < list.Count; i++)
|
for (int i = 0; i < list.Count; i++)
|
||||||
{
|
{
|
||||||
//list[i].Detail = await _connection.OrderDetail.AsQueryable()
|
for (int j = 0; j < list[i].DetailList.Count; j++)
|
||||||
// .Where(od => od.OrderNo == list[i].OrderNo)
|
{
|
||||||
// .LoadWith(od => od.Drug)
|
list[i].DetailList[j].Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailList[j].DrugId).FirstOrDefaultAsync();
|
||||||
// .ToListAsync();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//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>()
|
return new PageData<OrderInfo>()
|
||||||
{
|
{
|
||||||
TotalDesserts = pagedData,
|
TotalDesserts = pagedData,
|
||||||
|
@ -654,7 +692,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
return ints;
|
return ints;
|
||||||
}
|
}
|
||||||
//核对处方
|
//核对处方
|
||||||
public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos,int DrawerNo)
|
public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -670,9 +708,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
OrderInfo oi = selectedOrderInfos[i];
|
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()
|
_connection.Insert(new OrderFinish()
|
||||||
{
|
{
|
||||||
OrderNo = oi.OrderNo,
|
OrderNo = oi.OrderNo,
|
||||||
|
@ -683,149 +721,162 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
Operator = _globalStateService.Operator.NickName,
|
Operator = _globalStateService.Operator.NickName,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
int drawerNo = DrawerNo + 1;
|
int drawerNo = DrawerNo;
|
||||||
ChannelStock cs =_connection.ChannelStock.AsQueryable()
|
if (oi.DetailList != null && oi.DetailList.Count > 0)
|
||||||
.Where(cs => cs.DrugId == oi.Detail.DrugId
|
|
||||||
&& cs.ManuNo == oi.Detail.SetManuNo
|
|
||||||
// && cs.EffDate == oi._OrderDetail.SetEffDate
|
|
||||||
&& cs.MachineId.Equals(_setting.boxMachineId)
|
|
||||||
&& cs.DrawerNo == drawerNo
|
|
||||||
&& cs.Quantity >= oi.Detail.Quantity).First();
|
|
||||||
if (cs == null)
|
|
||||||
{
|
{
|
||||||
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存");
|
for (int j = 0; j < oi.DetailList.Count; j++)
|
||||||
continue;
|
|
||||||
}
|
|
||||||
cs.Quantity = cs.Quantity - oi.Detail.Quantity;
|
|
||||||
//cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
|
|
||||||
logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.Detail.Quantity}");
|
|
||||||
// 更新数据 库存信息
|
|
||||||
_connection.Update(cs);
|
|
||||||
|
|
||||||
// 获取更新完库存后的药品库存
|
|
||||||
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
|
|
||||||
.Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
|
|
||||||
.Where(it => it.DrugId.Equals(cs.DrugId))
|
|
||||||
.Where(it => it.ManuNo.Equals(cs.ManuNo))
|
|
||||||
.Where(it => it.DrawerType == 1)
|
|
||||||
.ToList();
|
|
||||||
if (cs != null)
|
|
||||||
{
|
|
||||||
_connection.Insert(new MachineRecord()
|
|
||||||
{
|
{
|
||||||
MachineId = _setting.machineId,
|
ChannelStock cs = _connection.ChannelStock.AsQueryable()
|
||||||
DrawerNo = cs.DrawerNo,
|
.Where(cs => cs.DrugId == oi.DetailList[j].DrugId
|
||||||
ColNo = cs.ColNo,
|
&& cs.ManuNo == oi.DetailList[j].SetManuNo
|
||||||
DrugId = cs.DrugId,
|
// && cs.EffDate == oi._OrderDetail.SetEffDate
|
||||||
ManuNo = cs.ManuNo,
|
&& cs.MachineId.Equals(_setting.boxMachineId)
|
||||||
EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
&& cs.DrawerNo == drawerNo
|
||||||
Operator = _globalStateService.Operator?.Id,
|
&& cs.Quantity >= oi.DetailList[j].Quantity).First();
|
||||||
Reviewer = _globalStateService.Reviewer?.Id,
|
if (cs == null)
|
||||||
OperationTime = DateTime.Now,
|
|
||||||
Quantity = oi.Detail.Quantity,
|
|
||||||
Type = 2,
|
|
||||||
InvoiceId = oi.OrderNo
|
|
||||||
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
//查询上一条账册中的空瓶数
|
|
||||||
AccountBookG2 accountBookEmpty =_connection.AccountBookG2.AsQueryable()
|
|
||||||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
|
||||||
.Where(ab => ab.Type == 1 || ab.Type == 2)
|
|
||||||
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
|
||||||
.Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
|
|
||||||
//保存账册
|
|
||||||
int iInsertResult = _connection.Insert(new AccountBookG2()
|
|
||||||
{
|
|
||||||
DrugId = oi.Detail.DrugId,
|
|
||||||
Type = 2,
|
|
||||||
Department = oi.DeptName,
|
|
||||||
OrderNo = oi.OrderNo,
|
|
||||||
ManuNo = cs.ManuNo,
|
|
||||||
EffDate = cs.EffDate,
|
|
||||||
OutQuantity = oi.Detail.Quantity,
|
|
||||||
UserId1 = _globalStateService.Operator?.Id,
|
|
||||||
UserId2 = _globalStateService.Reviewer?.Id,
|
|
||||||
MachineId = _setting.machineId,
|
|
||||||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
|
||||||
CreateTime = DateTime.Now,
|
|
||||||
InvoiceNo = oi.OrderNo,
|
|
||||||
ManuStock = nowChannels.Sum(it => it.Quantity),
|
|
||||||
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.Detail.Quantity,
|
|
||||||
ShoushuJian = drawerNo.ToString()
|
|
||||||
});
|
|
||||||
//修改凌晨生成的日结存与总结存数据
|
|
||||||
AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
|
|
||||||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
|
||||||
.Where(ab => ab.Type == 3)
|
|
||||||
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
|
||||||
.Where(ab => ab.ManuNo == cs.ManuNo)
|
|
||||||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
|
|
||||||
if (accountBookG2Day != null)
|
|
||||||
{
|
|
||||||
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity;
|
|
||||||
_connection.Update(accountBookG2Day);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
|
|
||||||
int iDayResult =_connection.Insert(new AccountBookG2()
|
|
||||||
{
|
{
|
||||||
DrugId = oi.Detail.DrugId,
|
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存");
|
||||||
Type = 3,
|
continue;
|
||||||
ManuNo = cs.ManuNo,
|
|
||||||
EffDate = cs.EffDate,
|
|
||||||
YQuantity = 0,
|
|
||||||
ManuStock = oi.Detail.Quantity,
|
|
||||||
TotalStock = oi.Detail.Quantity,
|
|
||||||
UserId1 = _globalStateService.Operator?.Id,
|
|
||||||
UserId2 = _globalStateService.Reviewer?.Id,
|
|
||||||
MachineId = _setting.machineId,
|
|
||||||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
|
||||||
InvoiceNo = "日结存"
|
|
||||||
});
|
|
||||||
if (iDayResult <= 0)
|
|
||||||
{
|
|
||||||
logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
|
|
||||||
}
|
}
|
||||||
}
|
cs.Quantity = cs.Quantity - oi.DetailList[j].Quantity;
|
||||||
//修改凌晨生成的日结存与总结存数据
|
//cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
|
||||||
AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable()
|
logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}");
|
||||||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
// 更新数据 库存信息
|
||||||
.Where(ab => ab.Type == 4)
|
_connection.Update(cs);
|
||||||
.Where(ab => ab.DrugId == oi.Detail.DrugId)
|
|
||||||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
|
|
||||||
if (accountBookG2Total != null)
|
|
||||||
{
|
|
||||||
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity;
|
|
||||||
_connection.Update(accountBookG2Total);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
|
|
||||||
int iTotalResult = _connection.Insert(new AccountBookG2()
|
|
||||||
{
|
|
||||||
DrugId = oi.Detail.DrugId,
|
|
||||||
Type = 4,
|
|
||||||
YQuantity = 0,
|
|
||||||
ManuStock = oi.Detail.Quantity,
|
|
||||||
TotalStock = oi.Detail.Quantity,
|
|
||||||
UserId1 = _globalStateService.Operator?.Id,
|
|
||||||
UserId2 = _globalStateService.Reviewer?.Id,
|
|
||||||
MachineId = _setting.machineId,
|
|
||||||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
|
||||||
InvoiceNo = "总结存"
|
|
||||||
});
|
|
||||||
if (iTotalResult <= 0)
|
|
||||||
{
|
|
||||||
logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//更新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))
|
||||||
|
.Where(it => it.DrugId.Equals(cs.DrugId))
|
||||||
|
.Where(it => it.ManuNo.Equals(cs.ManuNo))
|
||||||
|
.Where(it => it.DrawerType == 1)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
if (cs != null)
|
||||||
|
{
|
||||||
|
_connection.Insert(new MachineRecord()
|
||||||
|
{
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
DrawerNo = cs.DrawerNo,
|
||||||
|
ColNo = cs.ColNo,
|
||||||
|
DrugId = cs.DrugId,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||||||
|
Operator = _globalStateService.Operator?.Id,
|
||||||
|
Reviewer = _globalStateService.Reviewer?.Id,
|
||||||
|
OperationTime = DateTime.Now,
|
||||||
|
Quantity = oi.DetailList[j].Quantity,
|
||||||
|
Type = 2,
|
||||||
|
InvoiceId = oi.OrderNo
|
||||||
|
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//查询上一条账册中的空瓶数
|
||||||
|
AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable()
|
||||||
|
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||||||
|
.Where(ab => ab.Type == 1 || ab.Type == 2)
|
||||||
|
.Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
|
||||||
|
.Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
|
||||||
|
//保存账册
|
||||||
|
int iInsertResult = _connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.DetailList[j].DrugId,
|
||||||
|
Type = 2,
|
||||||
|
Department = oi.DeptName,
|
||||||
|
OrderNo = oi.OrderNo,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = cs.EffDate,
|
||||||
|
OutQuantity = oi.DetailList[j].Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
CreateTime = DateTime.Now,
|
||||||
|
InvoiceNo = oi.OrderNo,
|
||||||
|
ManuStock = nowChannels.Sum(it => it.Quantity),
|
||||||
|
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.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.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.DetailList[j].Quantity;
|
||||||
|
_connection.Update(accountBookG2Day);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
|
||||||
|
int iDayResult = _connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.DetailList[j].DrugId,
|
||||||
|
Type = 3,
|
||||||
|
ManuNo = cs.ManuNo,
|
||||||
|
EffDate = cs.EffDate,
|
||||||
|
YQuantity = 0,
|
||||||
|
ManuStock = oi.DetailList[j].Quantity,
|
||||||
|
TotalStock = oi.DetailList[j].Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
InvoiceNo = "日结存"
|
||||||
|
});
|
||||||
|
if (iDayResult <= 0)
|
||||||
|
{
|
||||||
|
logger.Info($"未写入日结存数据{oi.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.DetailList[j].DrugId)
|
||||||
|
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
|
||||||
|
if (accountBookG2Total != null)
|
||||||
|
{
|
||||||
|
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity;
|
||||||
|
_connection.Update(accountBookG2Total);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
|
||||||
|
int iTotalResult = _connection.Insert(new AccountBookG2()
|
||||||
|
{
|
||||||
|
DrugId = oi.DetailList[j].DrugId,
|
||||||
|
Type = 4,
|
||||||
|
YQuantity = 0,
|
||||||
|
ManuStock = oi.DetailList[j].Quantity,
|
||||||
|
TotalStock = oi.DetailList[j].Quantity,
|
||||||
|
UserId1 = _globalStateService.Operator?.Id,
|
||||||
|
UserId2 = _globalStateService.Reviewer?.Id,
|
||||||
|
MachineId = _setting.machineId,
|
||||||
|
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||||
|
InvoiceNo = "总结存"
|
||||||
|
});
|
||||||
|
if (iTotalResult <= 0)
|
||||||
|
{
|
||||||
|
logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单");
|
logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单");
|
||||||
|
|
|
@ -4,6 +4,7 @@ using MasaBlazorApp3.DataAccess.Dao;
|
||||||
using MasaBlazorApp3.Pojo;
|
using MasaBlazorApp3.Pojo;
|
||||||
using MasaBlazorApp3.Pojo.Config;
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using Org.BouncyCastle.Crypto;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
@ -38,8 +39,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
var query = _connection.Plan.AsQueryable();
|
var query = _connection.Plan.AsQueryable();
|
||||||
|
|
||||||
List<Plan> list = await query.Where(p=>p.UseState==1)
|
List<Plan> list = await query.Where(p => p.UseState == 1)
|
||||||
.LoadWith(p => p._PlanDetails.Where(pd=>pd.UseState==1))
|
.LoadWith(p => p._PlanDetails.Where(pd => pd.UseState == 1))
|
||||||
//.ThenLoad(p=>p._DrugInfo)
|
//.ThenLoad(p=>p._DrugInfo)
|
||||||
.OrderBy(r => r.Id)
|
.OrderBy(r => r.Id)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
@ -78,7 +79,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<Plan> GetPlanById(int Id)
|
public async Task<Plan> GetPlanById(int Id)
|
||||||
{
|
{
|
||||||
var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id&&p.UseState==1);
|
var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id && p.UseState == 1);
|
||||||
List<Plan> list = await query
|
List<Plan> list = await query
|
||||||
.LoadWith(p => p._PlanDetails)
|
.LoadWith(p => p._PlanDetails)
|
||||||
//.ThenLoad(p=>p._DrugInfo)
|
//.ThenLoad(p=>p._DrugInfo)
|
||||||
|
@ -112,6 +113,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
plan.AddTime = DateTime.Now;
|
plan.AddTime = DateTime.Now;
|
||||||
plan.OperatorUser = _globalStateService.Operator.Id;
|
plan.OperatorUser = _globalStateService.Operator.Id;
|
||||||
plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
|
plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
|
||||||
|
plan.UseState = 1;
|
||||||
return _connection.InsertWithInt32Identity(plan) > 0;
|
return _connection.InsertWithInt32Identity(plan) > 0;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -143,6 +145,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
return false;
|
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>
|
||||||
/// 删除套餐
|
/// 删除套餐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -154,27 +188,32 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
_connection.BeginTransaction();
|
_connection.BeginTransaction();
|
||||||
bool flag = false;
|
bool flag = false;
|
||||||
//查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
|
logger.Error($"删除套餐{planId}");
|
||||||
int hasCount = _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.machineId).Count();
|
//查询该套餐下是否有药品,如果有则一并删除
|
||||||
if (hasCount > 0)
|
int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
|
||||||
|
int pdResult = 1;
|
||||||
|
if (iHasPd > 0)
|
||||||
{
|
{
|
||||||
return flag;
|
pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync();
|
||||||
}
|
}
|
||||||
else
|
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)
|
||||||
{
|
{
|
||||||
logger.Error($"删除套餐{planId}");
|
//删除channelStock表中的绑定药品
|
||||||
//查询该套餐下是否有药品,如果有则一并删除
|
iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete();
|
||||||
int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
|
_connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl=>cl.DrugId,"").Update();
|
||||||
int pdResult = 1;
|
|
||||||
if (iHasPd > 0)
|
|
||||||
{
|
}
|
||||||
pdResult = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).Update();
|
|
||||||
}
|
if (pdResult > 0 && pResult > 0 && iDelResult > 0 && iDelChannelListResult > 0)
|
||||||
int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update();
|
{
|
||||||
if (pdResult > 0 && pResult > 0)
|
flag = true;
|
||||||
{
|
|
||||||
flag = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag)
|
if (flag)
|
||||||
|
@ -207,7 +246,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(details.DrugId))
|
if (!string.IsNullOrEmpty(details.DrugId))
|
||||||
{
|
{
|
||||||
int id = _connection.InsertWithInt32Identity(details);
|
int id =await _connection.InsertWithInt32IdentityAsync(details);
|
||||||
details.Id = id;
|
details.Id = id;
|
||||||
return id > 0;
|
return id > 0;
|
||||||
}
|
}
|
||||||
|
@ -235,7 +274,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.Where(p => p.Id == details.Id)
|
.Where(p => p.Id == details.Id)
|
||||||
.Set(p => p.DrugId, details._DrugInfo.DrugId)
|
.Set(p => p.DrugId, details._DrugInfo.DrugId)
|
||||||
.Set(p => p.BaseQuantity, details.BaseQuantity);
|
.Set(p => p.BaseQuantity, details.BaseQuantity);
|
||||||
return iResult.Update() > 0;
|
return await iResult.UpdateAsync() > 0;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
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>
|
||||||
/// 删除套餐中的药品
|
/// 删除套餐中的药品
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -253,9 +312,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
_connection.BeginTransaction();
|
||||||
logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}");
|
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)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -269,7 +352,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
if (details._DrugInfo.DrugId != null)
|
if (details._DrugInfo.DrugId != null)
|
||||||
{
|
{
|
||||||
//查询该药品是否已在套餐中存在,存在则不再添加
|
//查询该药品是否已在套餐中存在,存在则不再添加
|
||||||
PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId&&p.UseState==1).FirstOrDefault();
|
PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId && p.UseState == 1).FirstOrDefault();
|
||||||
|
|
||||||
if (details.Id > 0)
|
if (details.Id > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using Google.Protobuf.WellKnownTypes;
|
using Google.Protobuf.WellKnownTypes;
|
||||||
using LinqToDB;
|
using LinqToDB;
|
||||||
|
using log4net;
|
||||||
using MasaBlazorApp3.DataAccess.Dao;
|
using MasaBlazorApp3.DataAccess.Dao;
|
||||||
using MasaBlazorApp3.Pojo;
|
using MasaBlazorApp3.Pojo;
|
||||||
using MasaBlazorApp3.Pojo.Config;
|
using MasaBlazorApp3.Pojo.Config;
|
||||||
|
@ -17,6 +18,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
|
|
||||||
private readonly AppDataConnection _connection;
|
private readonly AppDataConnection _connection;
|
||||||
private readonly SettingConfig _setting;
|
private readonly SettingConfig _setting;
|
||||||
|
private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
|
||||||
|
|
||||||
//public UserDao(MyContext context)
|
//public UserDao(MyContext context)
|
||||||
//{
|
//{
|
||||||
|
@ -61,7 +63,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
public User GetByUsername(string username)
|
public User GetByUsername(string username)
|
||||||
{
|
{
|
||||||
|
|
||||||
return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username&&u.MachineId== _setting.machineId);
|
return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username && u.MachineId == _setting.machineId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int InsertUser(User user)
|
public int InsertUser(User user)
|
||||||
|
@ -92,7 +94,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
//重置用户密码
|
//重置用户密码
|
||||||
public bool ResetPassword(int id)
|
public bool ResetPassword(int id)
|
||||||
{
|
{
|
||||||
var statement= _connection.User.Where(u => u.Id == id).Set(u=>u.Password, MD5.GetMD5Hash("123456").ToLower());
|
var statement = _connection.User.Where(u => u.Id == id).Set(u => u.Password, MD5.GetMD5Hash("123456").ToLower());
|
||||||
return statement.Update() > 0;
|
return statement.Update() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,5 +117,50 @@ namespace MasaBlazorApp3.DataAccess.Impl
|
||||||
.Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
|
.Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
|
||||||
return statement.Update() > 0;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ApplicationIcon>favicon.ico</ApplicationIcon>
|
<ApplicationIcon>favicon.ico</ApplicationIcon>
|
||||||
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -43,12 +43,12 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
||||||
IsLoading="@isLoading"
|
|
||||||
RowRender="@RowRender"
|
RowRender="@RowRender"
|
||||||
EmptyText="无数据"
|
EmptyText="无数据"
|
||||||
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
||||||
AllowColumnResize="true" AllowAlternatingRows="false"
|
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">
|
ExpandMode="DataGridExpandMode.Multiple">
|
||||||
<Template Context="cs">
|
<Template Context="cs">
|
||||||
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
||||||
|
@ -95,9 +95,13 @@
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
|
|
||||||
var result = await channelStockDao.GetBoxWaitInfo(10, 0);
|
var result = await channelStockDao.GetBoxWaitInfo(args.Top, args.Skip);
|
||||||
// Update the Data property
|
// Update the Data property
|
||||||
_forecasts = result.Desserts;
|
_forecasts = result.Desserts;
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
|
@ -112,7 +116,6 @@
|
||||||
// await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
|
// await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RowRender(RowRenderEventArgs<ChannelList> args)
|
void RowRender(RowRenderEventArgs<ChannelList> args)
|
||||||
{
|
{
|
||||||
args.Expandable = args.Data.ChannelStocks.Count > 0;
|
args.Expandable = args.Data.ChannelStocks.Count > 0;
|
||||||
|
@ -121,7 +124,7 @@
|
||||||
async void OnRowSelect(ChannelList cl)
|
async void OnRowSelect(ChannelList cl)
|
||||||
{
|
{
|
||||||
var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
|
var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
|
||||||
$"{cl.DrawerNo}号药箱取药",
|
$"{cl.DrawerNo}号药箱药品入库",
|
||||||
new Dictionary<string, object>() { { "boxChannelList", cl } },
|
new Dictionary<string, object>() { { "boxChannelList", cl } },
|
||||||
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
|
new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
|
||||||
);
|
);
|
||||||
|
|
|
@ -8,51 +8,20 @@
|
||||||
|
|
||||||
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
|
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
|
||||||
<RadzenStack>
|
<RadzenStack>
|
||||||
@if (CanTakeDrug)
|
<RadzenDataGrid Data="@boxChannelList.ChannelStocks" AllowAlternatingRows="true"
|
||||||
{
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
<RadzenDataGrid Data="@data" AllowAlternatingRows="false">
|
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn Property="ChannelStock" Title="库位">
|
<RadzenDataGridColumn Property="ChannelStocks.Drug.DrugName" Title="药品" />
|
||||||
<Template>
|
<RadzenDataGridColumn Property="ChannelStocks.Drug.DrugSpec" Title="规格" />
|
||||||
@context.ChannelStock.DrawerNo - @context.ChannelStock.ColNo
|
<RadzenDataGridColumn Property="AddToQuantity" Title="入药箱数量" />
|
||||||
</Template>
|
<RadzenDataGridColumn Property="Quantity" 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="数量" />
|
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDataGrid>
|
</RadzenDataGrid>
|
||||||
}
|
</RadzenStack>
|
||||||
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">
|
<RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
|
||||||
@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" />
|
||||||
<RadzenButton Click="@OpenDrawer" Disabled="!CanTakeDrug" IsBusy="status > 0" BusyText="取药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Text="取药" Style="width: 120px" />
|
|
||||||
}
|
|
||||||
@if (status == 2)
|
|
||||||
{
|
|
||||||
<RadzenButton Click="@TakeFinish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
|
|
||||||
}
|
|
||||||
@if (status <= 2)
|
|
||||||
{
|
|
||||||
<RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
|
|
||||||
}
|
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
</RadzenStack>
|
</RadzenStack>
|
||||||
|
|
||||||
|
@ -64,10 +33,10 @@
|
||||||
@inject PortUtil PortUtil;
|
@inject PortUtil PortUtil;
|
||||||
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
|
private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
|
||||||
|
|
||||||
int status;
|
// int status;
|
||||||
|
bool isLoading;
|
||||||
|
int count;
|
||||||
[Parameter] public ChannelList boxChannelList { get; set; }
|
[Parameter] public ChannelList boxChannelList { get; set; }
|
||||||
private bool CanTakeDrug = true;
|
|
||||||
|
|
||||||
public List<BoxTakeVo> data { get; set; }
|
public List<BoxTakeVo> data { get; set; }
|
||||||
//称重取药数量
|
//称重取药数量
|
||||||
|
@ -78,225 +47,212 @@
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
data = await channelListDao.getTakeInfoByBox(boxChannelList);
|
|
||||||
// 如果有【stockQuantity】字段说明有药品库存不足
|
|
||||||
if (data.Any(it => it.ChannelStock == null))
|
|
||||||
{
|
|
||||||
CanTakeDrug = false;
|
|
||||||
}
|
|
||||||
base.OnInitializedAsync();
|
base.OnInitializedAsync();
|
||||||
}
|
}
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
async Task OpenDrawer()
|
|
||||||
{
|
{
|
||||||
this.status = 1;
|
isLoading = true;
|
||||||
// 解析需要打开的抽屉列表
|
|
||||||
List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
|
|
||||||
|
|
||||||
// 根据抽屉类型来决定打开前是否需要查询数量
|
data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip);
|
||||||
var promiseUtil = new PromiseUtil<int>();
|
// Update the Data property
|
||||||
|
isLoading = false;
|
||||||
await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
|
|
||||||
{
|
|
||||||
var orderTakeVo = drawerNos[options._data];
|
|
||||||
var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (this.status == 0)
|
|
||||||
{
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
// 开启抽屉
|
|
||||||
else if (this.status == 1)
|
|
||||||
{
|
|
||||||
if (orderTakeVo.Status == 0)
|
|
||||||
{
|
|
||||||
// 判断是否为单支抽屉
|
|
||||||
if (setting.Value.single.Contains(drawerNo))
|
|
||||||
{
|
|
||||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
|
||||||
orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
|
||||||
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
|
||||||
|
|
||||||
await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
|
|
||||||
}
|
|
||||||
for (int i = 0; i < data.Count; i++)
|
|
||||||
{
|
|
||||||
if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
|
|
||||||
{
|
|
||||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
|
||||||
{
|
|
||||||
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
|
||||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
|
||||||
|
|
||||||
data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
|
||||||
logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
|
||||||
await Task.Delay(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
//是药盒抽屉开药盒
|
|
||||||
if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
|
|
||||||
{
|
|
||||||
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
|
||||||
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
|
||||||
await Task.Delay(200);
|
|
||||||
}
|
|
||||||
DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
|
||||||
if (b)
|
|
||||||
{
|
|
||||||
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
|
||||||
PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
|
|
||||||
orderTakeVo.Status = 1;
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_message.Notify(
|
|
||||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
|
||||||
);
|
|
||||||
logger.Info($"抽屉打开失败");
|
|
||||||
PortUtil.AllLightOff();
|
|
||||||
RestData();
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 检测状态
|
|
||||||
else if (orderTakeVo.Status == 1)
|
|
||||||
{
|
|
||||||
// 查询抽屉是否为关闭状态
|
|
||||||
var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
|
||||||
// 关闭则改变状态并终止循环
|
|
||||||
if (b)
|
|
||||||
{
|
|
||||||
|
|
||||||
data.ForEach(cl =>
|
|
||||||
{
|
|
||||||
if (cl.ChannelStock.DrawerNo == drawerNo)
|
|
||||||
{
|
|
||||||
cl.GetQuantity = cl.Quantity;
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
orderTakeVo.Status = 2;
|
|
||||||
PortUtil.AllLightOff();
|
|
||||||
if (options._data == drawerNos.Count - 1)
|
|
||||||
{
|
|
||||||
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
|
||||||
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
|
||||||
PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
|
|
||||||
this.status = 2;
|
|
||||||
string alertMessage = string.Empty;
|
|
||||||
//检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
|
|
||||||
for (int i = 0; i < data.Count; i++)
|
|
||||||
{
|
|
||||||
if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
|
||||||
{
|
|
||||||
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
|
|
||||||
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
|
||||||
|
|
||||||
orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
|
||||||
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
|
||||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
|
||||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
|
||||||
{
|
|
||||||
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
|
||||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
|
||||||
|
|
||||||
}
|
|
||||||
await Task.Delay(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
|
|
||||||
{
|
|
||||||
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
|
||||||
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
|
||||||
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
|
||||||
WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
|
||||||
if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
|
||||||
{
|
|
||||||
alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(alertMessage))
|
|
||||||
{
|
|
||||||
//弹出确认对话框
|
|
||||||
alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
|
||||||
//弹出确认提示框
|
|
||||||
var confirm = await dialogService.OpenAsync<ConfirmDialog>(
|
|
||||||
$"保存确认",
|
|
||||||
new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
|
|
||||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
|
||||||
logger.Info(alertMessage);
|
|
||||||
if (!confirm)
|
|
||||||
{
|
|
||||||
RestData();
|
|
||||||
logger.Info("取消保存");
|
|
||||||
// 关闭弹窗
|
|
||||||
dialogService.Close(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
options._data += 1;
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
next(); // continue iteration
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
RestData();
|
|
||||||
logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
|
|
||||||
_message.Notify(
|
|
||||||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
|
|
||||||
);
|
|
||||||
if (setting.Value.single.Contains(drawerNo))
|
|
||||||
{
|
|
||||||
PortUtil.AllLightOff();
|
|
||||||
}
|
|
||||||
stop();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
// async Task OpenDrawer()
|
||||||
|
// {
|
||||||
|
// this.status = 1;
|
||||||
|
// // 解析需要打开的抽屉列表
|
||||||
|
// List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
|
||||||
|
|
||||||
|
// // 根据抽屉类型来决定打开前是否需要查询数量
|
||||||
|
// var promiseUtil = new PromiseUtil<int>();
|
||||||
|
|
||||||
|
// await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
|
||||||
|
// {
|
||||||
|
// var orderTakeVo = drawerNos[options._data];
|
||||||
|
// var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// if (this.status == 0)
|
||||||
|
// {
|
||||||
|
// stop();
|
||||||
|
// }
|
||||||
|
// // 开启抽屉
|
||||||
|
// else if (this.status == 1)
|
||||||
|
// {
|
||||||
|
// if (orderTakeVo.Status == 0)
|
||||||
|
// {
|
||||||
|
// // 判断是否为单支抽屉
|
||||||
|
// if (setting.Value.single.Contains(drawerNo))
|
||||||
|
// {
|
||||||
|
// byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||||
|
// orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||||
|
// logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||||
|
|
||||||
|
// await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
|
||||||
|
// }
|
||||||
|
// for (int i = 0; i < data.Count; i++)
|
||||||
|
// {
|
||||||
|
// if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
|
||||||
|
// {
|
||||||
|
// if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||||
|
// {
|
||||||
|
// PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
||||||
|
// PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||||
|
|
||||||
|
// data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||||
|
// logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
|
||||||
|
// await Task.Delay(200);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //是药盒抽屉开药盒
|
||||||
|
// if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
|
||||||
|
// {
|
||||||
|
// PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
|
||||||
|
// await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
|
||||||
|
// await Task.Delay(200);
|
||||||
|
// }
|
||||||
|
// DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// var b = await PortUtil.OpenDrawerStatus(drawerNo);
|
||||||
|
// if (b)
|
||||||
|
// {
|
||||||
|
// PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
// PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
|
||||||
|
// orderTakeVo.Status = 1;
|
||||||
|
// next();
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// _message.Notify(
|
||||||
|
// new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
|
||||||
|
// );
|
||||||
|
// logger.Info($"抽屉打开失败");
|
||||||
|
// PortUtil.AllLightOff();
|
||||||
|
// RestData();
|
||||||
|
// stop();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 检测状态
|
||||||
|
// else if (orderTakeVo.Status == 1)
|
||||||
|
// {
|
||||||
|
// // 查询抽屉是否为关闭状态
|
||||||
|
// var b = await PortUtil.CheckDrawerStatus2(drawerNo);
|
||||||
|
// // 关闭则改变状态并终止循环
|
||||||
|
// if (b)
|
||||||
|
// {
|
||||||
|
|
||||||
|
// data.ForEach(cl =>
|
||||||
|
// {
|
||||||
|
// if (cl.ChannelStock.DrawerNo == drawerNo)
|
||||||
|
// {
|
||||||
|
// cl.GetQuantity = cl.Quantity;
|
||||||
|
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// orderTakeVo.Status = 2;
|
||||||
|
// PortUtil.AllLightOff();
|
||||||
|
// if (options._data == drawerNos.Count - 1)
|
||||||
|
// {
|
||||||
|
// PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
// PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||||||
|
// PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
|
||||||
|
// this.status = 2;
|
||||||
|
// string alertMessage = string.Empty;
|
||||||
|
// //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
|
||||||
|
// for (int i = 0; i < data.Count; i++)
|
||||||
|
// {
|
||||||
|
// if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
|
||||||
|
// {
|
||||||
|
// PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
|
||||||
|
// PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
|
||||||
|
|
||||||
|
// orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
|
||||||
|
// logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||||
|
// WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||||
|
// if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||||
|
// {
|
||||||
|
// //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
|
||||||
|
// alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||||
|
|
||||||
|
// }
|
||||||
|
// await Task.Delay(200);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
|
||||||
|
// {
|
||||||
|
// byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
|
||||||
|
// orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
|
||||||
|
// logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
|
||||||
|
// WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
|
||||||
|
// if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
|
||||||
|
// {
|
||||||
|
// alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (!string.IsNullOrEmpty(alertMessage))
|
||||||
|
// {
|
||||||
|
// //弹出确认对话框
|
||||||
|
// alertMessage += "应取数与实际取出数不一致确认要保存吗?";
|
||||||
|
// //弹出确认提示框
|
||||||
|
// var confirm = await dialogService.OpenAsync<ConfirmDialog>(
|
||||||
|
// $"保存确认",
|
||||||
|
// new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
|
||||||
|
// new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||||
|
// logger.Info(alertMessage);
|
||||||
|
// if (!confirm)
|
||||||
|
// {
|
||||||
|
// RestData();
|
||||||
|
// logger.Info("取消保存");
|
||||||
|
// // 关闭弹窗
|
||||||
|
// dialogService.Close(false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// stop();
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// options._data += 1;
|
||||||
|
// next();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// next(); // continue iteration
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
||||||
|
// catch (Exception e)
|
||||||
|
// {
|
||||||
|
// RestData();
|
||||||
|
// logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
|
||||||
|
// _message.Notify(
|
||||||
|
// new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
|
||||||
|
// );
|
||||||
|
// if (setting.Value.single.Contains(drawerNo))
|
||||||
|
// {
|
||||||
|
// PortUtil.AllLightOff();
|
||||||
|
// }
|
||||||
|
// stop();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
void RestData()
|
|
||||||
{
|
|
||||||
PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
|
||||||
this.status = 0;
|
|
||||||
data.ForEach(it =>
|
|
||||||
{
|
|
||||||
it.Status = 0;
|
|
||||||
it.BeforeQuantity = new int[9];
|
|
||||||
it.AfterQuantity = new int[9];
|
|
||||||
});
|
|
||||||
this.WeightFinnalQuantity = new int[9];
|
|
||||||
DrawerNoColNoList.Clear();
|
|
||||||
}
|
|
||||||
void Cancel()
|
void Cancel()
|
||||||
{
|
{
|
||||||
RestData();
|
|
||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
dialogService.Close(false);
|
dialogService.Close(false);
|
||||||
}
|
}
|
||||||
async Task TakeFinish()
|
async Task Finish()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 保存账册、操作记录
|
// 保存账册、操作记录
|
||||||
var b = await channelListDao.BoxTakeFinish(data);
|
var b = await channelListDao.BoxAddBoxFinish(boxChannelList);
|
||||||
if (!b)
|
if (!b)
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
||||||
|
@ -310,8 +266,6 @@
|
||||||
dialogService.Close(true);
|
dialogService.Close(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
//重置状态
|
|
||||||
this.RestData();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -307,7 +307,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
// 保存账册、操作记录
|
// 保存账册、操作记录
|
||||||
var b = await channelListDao.BoxTakeFinish(data);
|
var b = await channelListDao.BoxTakeFinish(data, boxChannelList);
|
||||||
if (!b)
|
if (!b)
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
_message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
|
||||||
|
|
|
@ -42,13 +42,13 @@
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
<RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
|
||||||
IsLoading="@isLoading"
|
|
||||||
RowRender="@RowRender"
|
RowRender="@RowRender"
|
||||||
EmptyText="无数据"
|
EmptyText="无数据"
|
||||||
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
Data="@_forecasts" @bind-Value=@selectedChannelLists
|
||||||
AllowColumnResize="true" AllowAlternatingRows="false"
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
SelectionMode="DataGridSelectionMode.Single"
|
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">
|
<Template Context="cs">
|
||||||
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
<RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
|
||||||
<Columns>
|
<Columns>
|
||||||
|
@ -94,14 +94,17 @@
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
async Task LoadData(LoadDataArgs args)
|
||||||
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
|
|
||||||
var result = await channelStockDao.GetAllBoxAddDrug(10, 0);
|
var result = await channelStockDao.GetAllBoxAddDrug(args.Top, args.Skip);
|
||||||
// Update the Data property
|
// Update the Data property
|
||||||
_forecasts = result.Desserts;
|
_forecasts = result.Desserts;
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
base.OnAfterRender(firstRender);
|
base.OnAfterRender(firstRender);
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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">
|
<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
|
||||||
<div class="row">
|
<RadzenColumn Size="12" SizeMD="5">
|
||||||
<div class="col-12 mb-4">
|
<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())">
|
</div>
|
||||||
<RadzenFieldset Text="查询">
|
</div>
|
||||||
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
|
</RadzenTemplateForm>
|
||||||
<RadzenRow AlignItems="AlignItems.Center">
|
</RadzenCard>
|
||||||
<RadzenColumn Size="4">
|
</RadzenColumn>
|
||||||
<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">
|
</RadzenRow>
|
||||||
<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 {
|
@code {
|
||||||
@inject IHkcChangeShiftsDao hkcChangeShiftsDao;
|
@inject Radzen.DialogService dialogService;
|
||||||
@inject DialogService dialogService;
|
|
||||||
|
|
||||||
@inject NavigationManager navigate;
|
@inject FingerprintUtil FingerprintUtil;
|
||||||
RadzenDataGrid<HkcChangeShifts> grid;
|
@inject PortUtil PortUtil;
|
||||||
bool isLoading;
|
@inject NavigationManager na;
|
||||||
int count;
|
@inject NotificationService _message
|
||||||
private IEnumerable<HkcChangeShifts>? _forecasts;
|
@inject GlobalStateService globalStateService;
|
||||||
DateTime start;
|
@inject IUserDao userDao;
|
||||||
DateTime end;
|
@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)
|
FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx;
|
||||||
|
|
||||||
|
loginMode = setting.Value.loginMode;
|
||||||
|
opFirst = setting.Value.opFirst;
|
||||||
|
|
||||||
|
//查询当前值班信息
|
||||||
|
hkcChange = userDao.GetOnDuty();
|
||||||
|
if (hkcChange != null && !string.IsNullOrEmpty(hkcChange.FromOperator))
|
||||||
{
|
{
|
||||||
reloadGrid();
|
FromOperator = userDao.GetByUsername(hkcChange.FromOperator);
|
||||||
|
}
|
||||||
|
if (hkcChange != null && string.IsNullOrEmpty(hkcChange.FromRviewer))
|
||||||
|
{
|
||||||
|
FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer);
|
||||||
|
}
|
||||||
|
return base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SetUser(Pojo.User user)
|
||||||
|
{
|
||||||
|
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 }
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async Task LoadData(LoadDataArgs args)
|
|
||||||
|
|
||||||
|
|
||||||
|
private void Submit(Pojo.User user)
|
||||||
{
|
{
|
||||||
isLoading = true;
|
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}】密码输入错误");
|
||||||
|
|
||||||
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;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_message.Notify(
|
||||||
|
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 }
|
||||||
|
);
|
||||||
|
logger.Info($"没有用户:【{loginModel.Username}】");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task reloadGrid()
|
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)
|
||||||
{
|
{
|
||||||
start = DateTime.MinValue;
|
|
||||||
end = DateTime.MinValue;
|
Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber));
|
||||||
await grid.Reload();
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
<div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
|
||||||
@foreach (int i in DrawerNos)
|
@foreach (int i in DrawerNos)
|
||||||
{
|
{
|
||||||
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
|
<RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo != i ? Variant.Outlined : Variant.Flat)" />
|
||||||
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -44,28 +44,52 @@
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
<RadzenDataGrid @ref="grid" AllowRowSelectOnRowClick="@allowRowSelectOnRowClick" AllowFiltering="true" LoadData="@LoadData"
|
<RadzenDataGrid @ref="grid" AllowRowSelectOnRowClick="@allowRowSelectOnRowClick" AllowFiltering="true" LoadData="@LoadData"
|
||||||
FilterPopupRenderMode="PopupRenderMode.OnDemand" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
|
FilterPopupRenderMode="PopupRenderMode.OnDemand" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
|
||||||
Data="@orderInfos" ColumnWidth="200px" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
|
Data="@orderInfos" ColumnWidth="200px" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
|
||||||
SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@selectedOrderInfos
|
SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@selectedOrderInfos
|
||||||
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
|
<RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
|
||||||
<HeaderTemplate>
|
<HeaderTemplate>
|
||||||
<RadzenCheckBox TabIndex="-1" TriState="false" TValue="bool?" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select all items" }})"
|
<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)))"
|
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)" />
|
Change="@(args => selectedOrderInfos = args == true ? orderInfos.ToList() : null)" />
|
||||||
</HeaderTemplate>
|
</HeaderTemplate>
|
||||||
<Template Context="data">
|
<Template Context="data">
|
||||||
<RadzenCheckBox TabIndex="-1" TriState="false" Value="@(selectedOrderInfos != null && selectedOrderInfos.Contains(data))" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select item" }})"
|
<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); } })" />
|
TValue="bool" Change="@(args => { if (!allowRowSelectOnRowClick) { grid.SelectRow(data); } })" />
|
||||||
</Template>
|
</Template>
|
||||||
</RadzenDataGridColumn>
|
</RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
|
<RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
|
||||||
<RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
|
<RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
|
||||||
<RadzenDataGridColumn Property="OrderNo" Title="单号" Sortable="false" Filterable="false" Width="8rem" />
|
<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.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem">
|
||||||
<RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem" />
|
<Template Context="DetailList">
|
||||||
<RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem" />
|
@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>
|
</Columns>
|
||||||
</RadzenDataGrid>
|
</RadzenDataGrid>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -36,33 +36,57 @@
|
||||||
.rz-gauge .rz-tick-text {
|
.rz-gauge .rz-tick-text {
|
||||||
fill: #ffffff !important;
|
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>
|
</style>
|
||||||
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
|
<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">
|
<RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
|
||||||
<RadzenColumn Size="4">
|
<RadzenColumn Size="2">
|
||||||
|
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
<RadzenColumn Size="8">
|
<RadzenColumn Size="8">
|
||||||
<RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
<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)
|
@if (globalStateService.Operator != null)
|
||||||
{
|
{
|
||||||
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
||||||
<RadzenText onclick="@(()=>{EditPassword(1);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
<RadzenText onclick="@(() => { EditPassword(1); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
|
||||||
|
|
||||||
}
|
}
|
||||||
@if (globalStateService.Reviewer != null)
|
@if (globalStateService.Reviewer != null)
|
||||||
{
|
{
|
||||||
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
||||||
<RadzenText onclick="@(()=>{EditPassword(2);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
<RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
|
||||||
}
|
}
|
||||||
</RadzenColumn>
|
</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(); })" />
|
<RadzenIcon Icon="exit_to_app" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { logout(); })" />
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
|
<RadzenColumn Size="2">
|
||||||
|
|
||||||
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
|
|
||||||
<RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
|
<RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
|
||||||
|
@ -80,17 +104,31 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</RadzenStack>
|
</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%">
|
||||||
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
|
<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%">
|
||||||
@if (globalStateService.Operator != null)
|
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
|
||||||
{
|
@if (globalStateService.Operator != null)
|
||||||
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10))
|
|
||||||
{
|
{
|
||||||
<div class="mask">
|
@if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10))
|
||||||
<RadzenImage Path="images/no_auth.png" />
|
{
|
||||||
</div>
|
<div class="mask">
|
||||||
|
<RadzenImage Path="images/no_auth.png" />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
</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>
|
</RadzenStack>
|
||||||
<RadzenStack Style="height: 100%;width:59%" Gap="20">
|
<RadzenStack Style="height: 100%;width:59%" Gap="20">
|
||||||
|
@ -296,4 +334,15 @@
|
||||||
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
|
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 });
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
@page "/return/record1/{type}"
|
@page "/return/record1/{type}"
|
||||||
@page "/return/record2/{type}"
|
@page "/return/record2/{type}"
|
||||||
@page "/stock/record/{type}"
|
@page "/stock/record/{type}"
|
||||||
|
@using MasaBlazorApp3.Report
|
||||||
|
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
@ -35,6 +36,10 @@
|
||||||
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
|
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
|
||||||
</RadzenColumn>
|
</RadzenColumn>
|
||||||
</RadzenRow>
|
</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>
|
</RadzenStack>
|
||||||
</RadzenFieldset>
|
</RadzenFieldset>
|
||||||
</form>
|
</form>
|
||||||
|
@ -111,7 +116,18 @@
|
||||||
await grid.Reload();
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
EmptyText="无数据"
|
EmptyText="无数据"
|
||||||
Data="@_forecasts"
|
Data="@_forecasts"
|
||||||
AllowColumnResize="true" AllowAlternatingRows="false"
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di)=>{OnUpdatePlanRow(di);})" RowCreate="@((Plan di)=>{OnCreatePlanRow(di);})"
|
SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di) => { OnUpdatePlanRow(di); })" RowCreate="@((Plan di) => { OnCreatePlanRow(di); })"
|
||||||
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn Frozen="true" Title="套餐名称" Property="Name">
|
<RadzenDataGridColumn Frozen="true" Title="套餐名称" Property="Name">
|
||||||
|
@ -96,8 +96,8 @@
|
||||||
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
|
<RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
|
||||||
</Columns>
|
</Columns>
|
||||||
</RadzenDropDownDataGrid>
|
</RadzenDropDownDataGrid>
|
||||||
<RadzenCustomValidator Component="drugName" Validator="@(()=>(planDetails._DrugInfo.DrugId!=null))" Text="请选择药品" Popup=true />
|
<RadzenCustomValidator Component="drugName" Validator="@(() => (planDetails._DrugInfo.DrugId != null))" Text="请选择药品" Popup=true />
|
||||||
<RadzenCustomValidator Component="drugName" Validator="@(()=>ValidatroDrug(planDetails))" Text="套餐中已包含该药品" Popup=true />
|
<RadzenCustomValidator Component="drugName" Validator="@(() => ValidatroDrug(planDetails))" Text="套餐中已包含该药品" Popup=true />
|
||||||
|
|
||||||
</EditTemplate>
|
</EditTemplate>
|
||||||
</RadzenDataGridColumn>
|
</RadzenDataGridColumn>
|
||||||
|
@ -136,6 +136,7 @@
|
||||||
@inject IPlanDao planDao;
|
@inject IPlanDao planDao;
|
||||||
@inject DialogService dialogService;
|
@inject DialogService dialogService;
|
||||||
@inject NotificationService _message
|
@inject NotificationService _message
|
||||||
|
@inject GlobalStateService globalStateService;
|
||||||
|
|
||||||
RadzenDataGrid<Plan> grid;
|
RadzenDataGrid<Plan> grid;
|
||||||
RadzenDataGrid<PlanDetails> PlanDetailsGrid;
|
RadzenDataGrid<PlanDetails> PlanDetailsGrid;
|
||||||
|
@ -218,18 +219,35 @@
|
||||||
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
|
||||||
if (b)
|
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))
|
if (await planDao.DeletePlanInfo(planInfo.Id))
|
||||||
{
|
{
|
||||||
_message.Notify
|
_message.Notify
|
||||||
(
|
(
|
||||||
new NotificationMessage
|
new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Success,
|
Severity = NotificationSeverity.Success,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = $"删除成功",
|
Detail = $"删除成功",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -237,12 +255,12 @@
|
||||||
_message.Notify
|
_message.Notify
|
||||||
(
|
(
|
||||||
new NotificationMessage
|
new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Error,
|
Severity = NotificationSeverity.Error,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "删除失败",
|
Detail = "删除失败",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -306,28 +324,41 @@
|
||||||
);
|
);
|
||||||
if (b)
|
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))
|
if (await planDao.DeletePlanDetail(planDetail))
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Success,
|
Severity = NotificationSeverity.Success,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "删除成功",
|
Detail = "删除成功",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Error,
|
Severity = NotificationSeverity.Error,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "删除失败",
|
Detail = "删除失败",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
await PlanDetailsGrid.Reload();
|
await PlanDetailsGrid.Reload();
|
||||||
|
@ -348,23 +379,23 @@
|
||||||
if (await planDao.UpdatePlanDetail(planDetail))
|
if (await planDao.UpdatePlanDetail(planDetail))
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Success,
|
Severity = NotificationSeverity.Success,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "修改成功",
|
Detail = "修改成功",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Error,
|
Severity = NotificationSeverity.Error,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "修改失败",
|
Detail = "修改失败",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,15 +408,18 @@
|
||||||
{
|
{
|
||||||
planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
|
planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
|
||||||
planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId;
|
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))
|
if (await planDao.AddPlanDetail(planDetail))
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Success,
|
Severity = NotificationSeverity.Success,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "保存成功",
|
Detail = "保存成功",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,12 +427,12 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_message.Notify(new NotificationMessage
|
_message.Notify(new NotificationMessage
|
||||||
{
|
{
|
||||||
Severity = NotificationSeverity.Error,
|
Severity = NotificationSeverity.Error,
|
||||||
Summary = "提示",
|
Summary = "提示",
|
||||||
Detail = "保存失败",
|
Detail = "保存失败",
|
||||||
Duration = 4000
|
Duration = 4000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -411,9 +445,9 @@
|
||||||
async Task InsertRow()
|
async Task InsertRow()
|
||||||
{
|
{
|
||||||
var detail = new Pojo.PlanDetails()
|
var detail = new Pojo.PlanDetails()
|
||||||
{
|
{
|
||||||
PlanId = SelectedPlan.FirstOrDefault().Id
|
PlanId = SelectedPlan.FirstOrDefault().Id
|
||||||
};
|
};
|
||||||
SelectedPlan.FirstOrDefault()._PlanDetails.Add(detail);
|
SelectedPlan.FirstOrDefault()._PlanDetails.Add(detail);
|
||||||
await PlanDetailsGrid.InsertRow(detail);
|
await PlanDetailsGrid.InsertRow(detail);
|
||||||
|
|
||||||
|
|
|
@ -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">
|
<RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" Sortable="false" />
|
<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>
|
</Columns>
|
||||||
</RadzenDropDownDataGrid>
|
</RadzenDropDownDataGrid>
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +1,105 @@
|
||||||
@page "/stock/list"
|
@page "/stock/list"
|
||||||
|
@using MasaBlazorApp3.Report
|
||||||
<style>
|
<style>
|
||||||
@@keyframes shake {
|
@@keyframes shake {
|
||||||
0% { opacity:1;color:red; }
|
0% {
|
||||||
25%{opacity:1;color:orange;}
|
opacity: 1;
|
||||||
50% { opacity:0;color:yellow;}
|
color: red;
|
||||||
75%{opacity:1;color:crimson;}
|
}
|
||||||
100% { 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 {
|
.rz-custom-header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shaky-text {
|
.shaky-text {
|
||||||
animation: shake 2s infinite ease-in-out;
|
animation: shake 2s infinite ease-in-out;
|
||||||
/* 你可以根据需要调整动画的持续时间和迭代次数 */
|
/* 你可以根据需要调整动画的持续时间和迭代次数 */
|
||||||
transition:color 0.5s linear,opacity 0.5s linear;
|
transition: color 0.5s linear,opacity 0.5s linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</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"
|
<RadzenDataGrid @ref="grid"
|
||||||
IsLoading="@isLoading"
|
IsLoading="@isLoading"
|
||||||
RowRender="@RowRender"
|
RowRender="@RowRender"
|
||||||
EmptyText="无数据"
|
EmptyText="无数据"
|
||||||
Data="@_forecasts"
|
Data="@_forecasts"
|
||||||
AllowColumnResize="true" AllowAlternatingRows="false"
|
AllowColumnResize="true" AllowAlternatingRows="false"
|
||||||
SelectionMode="DataGridSelectionMode.Single"
|
SelectionMode="DataGridSelectionMode.Single"
|
||||||
ExpandMode="DataGridExpandMode.Multiple">
|
ExpandMode="DataGridExpandMode.Multiple">
|
||||||
<HeaderTemplate>
|
@* <HeaderTemplate>
|
||||||
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
<RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
|
||||||
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
|
<RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
|
||||||
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
|
<RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
|
||||||
</RadzenRow>
|
</RadzenRow>
|
||||||
</HeaderTemplate>
|
</HeaderTemplate> *@
|
||||||
<Template Context="di">
|
<Template Context="di">
|
||||||
<RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
|
<RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
|
||||||
<Columns>
|
<Columns>
|
||||||
|
@ -50,9 +116,11 @@
|
||||||
@{
|
@{
|
||||||
DateTime dateTime;
|
DateTime dateTime;
|
||||||
bool success = DateTime.TryParse(s.EffDate, out dateTime);
|
bool success = DateTime.TryParse(s.EffDate, out dateTime);
|
||||||
if(success&&dateTime<=DateTime.Now.AddMonths(3))
|
if (success && dateTime <= DateTime.Now.AddMonths(3))
|
||||||
{
|
{
|
||||||
@s.EffDate<p class="shaky-text">近效期药品!</p>
|
@s.EffDate
|
||||||
|
|
||||||
|
<p class="shaky-text">近效期药品!</p>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -67,11 +135,13 @@
|
||||||
<Columns>
|
<Columns>
|
||||||
<RadzenDataGridColumn Frozen="true" Width="200px" Title="药品名称" Property="DrugName"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Frozen="true" Width="200px" Title="药品名称" Property="DrugName"></RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="规格" Property="DrugSpec"></RadzenDataGridColumn>
|
<RadzenDataGridColumn Title="规格" Property="DrugSpec"></RadzenDataGridColumn>
|
||||||
<RadzenDataGridColumn Title="总库存" Property="StockQuantity">
|
<RadzenDataGridColumn Title="总库存" Property="StockQuantity">
|
||||||
<Template Context="s">
|
<Template Context="s">
|
||||||
@if(s.StockQuantity<10)
|
@if (s.StockQuantity < 10)
|
||||||
{
|
{
|
||||||
@s.StockQuantity<p class="shaky-text">库存预警!</p>
|
@s.StockQuantity
|
||||||
|
|
||||||
|
<p class="shaky-text">库存预警!</p>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -94,7 +164,9 @@
|
||||||
DateTime start;
|
DateTime start;
|
||||||
DateTime end;
|
DateTime end;
|
||||||
|
|
||||||
|
string drugName;
|
||||||
|
|
||||||
|
IEnumerable<DrugInfo> drugInfo;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
@ -104,6 +176,9 @@
|
||||||
var result = await drugInfoDao.GetAllDrugAndStock();
|
var result = await drugInfoDao.GetAllDrugAndStock();
|
||||||
// Update the Data property
|
// Update the Data property
|
||||||
_forecasts = result;
|
_forecasts = result;
|
||||||
|
|
||||||
|
drugInfo = await drugInfoDao.GetAllDrug();
|
||||||
|
|
||||||
isLoading = false;
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,5 +50,7 @@ namespace MasaBlazorApp3.Pojo
|
||||||
//手术室药箱中的库存总数
|
//手术室药箱中的库存总数
|
||||||
[Column("stock_quantity")]
|
[Column("stock_quantity")]
|
||||||
public int TotalQuantity { get; set; }
|
public int TotalQuantity { get; set; }
|
||||||
|
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(PlanDetails.PlanId))]
|
||||||
|
public List<PlanDetails> _PlanDetails { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,14 @@ namespace MasaBlazorApp3.Pojo
|
||||||
public string Manufactory { get; set; }
|
public string Manufactory { get; set; }
|
||||||
|
|
||||||
[Column("pack_unit")]
|
[Column("pack_unit")]
|
||||||
public string PackUnit { get; set;}
|
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))]
|
[Association(ThisKey = nameof(DrugId), OtherKey = nameof(ChannelStock.DrugId))]
|
||||||
|
|
|
@ -13,20 +13,28 @@ namespace MasaBlazorApp3.Pojo
|
||||||
{
|
{
|
||||||
[Column("Id")]
|
[Column("Id")]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
//操作时间
|
||||||
[Column("optDate")]
|
[Column("optDate")]
|
||||||
public DateTime optDate { get; set; }
|
public DateTime optDate { get; set; }
|
||||||
|
//交班操作人
|
||||||
[Column("FromOperator")]
|
[Column("FromOperator")]
|
||||||
public string FromOperator { get; set; }
|
public string FromOperator { get; set; }
|
||||||
|
//交班审核人
|
||||||
[Column("FromRviewer")]
|
[Column("FromRviewer")]
|
||||||
public string FromRviewer { get; set; }
|
public string FromRviewer { get; set; }
|
||||||
|
//接班操作人
|
||||||
[Column("ToOperator")]
|
[Column("ToOperator")]
|
||||||
public string ToOperator { get; set; }
|
public string ToOperator { get; set; }
|
||||||
|
//接班审核人
|
||||||
[Column("ToReviewer")]
|
[Column("ToReviewer")]
|
||||||
public string ToReviewer { get; set; }
|
public string ToReviewer { get; set; }
|
||||||
|
//接班时间
|
||||||
[Column("ToDate")]
|
[Column("ToDate")]
|
||||||
public DateTime ToDate { get; set; }
|
public DateTime ToDate { get; set; }
|
||||||
|
//当班状态(0当前值班,1已交班)
|
||||||
[Column("State")]
|
[Column("State")]
|
||||||
public string State { get; set; }
|
public string State { get; set; }
|
||||||
|
//操作状态(0新增,1修改)
|
||||||
[Column("optState")]
|
[Column("optState")]
|
||||||
public string optState { get; set; }
|
public string optState { get; set; }
|
||||||
[Column("machine_id")]
|
[Column("machine_id")]
|
||||||
|
|
|
@ -72,7 +72,7 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("eff_date")]
|
[Column("eff_date")]
|
||||||
public DateTime? EffDate { get; set; }
|
public DateTime? EffDate { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 出库入库类型(1入库2出库31还药32还空瓶)
|
/// 出库入库类型(1入库2出库31还药32还空瓶,21药箱移出移入,69药箱药品替换,55药箱套餐绑定解绑)
|
||||||
///</summary>
|
///</summary>
|
||||||
[Column("type")]
|
[Column("type")]
|
||||||
public int Type { get; set; }
|
public int Type { get; set; }
|
||||||
|
|
|
@ -147,15 +147,15 @@ namespace MasaBlazorApp3.Pojo
|
||||||
///</summary>
|
///</summary>
|
||||||
[Column("win_no")]
|
[Column("win_no")]
|
||||||
public int WinNo { get; set; } = 0;
|
public int WinNo { get; set; } = 0;
|
||||||
/// <summary>
|
///// <summary>
|
||||||
///
|
/////
|
||||||
/// 默认值: 0
|
///// 默认值: 0
|
||||||
///</summary>
|
/////</summary>
|
||||||
[Column("state")]
|
//[Column("state")]
|
||||||
public int state { get; set; } = 0;
|
//public int state { get; set; } = 0;
|
||||||
|
|
||||||
[Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
|
[Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
|
||||||
public OrderDetail Detail { get; set; } = new();
|
public List<OrderDetail> DetailList { get; set; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否选中
|
/// 是否选中
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace MasaBlazorApp3.Pojo
|
||||||
[Column("Drug_Id")]
|
[Column("Drug_Id")]
|
||||||
public string DrugId { get; set; }
|
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();
|
public DrugInfo _DrugInfo { get; set; } = new();
|
||||||
//添加时间
|
//添加时间
|
||||||
[Column("AddTime")]
|
[Column("AddTime")]
|
||||||
|
@ -33,9 +33,13 @@ namespace MasaBlazorApp3.Pojo
|
||||||
public int UseState { get; set; }
|
public int UseState { get; set; }
|
||||||
//操作人
|
//操作人
|
||||||
[Column("operatorUser")]
|
[Column("operatorUser")]
|
||||||
public int OperatorUser { get; set; }
|
public string OperatorUser { get; set; }
|
||||||
//审核人
|
//审核人
|
||||||
[Column("reviewerUser")]
|
[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; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,6 +177,12 @@ namespace MasaBlazorApp3.Pojo
|
||||||
PremissionName = "药品标定",
|
PremissionName = "药品标定",
|
||||||
PremissionPath = "/stock/biaoDing"
|
PremissionPath = "/stock/biaoDing"
|
||||||
});
|
});
|
||||||
|
k.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 47,
|
||||||
|
PremissionName = "交接班列表",
|
||||||
|
PremissionPath = "/stock/Change"
|
||||||
|
});
|
||||||
Premission x = new Premission
|
Premission x = new Premission
|
||||||
{
|
{
|
||||||
Id = 5,
|
Id = 5,
|
||||||
|
@ -216,40 +222,93 @@ namespace MasaBlazorApp3.Pojo
|
||||||
PremissionPath = "/manage/setting/Fridge"
|
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 = "套餐管理",
|
PremissionName = "套餐管理",
|
||||||
PremissionPath = "/Box/Plan"
|
PremissionPath = "/Box/Plan"
|
||||||
});
|
});
|
||||||
x.AddChild(new Premission()
|
b.AddChild(new Premission()
|
||||||
{
|
{
|
||||||
Id = 55,
|
Id = 62,
|
||||||
PremissionName = "绑定药箱",
|
PremissionName = "绑定药箱",
|
||||||
PremissionPath = "/Box/BoxBindings"
|
PremissionPath = "/Box/BoxBindings"
|
||||||
});
|
});
|
||||||
x.AddChild(new Premission()
|
b.AddChild(new Premission()
|
||||||
{
|
{
|
||||||
Id = 56,
|
Id = 63,
|
||||||
PremissionName = "药箱核对",
|
PremissionName = "药箱核对",
|
||||||
|
//PremissionName = "盘点交接",
|
||||||
PremissionPath = "/Box/Check"
|
PremissionPath = "/Box/Check"
|
||||||
});
|
});
|
||||||
x.AddChild(new Premission()
|
b.AddChild(new Premission()
|
||||||
{
|
{
|
||||||
Id = 57,
|
Id = 66,
|
||||||
PremissionName = "药箱加药",
|
PremissionName = "药箱加药",
|
||||||
|
//PremissionPath = "/stock/checkRecord"
|
||||||
PremissionPath = "/Box/BoxAdd"
|
PremissionPath = "/Box/BoxAdd"
|
||||||
});
|
});
|
||||||
x.AddChild(new Premission()
|
b.AddChild(new Premission()
|
||||||
{
|
{
|
||||||
Id = 58,
|
Id = 65,
|
||||||
PremissionName = "药箱入库",
|
PremissionName = "药箱入库",
|
||||||
PremissionPath = "/Box/BoxAddBox"
|
PremissionPath = "/Box/BoxAddBox"
|
||||||
});
|
});
|
||||||
|
b.AddChild(new Premission()
|
||||||
|
{
|
||||||
|
Id = 66,
|
||||||
|
PremissionName = "药箱库存",
|
||||||
|
PremissionPath = "/Box/BoxStock"
|
||||||
|
});
|
||||||
list.Add(q);
|
list.Add(q);
|
||||||
list.Add(j);
|
list.Add(j);
|
||||||
list.Add(h);
|
list.Add(h);
|
||||||
list.Add(k);
|
list.Add(k);
|
||||||
|
list.Add(b);
|
||||||
x.AddChild(set);
|
x.AddChild(set);
|
||||||
list.Add(x);
|
list.Add(x);
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,10 @@ internal class Program
|
||||||
//药品批次
|
//药品批次
|
||||||
appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
|
appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
|
||||||
|
|
||||||
|
|
||||||
|
//交接班记录
|
||||||
|
appBuilder.Services.AddScoped<IHkcChangeShiftsDao, HkcChangeShiftsDao>();
|
||||||
|
//GlobalStateService.connStr = config.GetValue<String>("connectionStrings");
|
||||||
var app = appBuilder.Build();
|
var app = appBuilder.Build();
|
||||||
app.MainWindow
|
app.MainWindow
|
||||||
.SetHeight(768)
|
.SetHeight(768)
|
||||||
|
|
|
@ -31,8 +31,8 @@ namespace MasaBlazorApp3.Report
|
||||||
Report.PrintPreview(true);
|
Report.PrintPreview(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"Version":"6.8.5.2",
|
"Version":"6.8.1.1",
|
||||||
"Font":{
|
"Font":{
|
||||||
"Name":"宋体",
|
"Name":"宋体",
|
||||||
"Size":105000,
|
"Size":105000,
|
||||||
|
@ -17,8 +17,6 @@
|
||||||
"CenterView":true,
|
"CenterView":true,
|
||||||
"AppendBlankRow":true,
|
"AppendBlankRow":true,
|
||||||
"Recordset":{
|
"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":[
|
"Field":[
|
||||||
{
|
{
|
||||||
"Name":"日期",
|
"Name":"日期",
|
||||||
|
@ -34,11 +32,6 @@
|
||||||
"Name":"批号",
|
"Name":"批号",
|
||||||
"DBFieldName":"manuNo"
|
"DBFieldName":"manuNo"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Name":"上次批次结存",
|
|
||||||
"Type":"Integer",
|
|
||||||
"DBFieldName":"beforeManuQuan"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Name":"入库数量",
|
"Name":"入库数量",
|
||||||
"Type":"Integer",
|
"Type":"Integer",
|
||||||
|
@ -49,11 +42,6 @@
|
||||||
"Type":"Integer",
|
"Type":"Integer",
|
||||||
"DBFieldName":"outQuantity"
|
"DBFieldName":"outQuantity"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Name":"批号结存",
|
|
||||||
"Type":"Integer",
|
|
||||||
"DBFieldName":"manuQuantity"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Name":"总结存",
|
"Name":"总结存",
|
||||||
"Type":"Integer",
|
"Type":"Integer",
|
||||||
|
@ -65,7 +53,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"复核人",
|
"Name":"复核人",
|
||||||
"DBFieldName":"reviewName"
|
"DBFieldName":"reviewerName"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"药品名称",
|
"Name":"药品名称",
|
||||||
|
@ -94,15 +82,12 @@
|
||||||
"DBFieldName":"effDate"
|
"DBFieldName":"effDate"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"sign1",
|
"Name":"drugId",
|
||||||
"Type":"Binary"
|
"DBFieldName":"drug_Id"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"sign2",
|
"Name":"凭证号",
|
||||||
"Type":"Binary"
|
"DBFieldName":"invoiceId"
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name":"drugId"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -112,7 +97,7 @@
|
||||||
"Width":1.77271
|
"Width":1.77271
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"操作类型",
|
"Name":"凭证号",
|
||||||
"Width":2.19604
|
"Width":2.19604
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -121,7 +106,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"有效期",
|
"Name":"有效期",
|
||||||
"Width":2.43417
|
"Width":2.40771
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name":"入库数量",
|
"Name":"入库数量",
|
||||||
|
@ -157,20 +142,14 @@
|
||||||
"ColumnContentCell":[
|
"ColumnContentCell":[
|
||||||
{
|
{
|
||||||
"Column":"日期",
|
"Column":"日期",
|
||||||
|
"WordWrap":true,
|
||||||
"TextAlign":"MiddleCenter",
|
"TextAlign":"MiddleCenter",
|
||||||
|
"ShrinkFontToFit":true,
|
||||||
"DataField":"日期"
|
"DataField":"日期"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Column":"操作类型",
|
"Column":"凭证号",
|
||||||
"FreeCell":true,
|
"DataField":"凭证号"
|
||||||
"Control":[
|
|
||||||
{
|
|
||||||
"Type":"StaticBox",
|
|
||||||
"Name":"StaticBox10",
|
|
||||||
"Dock":"Fill",
|
|
||||||
"TextAlign":"MiddleCenter"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Column":"批号",
|
"Column":"批号",
|
||||||
|
@ -228,11 +207,10 @@
|
||||||
"FreeCell":true,
|
"FreeCell":true,
|
||||||
"Control":[
|
"Control":[
|
||||||
{
|
{
|
||||||
"Type":"StaticBox",
|
"Type":"FieldBox",
|
||||||
"Name":"StaticBox6",
|
"Name":"FieldBox14",
|
||||||
"Dock":"Fill",
|
"Dock":"Fill",
|
||||||
"TextAlign":"MiddleCenter",
|
"TextAlign":"MiddleCenter"
|
||||||
"Text":"药库"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -241,11 +219,10 @@
|
||||||
"FreeCell":true,
|
"FreeCell":true,
|
||||||
"Control":[
|
"Control":[
|
||||||
{
|
{
|
||||||
"Type":"StaticBox",
|
"Type":"FieldBox",
|
||||||
"Name":"StaticBox7",
|
"Name":"FieldBox15",
|
||||||
"Dock":"Fill",
|
"Dock":"Fill",
|
||||||
"TextAlign":"MiddleCenter",
|
"TextAlign":"MiddleCenter"
|
||||||
"Text":"门诊药房"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -269,7 +246,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"GroupTitle":false,
|
"GroupTitle":false,
|
||||||
"Column":"操作类型",
|
"Column":"凭证号",
|
||||||
"Font":{
|
"Font":{
|
||||||
"Name":"宋体",
|
"Name":"宋体",
|
||||||
"Size":105000,
|
"Size":105000,
|
||||||
|
@ -394,6 +371,7 @@
|
||||||
"Name":"Group1",
|
"Name":"Group1",
|
||||||
"ByFields":"drugId",
|
"ByFields":"drugId",
|
||||||
"GroupHeader":{
|
"GroupHeader":{
|
||||||
|
"NewPage":"Before",
|
||||||
"PrintGridBorder":false,
|
"PrintGridBorder":false,
|
||||||
"RepeatOnPage":true,
|
"RepeatOnPage":true,
|
||||||
"Control":[
|
"Control":[
|
||||||
|
|
|
@ -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": {
|
"finger": {
|
||||||
"ip": "192.168.50.201",
|
"ip": "192.168.50.59",
|
||||||
"port": 4370,
|
"port": 4370,
|
||||||
"type": 2
|
"type": 2
|
||||||
},
|
},
|
||||||
|
@ -15,9 +15,9 @@
|
||||||
"boxMachineId": "DM5"
|
"boxMachineId": "DM5"
|
||||||
},
|
},
|
||||||
"port": {
|
"port": {
|
||||||
"drawerPortPath": "COM1",
|
"drawerPortPath": "COM2",
|
||||||
"drawerProtocol": 485,
|
"drawerProtocol": 485,
|
||||||
"scanCodePortPath": "COM8",
|
"scanCodePortPath": "COM1",
|
||||||
"canBusPortPath": "COM31",
|
"canBusPortPath": "COM31",
|
||||||
"canBusExsit": true,
|
"canBusExsit": true,
|
||||||
"doorAddr": 0,
|
"doorAddr": 0,
|
||||||
|
|
Loading…
Reference in New Issue