修改更新

This commit is contained in:
马巧 2025-07-05 10:07:33 +08:00
parent ff96d4e676
commit 396fb8743f
27 changed files with 1579 additions and 785 deletions

View File

@ -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

View File

@ -54,8 +54,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
//手术室药箱入库 //手术室药箱入库
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<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip);

View File

@ -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>

View File

@ -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);
} }
} }

View File

@ -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)
{ {
@ -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++)
@ -960,7 +961,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
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 //补药完成
@ -980,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(boxChannelList.DrugId)&&p.DrugId== 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 == boxChannelList.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 && 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"))
{ {
@ -1080,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
{ {
@ -1093,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();
// 当前药品的库存总量 // 当前药品的库存总量
@ -1106,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;
@ -1168,6 +1119,98 @@ 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) public async Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip)
@ -1176,7 +1219,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.InnerJoin( .InnerJoin(
_connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)), _connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)),
(pd, cl) => pd.PlanId.ToString() == cl.DrugId, (pd, cl) => pd.PlanId.ToString() == cl.DrugId,
(pd, cl) => pd); (pd, cl) => pd).Where(pd=>pd.UseState==1);
@ -1226,7 +1269,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
try 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); 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);
@ -1261,7 +1304,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
/// <returns></returns> /// <returns></returns>
public async Task<int[]> GetDrawerNum(ChannelStock channelStock) 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) 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(); .GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
return ints; return ints;
} }
@ -1337,7 +1380,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
InvoiceId = stockList[i].Id.ToString(), InvoiceId = stockList[i].Id.ToString(),
}); });
if(recordId <= 0) if (recordId <= 0)
{ {
logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}"); logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag = false; flag = false;
@ -1359,7 +1402,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
if (r <= 0) if (r <= 0)
{ {
logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}"); logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag= false; flag = false;
break; break;
} }
} }
@ -1381,7 +1424,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
if (mid <= 0) if (mid <= 0)
{ {
logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}"); logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo}药品ID{stockList[i].DrugId}");
flag= false; flag = false;
break; break;
} }
@ -1447,7 +1490,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
} }
} }
//手术室药箱移出药品完成 //手术室药箱移出药品完成
public async Task<bool> BoxRemoveFinish(ChannelStock stock,int SelectedDrawerNo,int removeQuantity) public async Task<bool> BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity)
{ {
try try
{ {
@ -1472,14 +1515,14 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
//如果没有该批次的药品,先查询是否有未绑批次的,有则更新批次信息,无则新增一条记录 //如果没有该批次的药品,先查询是否有未绑批次的,有则更新批次信息,无则新增一条记录
ChannelStock inDrugChannelStock = _connection.ChannelStock.AsQueryable() ChannelStock inDrugChannelStock = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId ) .Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId)
.FirstOrDefault(); .FirstOrDefault();
if (inDrugChannelStock != null) if (inDrugChannelStock != null)
{ {
int mid= _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id) int mid = _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id)
.Set(cs => cs.Quantity, removeQuantity) .Set(cs => cs.Quantity, removeQuantity)
.Set(cs=>cs.ManuNo, stock.ManuNo) .Set(cs => cs.ManuNo, stock.ManuNo)
.Set(cs=>cs.EffDate,stock.EffDate) .Set(cs => cs.EffDate, stock.EffDate)
.Update(); .Update();
if (mid <= 0) if (mid <= 0)
{ {
@ -1522,10 +1565,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
else else
{ {
int updateTotalQuantity = 0; int updateTotalQuantity = 0;
int updateMoveToTotalQuantity=0; int updateMoveToTotalQuantity = 0;
//修改总库存数 //修改总库存数
ChannelList channelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == stock.DrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault(); ChannelList channelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == stock.DrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault();
if(channelList!=null) if (channelList != null)
{ {
updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == channelList.Id) updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == channelList.Id)
.Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity) .Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity)
@ -1539,7 +1582,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.Set(cl => cl.TotalQuantity, channelList.TotalQuantity + removeQuantity) .Set(cl => cl.TotalQuantity, channelList.TotalQuantity + removeQuantity)
.Update(); .Update();
} }
if(updateTotalQuantity>0&&updateMoveToTotalQuantity > 0) if (updateTotalQuantity > 0 && updateMoveToTotalQuantity > 0)
{ {
flag = true; flag = true;
} }

View File

@ -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,12 +624,56 @@ 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();
}
}
}
//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(); // .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>()
{ {
@ -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,25 +721,34 @@ 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 for (int j = 0; j < oi.DetailList.Count; j++)
{
ChannelStock cs = _connection.ChannelStock.AsQueryable()
.Where(cs => cs.DrugId == oi.DetailList[j].DrugId
&& cs.ManuNo == oi.DetailList[j].SetManuNo
// && cs.EffDate == oi._OrderDetail.SetEffDate // && cs.EffDate == oi._OrderDetail.SetEffDate
&& cs.MachineId.Equals(_setting.boxMachineId) && cs.MachineId.Equals(_setting.boxMachineId)
&& cs.DrawerNo == drawerNo && cs.DrawerNo == drawerNo
&& cs.Quantity >= oi.Detail.Quantity).First(); && cs.Quantity >= oi.DetailList[j].Quantity).First();
if (cs == null) if (cs == null)
{ {
logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存"); logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存");
continue; continue;
} }
cs.Quantity = cs.Quantity - oi.Detail.Quantity; cs.Quantity = cs.Quantity - oi.DetailList[j].Quantity;
//cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity; //cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.Detail.Quantity}"); logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}");
// 更新数据 库存信息 // 更新数据 库存信息
_connection.Update(cs); _connection.Update(cs);
//更新ChannelList对应的总库存
ChannelList channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs.MachineId) && cl.Id.Equals(cs.ListId) && cl.DrawerNo.Equals(cs.DrawerNo)).FirstOrDefault();
channelList.TotalQuantity = channelList.TotalQuantity - oi.DetailList[j].Quantity;
_connection.Update(channelList);
// 获取更新完库存后的药品库存 // 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable() List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
.Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId)) .Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
@ -709,6 +756,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
.Where(it => it.ManuNo.Equals(cs.ManuNo)) .Where(it => it.ManuNo.Equals(cs.ManuNo))
.Where(it => it.DrawerType == 1) .Where(it => it.DrawerType == 1)
.ToList(); .ToList();
if (cs != null) if (cs != null)
{ {
_connection.Insert(new MachineRecord() _connection.Insert(new MachineRecord()
@ -722,7 +770,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
Operator = _globalStateService.Operator?.Id, Operator = _globalStateService.Operator?.Id,
Reviewer = _globalStateService.Reviewer?.Id, Reviewer = _globalStateService.Reviewer?.Id,
OperationTime = DateTime.Now, OperationTime = DateTime.Now,
Quantity = oi.Detail.Quantity, Quantity = oi.DetailList[j].Quantity,
Type = 2, Type = 2,
InvoiceId = oi.OrderNo InvoiceId = oi.OrderNo
//, StockQuantity = nowChannels.Sum(it => it.Quantity) //, StockQuantity = nowChannels.Sum(it => it.Quantity)
@ -730,21 +778,21 @@ namespace MasaBlazorApp3.DataAccess.Impl
//查询上一条账册中的空瓶数 //查询上一条账册中的空瓶数
AccountBookG2 accountBookEmpty =_connection.AccountBookG2.AsQueryable() AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable()
.Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.MachineId.Equals(_setting.machineId))
.Where(ab => ab.Type == 1 || ab.Type == 2) .Where(ab => ab.Type == 1 || ab.Type == 2)
.Where(ab => ab.DrugId == oi.Detail.DrugId) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
.Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First(); .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
//保存账册 //保存账册
int iInsertResult = _connection.Insert(new AccountBookG2() int iInsertResult = _connection.Insert(new AccountBookG2()
{ {
DrugId = oi.Detail.DrugId, DrugId = oi.DetailList[j].DrugId,
Type = 2, Type = 2,
Department = oi.DeptName, Department = oi.DeptName,
OrderNo = oi.OrderNo, OrderNo = oi.OrderNo,
ManuNo = cs.ManuNo, ManuNo = cs.ManuNo,
EffDate = cs.EffDate, EffDate = cs.EffDate,
OutQuantity = oi.Detail.Quantity, OutQuantity = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id, UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id, UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId, MachineId = _setting.machineId,
@ -752,33 +800,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
InvoiceNo = oi.OrderNo, InvoiceNo = oi.OrderNo,
ManuStock = nowChannels.Sum(it => it.Quantity), ManuStock = nowChannels.Sum(it => it.Quantity),
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.Detail.Quantity, TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailList[j].Quantity,
ShoushuJian = drawerNo.ToString() ShoushuJian = drawerNo.ToString()
}); });
//修改凌晨生成的日结存与总结存数据 //修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable() AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
.Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.MachineId.Equals(_setting.machineId))
.Where(ab => ab.Type == 3) .Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == oi.Detail.DrugId) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
.Where(ab => ab.ManuNo == cs.ManuNo) .Where(ab => ab.ManuNo == cs.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null) if (accountBookG2Day != null)
{ {
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity; accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity;
_connection.Update(accountBookG2Day); _connection.Update(accountBookG2Day);
} }
else else
{ {
//生成日结存时可能没有该库位的绑定信息,需要写入日结存 //生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult =_connection.Insert(new AccountBookG2() int iDayResult = _connection.Insert(new AccountBookG2()
{ {
DrugId = oi.Detail.DrugId, DrugId = oi.DetailList[j].DrugId,
Type = 3, Type = 3,
ManuNo = cs.ManuNo, ManuNo = cs.ManuNo,
EffDate = cs.EffDate, EffDate = cs.EffDate,
YQuantity = 0, YQuantity = 0,
ManuStock = oi.Detail.Quantity, ManuStock = oi.DetailList[j].Quantity,
TotalStock = oi.Detail.Quantity, TotalStock = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id, UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id, UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId, MachineId = _setting.machineId,
@ -787,18 +835,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
}); });
if (iDayResult <= 0) if (iDayResult <= 0)
{ {
logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}"); logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
} }
} }
//修改凌晨生成的日结存与总结存数据 //修改凌晨生成的日结存与总结存数据
AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable() AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable()
.Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.MachineId.Equals(_setting.machineId))
.Where(ab => ab.Type == 4) .Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == oi.Detail.DrugId) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null) if (accountBookG2Total != null)
{ {
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity; accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity;
_connection.Update(accountBookG2Total); _connection.Update(accountBookG2Total);
} }
else else
@ -806,11 +854,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
//生成总结存时可能没有该库位的绑定信息,需要写入总结存 //生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = _connection.Insert(new AccountBookG2() int iTotalResult = _connection.Insert(new AccountBookG2()
{ {
DrugId = oi.Detail.DrugId, DrugId = oi.DetailList[j].DrugId,
Type = 4, Type = 4,
YQuantity = 0, YQuantity = 0,
ManuStock = oi.Detail.Quantity, ManuStock = oi.DetailList[j].Quantity,
TotalStock = oi.Detail.Quantity, TotalStock = oi.DetailList[j].Quantity,
UserId1 = _globalStateService.Operator?.Id, UserId1 = _globalStateService.Operator?.Id,
UserId2 = _globalStateService.Reviewer?.Id, UserId2 = _globalStateService.Reviewer?.Id,
MachineId = _setting.machineId, MachineId = _setting.machineId,
@ -819,11 +867,14 @@ namespace MasaBlazorApp3.DataAccess.Impl
}); });
if (iTotalResult <= 0) if (iTotalResult <= 0)
{ {
logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}"); logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}");
} }
} }
} }
}
}
} }
return true; return true;

View File

@ -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,28 +188,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
{ {
_connection.BeginTransaction(); _connection.BeginTransaction();
bool flag = false; bool flag = false;
//查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
int hasCount = _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.machineId).Count();
if (hasCount > 0)
{
return flag;
}
else
{
logger.Error($"删除套餐{planId}"); logger.Error($"删除套餐{planId}");
//查询该套餐下是否有药品,如果有则一并删除 //查询该套餐下是否有药品,如果有则一并删除
int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count(); int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
int pdResult = 1; int pdResult = 1;
if (iHasPd > 0) if (iHasPd > 0)
{ {
pdResult = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).Update(); pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync();
} }
int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update(); int pResult = await _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).UpdateAsync();
if (pdResult > 0 && pResult > 0)
//如果套餐下有绑药且库存为0的也将绑定药品信息一并删除
List<string> listIds =await _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString()).Select(cl => cl.Id).ToListAsync();
int iDelResult = 1;
int iDelChannelListResult = 1;
if (listIds != null && listIds.Count > 0)
{
//删除channelStock表中的绑定药品
iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete();
_connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl=>cl.DrugId,"").Update();
}
if (pdResult > 0 && pResult > 0 && iDelResult > 0 && iDelChannelListResult > 0)
{ {
flag = true; 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)
{ {

View File

@ -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;
}
}
} }
} }

View File

@ -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>

View File

@ -124,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 }
); );

View File

@ -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>
}
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>
<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="@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" /> <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)
{
isLoading = true;
async Task OpenDrawer() data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip);
{ // Update the Data property
this.status = 1; isLoading = false;
// 解析需要打开的抽屉列表 }
List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList(); // async Task OpenDrawer()
// {
// this.status = 1;
// // 解析需要打开的抽屉列表
// List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
// 根据抽屉类型来决定打开前是否需要查询数量 // // 根据抽屉类型来决定打开前是否需要查询数量
var promiseUtil = new PromiseUtil<int>(); // var promiseUtil = new PromiseUtil<int>();
await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) => // await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
{ // {
var orderTakeVo = drawerNos[options._data]; // var orderTakeVo = drawerNos[options._data];
var drawerNo = orderTakeVo.ChannelStock.DrawerNo; // var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
try // try
{ // {
if (this.status == 0) // if (this.status == 0)
{ // {
stop(); // stop();
} // }
// 开启抽屉 // // 开启抽屉
else if (this.status == 1) // else if (this.status == 1)
{ // {
if (orderTakeVo.Status == 0) // if (orderTakeVo.Status == 0)
{ // {
// 判断是否为单支抽屉 // // 判断是否为单支抽屉
if (setting.Value.single.Contains(drawerNo)) // if (setting.Value.single.Contains(drawerNo))
{ // {
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); // orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】"); // logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray()); // 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++) // for (int i = 0; i < data.Count; i++)
{ // {
if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo)) // if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
{ // {
if (data[i].ChannelStock.BoardType.ToString().Contains("6")) // if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
{ // {
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); // PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(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)}】"); // logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
await Task.Delay(200); // await Task.Delay(200);
} // }
//是药盒抽屉开药盒 // //是药盒抽屉开药盒
if (data[i].ChannelStock.BoardType.ToString().Contains("3")) // if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
{ // {
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo); // await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
await Task.Delay(200); // await Task.Delay(200);
} // }
DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo); // DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
} // }
} // }
var b = await PortUtil.OpenDrawerStatus(drawerNo); // var b = await PortUtil.OpenDrawerStatus(drawerNo);
if (b) // if (b)
{ // {
PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); // PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药"); // PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
orderTakeVo.Status = 1; // orderTakeVo.Status = 1;
next(); // next();
} // }
else // else
{ // {
_message.Notify( // _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 } // new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
); // );
logger.Info($"抽屉打开失败"); // logger.Info($"抽屉打开失败");
PortUtil.AllLightOff(); // PortUtil.AllLightOff();
RestData(); // RestData();
stop(); // stop();
} // }
} // }
// 检测状态 // // 检测状态
else if (orderTakeVo.Status == 1) // else if (orderTakeVo.Status == 1)
{ // {
// 查询抽屉是否为关闭状态 // // 查询抽屉是否为关闭状态
var b = await PortUtil.CheckDrawerStatus2(drawerNo); // var b = await PortUtil.CheckDrawerStatus2(drawerNo);
// 关闭则改变状态并终止循环 // // 关闭则改变状态并终止循环
if (b) // if (b)
{ // {
data.ForEach(cl => // data.ForEach(cl =>
{ // {
if (cl.ChannelStock.DrawerNo == drawerNo) // if (cl.ChannelStock.DrawerNo == drawerNo)
{ // {
cl.GetQuantity = cl.Quantity; // cl.GetQuantity = cl.Quantity;
} // }
}); // });
orderTakeVo.Status = 2; // orderTakeVo.Status = 2;
PortUtil.AllLightOff(); // PortUtil.AllLightOff();
if (options._data == drawerNos.Count - 1) // if (options._data == drawerNos.Count - 1)
{ // {
PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); // PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); // PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); // PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
this.status = 2; // this.status = 2;
string alertMessage = string.Empty; // string alertMessage = string.Empty;
//检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示 // //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
for (int i = 0; i < data.Count; i++) // for (int i = 0; i < data.Count; i++)
{ // {
if (data[i].ChannelStock.BoardType.ToString().Contains("6")) // if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
{ // {
PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo; // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); // PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo); // orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); // 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]; // 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]) // if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
{ // {
//称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据 // //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; // alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
} // }
await Task.Delay(200); // await Task.Delay(200);
} // }
if (data[i].ChannelStock.BoardType.ToString().Contains("2")) // if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
{ // {
byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); // orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); // 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]; // 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]) // if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
{ // {
alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; // alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
} // }
} // }
} // }
if (!string.IsNullOrEmpty(alertMessage)) // if (!string.IsNullOrEmpty(alertMessage))
{ // {
//弹出确认对话框 // //弹出确认对话框
alertMessage += "应取数与实际取出数不一致确认要保存吗?"; // alertMessage += "应取数与实际取出数不一致确认要保存吗?";
//弹出确认提示框 // //弹出确认提示框
var confirm = await dialogService.OpenAsync<ConfirmDialog>( // var confirm = await dialogService.OpenAsync<ConfirmDialog>(
$"保存确认", // $"保存确认",
new Dictionary<string, object>() { { "confirmInfo", alertMessage } }, // new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); // new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
logger.Info(alertMessage); // logger.Info(alertMessage);
if (!confirm) // if (!confirm)
{ // {
RestData(); // RestData();
logger.Info("取消保存"); // logger.Info("取消保存");
// 关闭弹窗 // // 关闭弹窗
dialogService.Close(false); // dialogService.Close(false);
} // }
} // }
stop(); // stop();
} // }
else // else
{ // {
options._data += 1; // options._data += 1;
next(); // next();
} // }
} // }
else // else
{ // {
next(); // continue iteration // next(); // continue iteration
} // }
} // }
} // }
} // }
catch (Exception e) // catch (Exception e)
{ // {
RestData(); // RestData();
logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}"); // logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
_message.Notify( // _message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } // new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
); // );
if (setting.Value.single.Contains(drawerNo)) // if (setting.Value.single.Contains(drawerNo))
{ // {
PortUtil.AllLightOff(); // PortUtil.AllLightOff();
} // }
stop(); // 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, boxChannelList); 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();
} }

View File

@ -1,114 +1,330 @@
@page "/setting/Change" @page "/0"
@using MasaBlazorApp3.Pojo.Config;
@using MasaBlazorApp3.Pojo.Vo;
@using MasaBlazorApp3.Util;
@using Microsoft.Extensions.Options;
@using Newtonsoft.Json;
@using log4net;
<style>
.rz-dialog-content {
padding: 0 !important;
}
</style>
<div class="container-fluid"> <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)
<form onsubmit="@(() => grid.Reload())"> {
<RadzenFieldset Text="查询"> <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem"> 请交班操作人 @FromOperator?.NickName
<RadzenRow AlignItems="AlignItems.Center"> <p>登录验证</p>
<RadzenColumn Size="4"> </RadzenText>
<RadzenLabel Text="开始时间" Component="Start" /> }
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>
<RadzenColumn Size="8"> <RadzenColumn Size="12" SizeMD="7">
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" /> <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
</RadzenColumn> <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
</RadzenRow> 登录
<RadzenRow AlignItems="AlignItems.Center"> </RadzenText>
<RadzenColumn Size="4"> <RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
<RadzenLabel Text="结束时间" Component="End" /> <div class="rz-form-row">
</RadzenColumn> <label class="rz-label" for="username">账号</label>
<RadzenColumn Size="8"> <div class="rz-form-input-wrapper">
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" /> <!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
</RadzenColumn> <RadzenTextBox id="username" Name="Username" @bind-Value="@loginModel.Username" Style="width:100%" />
</RadzenRow> <RadzenRequiredValidator Component="Username" Text="请填写用户名" />
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="12">
<RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
</RadzenColumn>
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
</div>
<div class="col-12 mb-4">
<RadzenDataGrid @ref="grid"
LoadData="@LoadData"
IsLoading="@isLoading"
Count="@count"
EmptyText="无数据"
Data="@_forecasts"
AllowColumnResize="true" AllowAlternatingRows="false"
SelectionMode="DataGridSelectionMode.Single"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Columns>
<RadzenDataGridColumn Title="日期" Property="optDate">
<Template Context="mr">
@mr.optDate.ToString("yyyy-MM-dd")
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="交班人发药人" Property="FromOperator"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="交班人审核人" Property="FromRviewer"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班人发药人" Property="ToOperator"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班人审核人" Property="ToReviewer"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班日期" Property="ToDate">
<Template Context="mr">
@mr.ToDate.ToString("yyyy-MM-dd")
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="当班状态" Property="State">
</RadzenDataGridColumn>
<RadzenDataGridColumn title="库位" Property="Location"></RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</div> </div>
</div> </div>
</div> <div class="rz-form-row">
<label class="rz-label" for="password">密码</label>
<div class="rz-form-input-wrapper">
<RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
<RadzenRequiredValidator Component="Password" Text="请填写密码" />
</div>
</div>
<div class="rz-form-row">
<label class="rz-label"></label>
<div class="rz-form-input-wrapper rz-login-buttons">
<RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="登录" />
<RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
</div>
</div>
</RadzenTemplateForm>
</RadzenCard>
</RadzenColumn>
</RadzenRow>
@code { @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))
async Task LoadData(LoadDataArgs args)
{ {
isLoading = true; FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer);
}
var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip); return base.OnInitializedAsync();
// Update the Data property
_forecasts = result.Desserts;
// Update the count
count = result.TotalDesserts;
isLoading = false;
} }
async Task reloadGrid() private async Task SetUser(Pojo.User user)
{ {
start = DateTime.MinValue; if (userI == 1)
end = DateTime.MinValue; {
await grid.Reload(); if(FromOperator.Id != user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班操作人有误,请核查当前值班人", Duration = 3000 }
);
return;
} }
//交班人操作人登录
if (FromRviewer != null)
{
userI = 2;
}
else
{
userI = 3;
}
}
else if (userI == 2)
{
if (FromOperator != null && FromOperator.Id == user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
else
{
if(FromRviewer.Id!=user.Id)
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班审核人有误,请核查当前值班人", Duration = 3000 }
);
return;
}
FromRviewer = user;
userI = 3;
}
}
else if (userI == 3)
{
if (loginMode == 2)
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
userI = 4;
ToOperator = user;
}
else
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
else
{
ToOperator = user;
//保存交接班信息
HkcChangeShifts hkcChangeNew = new HkcChangeShifts
{
FromOperator = ToOperator.Username,
optDate = DateTime.Now,
ToDate = DateTime.Now,
State = "0", //状态为1表示交接班完成
MachineId = hkcChange.MachineId
};
hkcChange.ToOperator = ToOperator.Username;
bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
if (bResult)
{
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToOperator?.NickName}");
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
);
dialogService.Close(true);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
);
}
}
}
}
else if (userI == 4)
{
if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id) || (ToOperator != null && ToOperator.Id == user.Id))
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
);
return;
}
ToReviewer = user;
hkcChange.ToReviewer = ToReviewer?.Username;
//保存交接班信息
HkcChangeShifts hkcChangeNew = new HkcChangeShifts
{
FromOperator = ToOperator.Username,
FromRviewer = ToReviewer?.Username,
optDate = DateTime.Now,
State = "0", //状态为1表示交接班完成
MachineId = hkcChange.MachineId
};
bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
if (bResult)
{
FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToReviewer?.NickName}");
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
);
dialogService.Close(true);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
);
}
}
}
private void Submit(Pojo.User user)
{
Pojo.User u = userDao.GetByUsername(loginModel.Username);
if (u != null)
{
if (Util.MD5.GetMD5Hash(loginModel.Password).ToLower().Equals(u.Password))
{
SetUser(u);
loginModel.Username = "";
loginModel.Password = "";
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"密码错误", Duration = 4000 }
);
logger.Info($"用户【{u.NickName}】密码输入错误");
}
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 }
);
logger.Info($"没有用户:【{loginModel.Username}】");
}
}
private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode)
{
Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber));
if (u != null)
{
SetUser(u);
InvokeAsync(StateHasChanged);
}
else
{
_message.Notify(
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 }
);
logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户");
}
}
private void Exit()
{
dialogService.Close(false);
}
} }

View File

@ -0,0 +1,123 @@
@page "/stock/Change"
<div class="container-fluid">
<div class="row">
<div class="col-12 mb-4">
<form onsubmit="@(() => grid.Reload())">
<RadzenFieldset Text="查询">
<RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="4">
<RadzenLabel Text="开始时间" Component="Start" />
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
</RadzenColumn>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="4">
<RadzenLabel Text="结束时间" Component="End" />
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
</RadzenColumn>
</RadzenRow>
<RadzenRow AlignItems="AlignItems.Center">
<RadzenColumn Size="12">
<RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
<RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
</RadzenColumn>
</RadzenRow>
</RadzenStack>
</RadzenFieldset>
</form>
</div>
<div class="col-12 mb-4">
<RadzenDataGrid @ref="grid"
LoadData="@LoadData"
IsLoading="@isLoading"
Count="@count"
EmptyText="无数据"
Data="@_forecasts"
AllowColumnResize="true" AllowAlternatingRows="false"
SelectionMode="DataGridSelectionMode.Single"
AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
<Columns>
<RadzenDataGridColumn Title="日期" Property="optDate">
<Template Context="mr">
@mr.optDate.ToString("yyyy-MM-dd")
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="交班发药人" Property="FromOperator"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="交班审核人" Property="FromRviewer"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班发药人" Property="ToOperator"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班审核人" Property="ToReviewer"></RadzenDataGridColumn>
<RadzenDataGridColumn Title="接班日期" Property="ToDate">
<Template Context="mr">
@mr.ToDate.ToString("yyyy-MM-dd")
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn Title="当班状态" Property="State">
<Template Context="state">
@if(state.State=="0")
{
<RadzenText>值班中</RadzenText>
}
else
{
<RadzenText>已交班</RadzenText>
}
</Template>
</RadzenDataGridColumn>
</Columns>
</RadzenDataGrid>
</div>
</div>
</div>
@code {
@inject IHkcChangeShiftsDao hkcChangeShiftsDao;
@inject DialogService dialogService;
@inject NavigationManager navigate;
RadzenDataGrid<HkcChangeShifts> grid;
bool isLoading;
int count;
private IEnumerable<HkcChangeShifts>? _forecasts;
DateTime start;
DateTime end;
[Parameter] public string type { get; set; }
protected override void OnParametersSet()
{
if (grid != null)
{
reloadGrid();
}
}
async Task LoadData(LoadDataArgs args)
{
isLoading = true;
var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
// Update the Data property
_forecasts = result.Desserts;
// Update the count
count = result.TotalDesserts;
isLoading = false;
}
async Task reloadGrid()
{
start = DateTime.MinValue;
end = DateTime.MinValue;
await grid.Reload();
}
}

View File

@ -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>
@ -51,21 +51,45 @@
<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>

View File

@ -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,7 +104,8 @@
} }
} }
</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%">
<RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 100%;width:50%">
<RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText> <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
@if (globalStateService.Operator != null) @if (globalStateService.Operator != null)
{ {
@ -92,6 +117,19 @@
} }
} }
</RadzenStack> </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 Style="height: 100%;width:59%" Gap="20"> <RadzenStack Style="height: 100%;width:59%" Gap="20">
<RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%"> <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
@ -296,4 +334,15 @@
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false }); new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
} }
//交接班
async void changeShifts()
{
//修改复核人
await dialogService.OpenAsync<ChangeShifts>(
"",
new Dictionary<string, object>() { { "userI", 1 } },
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
}
} }

View File

@ -3,6 +3,7 @@
@page "/return/record1/{type}" @page "/return/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);
}

View File

@ -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,6 +219,23 @@
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))
{ {
@ -306,7 +324,19 @@
); );
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))
{ {
@ -318,6 +348,7 @@
Duration = 4000 Duration = 4000
} }
); );
SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
} }
else else
{ {
@ -377,6 +408,9 @@
{ {
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

View File

@ -162,7 +162,11 @@
<RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo"> <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>
} }

View File

@ -1,24 +1,90 @@
@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"
@ -28,12 +94,12 @@
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
{ {
@ -69,9 +137,11 @@
<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();
}
} }

View File

@ -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))]

View File

@ -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")]

View File

@ -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>
/// 是否选中 /// 是否选中

View File

@ -33,10 +33,10 @@ 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 List<ChannelStock> channelStocks { get; set; } = new List<ChannelStock>();
public DrugManuNo _ManuNo { get; set; } public DrugManuNo _ManuNo { get; set; }

View File

@ -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,39 +222,85 @@ 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"
}); });
x.AddChild(new Premission() b.AddChild(new Premission()
{ {
Id = 59, Id = 66,
PremissionName = "药箱库存", PremissionName = "药箱库存",
PremissionPath = "/Box/BoxStock" PremissionPath = "/Box/BoxStock"
}); });
@ -256,6 +308,7 @@ namespace MasaBlazorApp3.Pojo
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);

View File

@ -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)

View File

@ -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":[