1623 lines
84 KiB
C#
1623 lines
84 KiB
C#
using Google.Protobuf;
|
||
using LinqToDB;
|
||
using LinqToDB.SqlQuery;
|
||
using log4net;
|
||
using log4net.Util;
|
||
using MasaBlazorApp3.DataAccess.Dao;
|
||
using MasaBlazorApp3.Pages;
|
||
using MasaBlazorApp3.Pojo;
|
||
using MasaBlazorApp3.Pojo.Config;
|
||
using MasaBlazorApp3.Pojo.Vo;
|
||
using MasaBlazorApp3.Port;
|
||
using MasaBlazorApp3.Util;
|
||
using Microsoft.Extensions.Options;
|
||
using Mysqlx.Crud;
|
||
using Radzen;
|
||
using Radzen.Blazor.Rendering;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Reflection.PortableExecutable;
|
||
using System.Security.Permissions;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using static LinqToDB.Common.Configuration;
|
||
using static LinqToDB.Reflection.Methods.LinqToDB.Insert;
|
||
|
||
namespace MasaBlazorApp3.DataAccess.Impl
|
||
{
|
||
public class OrderInfoDao : IOrderInfoDao
|
||
{
|
||
|
||
private readonly SettingConfig _setting;
|
||
private AppDataConnection _connection;
|
||
private GlobalStateService _globalStateService;
|
||
private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
|
||
private readonly PortUtil _portUtil;
|
||
NotificationService _message;
|
||
public OrderInfoDao(AppDataConnection connection, IOptions<SettingConfig> setting, GlobalStateService globalStateService, PortUtil portUtil, NotificationService message)
|
||
{
|
||
_connection = connection;
|
||
_setting = setting.Value;
|
||
_globalStateService = globalStateService;
|
||
_portUtil = portUtil;
|
||
_message = message;
|
||
}
|
||
|
||
public async Task<PageData<OrderInfo>> GetAllOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip)
|
||
{
|
||
|
||
//var query = _connection.OrderInfo.AsQueryable();
|
||
|
||
//query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo);
|
||
|
||
var query2 = from od in _connection.OrderDetail
|
||
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
|
||
group od by od.OrderNo into temp
|
||
select new { temp.Key };
|
||
var query = from oi in _connection.OrderInfo
|
||
from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
|
||
select oi;
|
||
|
||
if (!String.IsNullOrEmpty(OrderrNo))
|
||
{
|
||
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||
}
|
||
if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||
{
|
||
query = query.Where(oi => oi.ChargeDate.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);
|
||
|
||
|
||
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();
|
||
|
||
|
||
return new PageData<OrderInfo>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = list
|
||
};
|
||
}
|
||
public async Task<PageData<OrderInfo>> GetAllOrderInfoForImport(string name, string OrderrNo, DateTime OrderDate, BoxModel boxModel, int? take, int? skip)
|
||
{
|
||
|
||
//var query = _connection.OrderInfo.AsQueryable();
|
||
|
||
//query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo);
|
||
|
||
var query2 = from od in _connection.OrderDetail
|
||
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo != boxModel.BoxName && c.ColNo != boxModel.BoxNo).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(name))
|
||
{
|
||
query = query.Where(oi => oi.PatientName.Equals(name));
|
||
}
|
||
if (!String.IsNullOrEmpty(OrderrNo))
|
||
{
|
||
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||
}
|
||
if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||
{
|
||
query = query.Where(oi => oi.ChargeDate.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);
|
||
|
||
|
||
int pagedData = await query.CountAsync();
|
||
|
||
List<OrderInfo> list = await query
|
||
.LoadWith(oi => oi.DetailInfo)
|
||
//.LoadWith(oi => oi.DetailInfo.Drug)
|
||
.OrderBy((oi) => oi.RecvDate)
|
||
.ThenBy((oi => oi.OrderNo))
|
||
.Skip((int)skip)
|
||
.Take((int)take)
|
||
.ToListAsync();
|
||
for (int i = 0; i < list.Count; i++)
|
||
{
|
||
if (list[i].DetailInfo != null && list[i].DetailInfo.Id > 0)
|
||
{
|
||
list[i].DetailInfo.Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailInfo.DrugId).FirstOrDefaultAsync();
|
||
list[i].SelectedOrderList = new List<OrderInfo>();
|
||
list[i].SelectedOrderList.Add(list[i]);
|
||
}
|
||
}
|
||
|
||
return new PageData<OrderInfo>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = list
|
||
};
|
||
}
|
||
|
||
public async Task<List<OrderDetail>> getDetailByOrderNo(string OrderrNo)
|
||
{
|
||
var query2 = from cl in _connection.ChannelStock
|
||
where cl.MachineId == _setting.machineId
|
||
group cl by cl.DrugId into temp
|
||
select new { temp.Key };
|
||
;
|
||
|
||
|
||
var query = from od in _connection.OrderDetail.Where(od => od.OrderNo == OrderrNo)
|
||
from cl in query2.InnerJoin(c => c.Key == od.DrugId)
|
||
orderby od.DrugId
|
||
select od;
|
||
|
||
query = query.LoadWith(od => od.Drug);
|
||
|
||
return await query.ToListAsync();
|
||
}
|
||
|
||
public async Task<List<ChannelStock>> GetChannelStockByDrugId(string DrugId, String ManuNo, int quantity = 0)
|
||
{
|
||
var query = _connection.ChannelStock.AsQueryable();
|
||
|
||
|
||
query = query.Where(cs => cs.MachineId.Equals(_setting.machineId)).Where(cs => cs.DrawerType == 1)
|
||
.Where(cs => cs.Quantity > 0)
|
||
.Where(cs => cs.DrugId.Equals(DrugId));
|
||
|
||
if (quantity > 0)
|
||
{
|
||
if (!String.IsNullOrEmpty(ManuNo))
|
||
{
|
||
query = query.Where(cs => cs.ManuNo.Equals(ManuNo));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (!String.IsNullOrEmpty(ManuNo))
|
||
{
|
||
query = query.Where(cs => cs.ManuNo.Equals(ManuNo) || cs.Quantity == 0);
|
||
}
|
||
}
|
||
|
||
|
||
return await query.OrderBy((cs) => cs.EffDate)
|
||
.ThenBy((cs) => cs.DrawerNo)
|
||
.ThenBy((cs) => cs.ColNo)
|
||
.ToListAsync();
|
||
}
|
||
|
||
public async Task<List<OrderTakeVo>> getTakeInfoByOrderNo(string OrderrNo)
|
||
{
|
||
List<OrderTakeVo> tempData = new();
|
||
List<OrderTakeVo> tempData2 = new();
|
||
List<OrderDetail> details = await this.getDetailByOrderNo(OrderrNo);
|
||
var flag = true;
|
||
for (var i = 0; i < details.Count; i++)
|
||
{
|
||
//List<IDictionary<string, object>> tempData = new();
|
||
OrderDetail detail = details[i];
|
||
// 当前detail取药数量
|
||
var Quantity = detail.Quantity;
|
||
List<ChannelStock> stockList = await this.GetChannelStockByDrugId(detail.DrugId, detail.SetManuNo, Quantity);
|
||
|
||
// 当前药品的库存总量
|
||
var total = stockList.Sum(current => current.Quantity);
|
||
|
||
tempData2.Add(new OrderTakeVo()
|
||
{
|
||
Drug = detail.Drug,
|
||
OrderDetail = detail,
|
||
StockQuantity = total,
|
||
Quantity = Quantity
|
||
});
|
||
|
||
if (flag)
|
||
{
|
||
// 盘点库存是否足够
|
||
if (total > Quantity)
|
||
{
|
||
|
||
for (var j = 0; Quantity > 0; j++)
|
||
{
|
||
ChannelStock stock = stockList[j];
|
||
if (Quantity > stock.Quantity)
|
||
{
|
||
// 取药数量大于库存
|
||
tempData.Add(new OrderTakeVo()
|
||
{
|
||
Drug = detail.Drug,
|
||
OrderDetail = detail,
|
||
ChannelStock = stock,
|
||
StockQuantity = total,
|
||
Quantity = stock.Quantity,
|
||
});
|
||
Quantity -= stock.Quantity;
|
||
}
|
||
else
|
||
{
|
||
//取药数量小于库存
|
||
tempData.Add(new OrderTakeVo()
|
||
{
|
||
Drug = detail.Drug,
|
||
OrderDetail = detail,
|
||
ChannelStock = stock,
|
||
StockQuantity = total,
|
||
Quantity = Quantity,
|
||
});
|
||
Quantity = 0;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// 库存不足
|
||
flag = false;
|
||
}
|
||
}
|
||
|
||
}
|
||
if (flag)
|
||
{
|
||
return tempData;
|
||
}
|
||
else
|
||
{
|
||
return tempData2;
|
||
}
|
||
}
|
||
|
||
public async Task<bool> OrderTakeFinish(List<OrderTakeVo> datas)
|
||
{
|
||
|
||
try
|
||
{
|
||
_connection.BeginTransaction();
|
||
var flag = true;
|
||
// 更新处方状态
|
||
int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo)
|
||
.Set(oi => oi.Status, 1)
|
||
.Update();
|
||
if (!(r1 > 0))
|
||
{
|
||
flag = false;
|
||
logger.Error("处方取药完成更新处方状态失败");
|
||
_connection.RollbackTransaction();
|
||
return flag;
|
||
}
|
||
for (var i = 0; i < datas.Count; i++)
|
||
{
|
||
var orderTakeVo = datas[i];
|
||
var EffDate = orderTakeVo.ChannelStock.EffDate;
|
||
if (!DateTime.TryParse(orderTakeVo.ChannelStock.EffDate, out DateTime dEffDate))
|
||
{
|
||
//效期转换出错
|
||
if (orderTakeVo.ChannelStock.EffDate != null)
|
||
{
|
||
string[] idate = orderTakeVo.ChannelStock.EffDate.Split('/');
|
||
foreach (string iS in idate)
|
||
{
|
||
if (!string.IsNullOrEmpty(iS.Trim()))
|
||
{
|
||
switch (iS.Trim().Length)
|
||
{
|
||
case 4:
|
||
EffDate = iS.Trim();
|
||
break;
|
||
case 2:
|
||
EffDate += "-" + iS.Trim();
|
||
break;
|
||
case 1:
|
||
EffDate += "-0" + iS.Trim();
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
else
|
||
{
|
||
EffDate = dEffDate.ToString("yyyy-MM-dd");
|
||
}
|
||
// 出库记录
|
||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrawerNo = orderTakeVo.ChannelStock.DrawerNo,
|
||
ColNo = orderTakeVo.ChannelStock.ColNo,
|
||
DrugId = orderTakeVo.ChannelStock.DrugId,
|
||
ManuNo = orderTakeVo.ChannelStock.ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
OperationTime = DateTime.Now,
|
||
Type = 2,
|
||
Quantity = orderTakeVo.GetQuantity,
|
||
Operator = _globalStateService.Operator.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||
InvoiceId = orderTakeVo.OrderDetail.Id.ToString(),
|
||
});
|
||
// 更新库存
|
||
int r = _connection.ChannelStock.Where(cs => cs.Id == orderTakeVo.ChannelStock.Id)
|
||
.Set(cs => cs.Quantity, orderTakeVo.ChannelStock.Quantity - orderTakeVo.GetQuantity)
|
||
.Update();
|
||
// 获取更新完库存之后的药品库存
|
||
List<ChannelStock> list = await _connection.ChannelStock.AsQueryable()
|
||
.InnerJoin(
|
||
_connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1),
|
||
(cs, cl) => cs.ListId == cl.Id,
|
||
(cs, cl) => cs
|
||
)
|
||
.Where(cs => cs.DrugId.Equals(orderTakeVo.ChannelStock.DrugId))
|
||
.ToListAsync();
|
||
// 保存账册
|
||
int acid = _connection.InsertWithInt32Identity(new AccountBook()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrugId = orderTakeVo.ChannelStock.DrugId,
|
||
ManuNo = orderTakeVo.ChannelStock.ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
OperationTime = DateTime.Now,
|
||
Type = 2,
|
||
OutQuantity = orderTakeVo.GetQuantity,
|
||
AddQuantity = 0,
|
||
Operator = _globalStateService.Operator.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||
ManuStock = list.Where(it => it.ManuNo == orderTakeVo.ChannelStock.ManuNo).Sum(it => it.Quantity),
|
||
TotalStock = list.Sum(it => it.Quantity),
|
||
InvoiceId = orderTakeVo.OrderDetail.Id.ToString()
|
||
});
|
||
if (mid > 0 && r > 0 && acid > 0)
|
||
{
|
||
if (orderTakeVo.ChannelStock.BoardType.ToString().Contains("5"))
|
||
{
|
||
await _portUtil.WriteQuantityMethod(orderTakeVo.ChannelStock.Quantity - orderTakeVo.GetQuantity, orderTakeVo.ChannelStock.DrawerNo, orderTakeVo.ChannelStock.ColNo);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
flag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (flag)
|
||
{
|
||
_connection.CommitTransaction();
|
||
}
|
||
else
|
||
{
|
||
_connection.RollbackTransaction();
|
||
}
|
||
return flag;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logger.Error("处方取药完成保存数据库失败,错误:" + ex.Message);
|
||
_connection.RollbackTransaction();
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public async Task<PageData<OrderInfo>> GetAllCanReturnOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip)
|
||
{
|
||
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.ChargeDate.Date.Equals(OrderDate.Date));
|
||
}
|
||
|
||
query = query.Where(oi => oi.Status == 1);
|
||
query = query.Where(oi => oi.CancelFlag == 1);
|
||
|
||
|
||
int pagedData = await query.CountAsync();
|
||
|
||
List<OrderInfo> list = await query
|
||
.OrderBy((oi) => oi.RecvDate)
|
||
.ThenBy((oi => oi.OrderNo))
|
||
.Skip((int)skip)
|
||
.Take((int)take)
|
||
.ToListAsync();
|
||
|
||
|
||
return new PageData<OrderInfo>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = list
|
||
};
|
||
}
|
||
|
||
public async Task<List<MachineRecord>> GetMachineRecordByOrderNo(string OrderrNo)
|
||
{
|
||
var query = _connection.MachineRecord.AsQueryable();
|
||
query = query.InnerJoin(
|
||
_connection.OrderDetail.Where(od => od.OrderNo.Equals(OrderrNo)),
|
||
(mr, od) => mr.InvoiceId.Equals(od.Id),
|
||
(mr, od) => mr
|
||
)
|
||
.Where(md => md.Type == 2)
|
||
.LoadWith(md => md.Drug)
|
||
;
|
||
return await query.ToListAsync();
|
||
}
|
||
|
||
public async Task<List<OperationVo<MachineRecord>>> getReturnInfoByOrderNo(string OrderrNo)
|
||
{
|
||
List<OperationVo<MachineRecord>> tempData = new();
|
||
List<MachineRecord> details = await this.GetMachineRecordByOrderNo(OrderrNo);
|
||
for (var i = 0; i < details.Count; i++)
|
||
{
|
||
//List<IDictionary<string, object>> tempData = new();
|
||
MachineRecord detail = details[i];
|
||
List<ChannelStock> stockList = await this.GetChannelStockByDrugId(detail.DrugId, detail.ManuNo);
|
||
|
||
|
||
// 当前药品的库存总量
|
||
var total = stockList.Sum(current => current.Quantity);
|
||
// 当前detail出库数量
|
||
var Quantity = detail.Quantity;
|
||
|
||
stockList.First().AddQuantity = Quantity;
|
||
|
||
tempData.Add(new OperationVo<MachineRecord>()
|
||
{
|
||
Drug = detail.Drug,
|
||
data = detail,
|
||
StockQuantity = total,
|
||
Quantity = Quantity,
|
||
ChannelStocks = stockList,
|
||
});
|
||
|
||
}
|
||
return tempData;
|
||
}
|
||
|
||
public async Task<DrugManuNo> GetDrugManuNo(string drugId, string manuNo)
|
||
{
|
||
var query = _connection.DrugManuNo.AsQueryable();
|
||
|
||
return await query.Where(m => m.DrugId.Equals(drugId))
|
||
.Where(m => m.ManuNo.Equals(manuNo))
|
||
.FirstAsync();
|
||
}
|
||
|
||
public async Task<bool> OrderReturnFinish(List<OperationVo<MachineRecord>> datas, string OrderNo)
|
||
{
|
||
try
|
||
{
|
||
_connection.BeginTransaction();
|
||
var flag = true;
|
||
// 更新处方状态
|
||
int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == OrderNo)
|
||
.Set(oi => oi.Status, 0)
|
||
.Update();
|
||
if (!(r1 > 0))
|
||
{
|
||
flag = false;
|
||
logger.Error("处方取药完成更新处方状态失败");
|
||
_connection.RollbackTransaction();
|
||
return flag;
|
||
}
|
||
for (var i = 0; i < datas.Count; i++)
|
||
{
|
||
var operationVo = datas[i];
|
||
|
||
List<ChannelStock> stocks = operationVo.ChannelStocks.Where(cs => cs.ReturnQuantity > 0).ToList();
|
||
|
||
// 更新取出记录状态
|
||
var r2 = _connection.MachineRecord.Where(cs => cs.Id == operationVo.data.Id)
|
||
.Set(cs => cs.Status, 2)
|
||
.Set(cs => cs.ReturnQuantity1, operationVo.data.Quantity).Update();
|
||
|
||
if (r2 > 0)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
flag = false;
|
||
break;
|
||
}
|
||
|
||
for (var j = 0; j < stocks.Count; j++)
|
||
{
|
||
var channelStock = stocks[j];
|
||
|
||
// 更新库存
|
||
var q = _connection.ChannelStock.Where(cs => cs.Id == channelStock.Id)
|
||
.Set(cs => cs.Quantity, channelStock.Quantity + channelStock.ReturnQuantity);
|
||
if (String.IsNullOrEmpty(channelStock.ManuNo) || (channelStock.Quantity == 0 && !channelStock.ManuNo.Equals(operationVo.data.ManuNo)))
|
||
{
|
||
DrugManuNo drugManuNo = await GetDrugManuNo(channelStock.DrugId, operationVo.data.ManuNo);
|
||
|
||
channelStock.Dmnguid = drugManuNo.Id;
|
||
channelStock.ManuNo = drugManuNo.ManuNo;
|
||
channelStock.EffDate = drugManuNo.EffDate.ToString();
|
||
|
||
q = q.Set(cs => cs.Dmnguid, drugManuNo.Id)
|
||
.Set(cs => cs.ManuNo, drugManuNo.ManuNo)
|
||
.Set(cs => cs.EffDate, drugManuNo.EffDate.ToString());
|
||
}
|
||
int r = q.Update();
|
||
// 退回记录
|
||
int mid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrawerNo = channelStock.DrawerNo,
|
||
ColNo = channelStock.ColNo,
|
||
DrugId = channelStock.DrugId,
|
||
ManuNo = channelStock.ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
OperationTime = DateTime.Now,
|
||
Type = 31,
|
||
Quantity = channelStock.ReturnQuantity,
|
||
Operator = _globalStateService.Operator.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||
InvoiceId = operationVo.data.InvoiceId.ToString(),
|
||
GetId = operationVo.data.Id
|
||
});
|
||
|
||
// 获取更新完库存之后的药品库存
|
||
List<ChannelStock> list = await _connection.ChannelStock.AsQueryable()
|
||
.InnerJoin(
|
||
_connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1),
|
||
(cs, cl) => cs.ListId == cl.Id,
|
||
(cs, cl) => cs
|
||
)
|
||
.Where(cs => cs.DrugId.Equals(channelStock.DrugId))
|
||
.ToListAsync();
|
||
// 保存账册
|
||
int acid = _connection.InsertWithInt32Identity(new AccountBook()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrugId = channelStock.DrugId,
|
||
ManuNo = channelStock.ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
OperationTime = DateTime.Now,
|
||
Type = 2,
|
||
OutQuantity = channelStock.ReturnQuantity,
|
||
AddQuantity = 0,
|
||
Operator = _globalStateService.Operator.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
||
ManuStock = list.Where(it => it.ManuNo == channelStock.ManuNo).Sum(it => it.Quantity),
|
||
TotalStock = list.Sum(it => it.Quantity),
|
||
InvoiceId = operationVo.data.InvoiceId
|
||
});
|
||
if (mid > 0 && r > 0 && acid > 0)
|
||
{
|
||
if (channelStock.BoardType.ToString().Contains("5"))
|
||
{
|
||
await _portUtil.WriteQuantityMethod(channelStock.Quantity - channelStock.ReturnQuantity, channelStock.DrawerNo, channelStock.ColNo);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
flag = false;
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|
||
if (flag)
|
||
{
|
||
_connection.CommitTransaction();
|
||
}
|
||
else
|
||
{
|
||
_connection.RollbackTransaction();
|
||
}
|
||
return flag;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logger.Error("处方取药完成保存数据库失败,错误:" + ex.Message);
|
||
_connection.RollbackTransaction();
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取药盒中的用药信息
|
||
/// </summary>
|
||
/// <param name="OrderrNo"></param>
|
||
/// <param name="OrderDate"></param>
|
||
/// <param name="take"></param>
|
||
/// <param name="skip"></param>
|
||
/// <returns></returns>
|
||
public async Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip)
|
||
{
|
||
var query2 = from od in _connection.OrderDetail
|
||
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.boxMachineId).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)
|
||
where oi.Pharmacy == _setting.storage
|
||
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.ChargeDate.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.DetailInfo)
|
||
.OrderBy((oi) => oi.RecvDate)
|
||
.ThenBy((oi => oi.OrderNo))
|
||
.Skip((int)skip)
|
||
.Take((int)take)
|
||
.ToListAsync();
|
||
if (list != null && list.Count > 0)
|
||
{
|
||
for (int i = 0; i < list.Count; i++)
|
||
{
|
||
//for (int j = 0; j < list[i].DetailList.Count; j++)
|
||
//{
|
||
if (list[i].DetailInfo != null && list[i].DetailInfo.Id > 0)
|
||
{
|
||
list[i].DetailInfo.Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailInfo.DrugId).FirstOrDefaultAsync();
|
||
if (list[i].DetailInfo.Drug != null)
|
||
{
|
||
list[i].DetailInfo.Drug.Manus = await _connection.DrugManuNo.AsQueryable().Where(m => m.DrugId == list[i].DetailInfo.DrugId).ToListAsync();
|
||
}
|
||
}
|
||
//}
|
||
}
|
||
}
|
||
|
||
|
||
//var query2 = from od in _connection.OrderDetail
|
||
// from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
|
||
// group od by od.OrderNo into temp
|
||
// select new { temp.Key };
|
||
//var query = from oi in _connection.OrderInfo
|
||
// from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
|
||
// select oi;
|
||
|
||
//if (!String.IsNullOrEmpty(OrderrNo))
|
||
//{
|
||
// query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||
//}
|
||
//if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||
//{
|
||
// query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date));
|
||
//}
|
||
|
||
//query = query.Where(oi => oi.Status == 0);
|
||
//query = query.Where(oi => oi.HisDispFlag == 0);
|
||
//query = query.Where(oi => oi.CancelFlag == 0);
|
||
////query = query.Where(oi => oi.DoctorCode == box);
|
||
|
||
//int pagedData = await query.CountAsync();
|
||
|
||
//List<OrderInfo> list = await query
|
||
// .LoadWith(oi => oi.Detail)
|
||
// .LoadWith(oi => oi.Detail.Drug)
|
||
// .OrderBy((oi) => oi.RecvDate)
|
||
// .ThenBy((oi => oi.OrderNo))
|
||
// .Skip((int)skip)
|
||
// .Take((int)take)
|
||
// .ToListAsync();
|
||
//if (list != null && list.Count > 0)
|
||
//{
|
||
// for (int i = 0; i < list.Count; i++)
|
||
// {
|
||
// //list[i].Detail = await _connection.OrderDetail.AsQueryable()
|
||
// // .Where(od => od.OrderNo == list[i].OrderNo)
|
||
// // .LoadWith(od => od.Drug)
|
||
// // .ToListAsync();
|
||
// }
|
||
//}
|
||
|
||
return new PageData<OrderInfo>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = list
|
||
};
|
||
}
|
||
/// <summary>
|
||
/// 获取待处理处方中的麻醉师
|
||
/// </summary>
|
||
/// <param name="OrderrNo"></param>
|
||
/// <param name="OrderDate"></param>
|
||
/// <param name="take"></param>
|
||
/// <param name="skip"></param>
|
||
/// <returns></returns>
|
||
public async Task<PageData<OrderInfo>> GetAllOrderInfo(string Name, string BoxNum, string PatientName, string OrderrNo, DateTime? OrderDate, int? take, int? skip)
|
||
{
|
||
logger.Info($"GetAllOrderInfo开始:{DateTime.Now}");
|
||
var query2 = from od in _connection.OrderDetail
|
||
from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.boxMachineId).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)
|
||
where oi.Pharmacy == _setting.storage
|
||
select oi;
|
||
if (!string.IsNullOrEmpty(Name))
|
||
{
|
||
query = query.Where(oi => oi.anaesthetistName == Name);
|
||
}
|
||
if (!string.IsNullOrEmpty(BoxNum) && !BoxNum.Contains("99") && !BoxNum.Contains("111"))
|
||
{
|
||
query = query.Where(oi => oi.RoomName == BoxNum);
|
||
}
|
||
if (!string.IsNullOrEmpty(PatientName))
|
||
{
|
||
query = query.Where(oi => oi.PatientName.Contains(PatientName));
|
||
}
|
||
if (!String.IsNullOrEmpty(OrderrNo))
|
||
{
|
||
query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
|
||
}
|
||
if (OrderDate != null && OrderDate != DateTime.MinValue)
|
||
{
|
||
query = query.Where(oi => oi.ChargeDate.Date.Equals(((DateTime)OrderDate).Date));
|
||
}
|
||
query = query.Where(oi => oi.Status == 0);
|
||
query = query.Where(oi => oi.HisDispFlag == 0);
|
||
query = query.Where(oi => oi.CancelFlag == 0);
|
||
|
||
int pagedData = await query.CountAsync();
|
||
|
||
List<OrderInfo> list = await query
|
||
.LoadWith(oi => oi.DetailInfo)
|
||
.OrderBy((oi) => oi.DetailInfo.DrugId)
|
||
.ThenBy((oi => oi.OrderNo))
|
||
//.Skip((int)skip)
|
||
//.Take((int)take)
|
||
.ToListAsync();
|
||
if (list != null && list.Count > 0)
|
||
{
|
||
|
||
var group = list.GroupBy(it => it.DetailInfo.DrugId)
|
||
.Select(it => new
|
||
{
|
||
drugId = it.Key,
|
||
totalQuantity = it.Sum(g => g.DetailInfo.Quantity)
|
||
});
|
||
foreach (var item in group)
|
||
{
|
||
OrderInfo oiGroup = list.Where(it => it.DetailInfo.DrugId == item.drugId).FirstOrDefault();
|
||
list.Where(it => it.OrderId == oiGroup.OrderId).ToList().ForEach(it => it.DetailInfo.TotalQuantity = item.totalQuantity);
|
||
}
|
||
for (int i = 0; i < list.Count; i++)
|
||
{
|
||
if (list[i].DetailInfo != null && list[i].DetailInfo.Id > 0)
|
||
{
|
||
list[i].DetailInfo.Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailInfo.DrugId).FirstOrDefaultAsync();
|
||
if (list[i].DetailInfo.Drug != null)
|
||
{
|
||
list[i].DetailInfo.Drug.Manus = await _connection.DrugManuNo.AsQueryable().Where(m => m.DrugId == list[i].DetailInfo.DrugId).ToListAsync();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
logger.Info($"GetAllOrderInfo结束:{DateTime.Now}");
|
||
return new PageData<OrderInfo>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = list
|
||
};
|
||
|
||
}
|
||
/// <summary>
|
||
/// 获取待处理处方中的麻醉师
|
||
/// </summary>
|
||
/// <param name="OrderrNo"></param>
|
||
/// <param name="OrderDate"></param>
|
||
/// <param name="take"></param>
|
||
/// <param name="skip"></param>
|
||
/// <returns></returns>
|
||
public async Task<PageData<ChannelStock>> GetAllOrderInfoDrugByBox(BoxModel boxNum, string roomName, DateTime? OrderDate)
|
||
{
|
||
List<ChannelStock> csList = await _connection.ChannelStock
|
||
.Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == boxNum.BoxName && cs.ColNo == boxNum.BoxNo && cs.Quantity > 0)
|
||
.LoadWith(cs => cs.Drug)
|
||
.ToListAsync();
|
||
if (csList != null && csList.Count > 0)
|
||
{
|
||
for (int i = 0; i < csList.Count; i++)
|
||
{
|
||
List<OrderInfo> oiList = await _connection.OrderInfo.Where(oi => oi.RoomName == roomName && oi.Status == 0 && oi.HisDispFlag == 0 && oi.CancelFlag == 0 && oi.ChargeDate.Date.Equals(((DateTime)OrderDate).Date))
|
||
.LoadWith(oi => oi.DetailInfo).Where(oi => oi.DetailInfo.DrugId == csList[i].DrugId && oi.DetailInfo.SetManuNo == csList[i].ManuNo)
|
||
.ToListAsync();
|
||
csList[i].OrderList = oiList;
|
||
csList[i].SelectedOrderList = oiList;
|
||
csList[i].UseQuantity = oiList.Sum(oi => oi.DetailInfo.Quantity);
|
||
csList[i].OrderQuantity = oiList.Count;
|
||
csList[i].EmptyQuantity = oiList.Sum(oi => oi.DetailInfo.Quantity);
|
||
csList[i].TotalQuantity = csList.Where(c => c.DrugId == csList[i].DrugId).Sum(c => c.Quantity);
|
||
if ((String.IsNullOrEmpty(csList[i].ListId) && csList[i].Quantity > csList[i].UseQuantity) || (csList[i].Quantity > csList[i].BaseQuantity))
|
||
{
|
||
//药品未在套餐中绑定需要把药还到对应抽屉
|
||
List<ChannelStock> allDrugStock = await GetStockByDRrug(csList[i].DrugId, csList[i].ManuNo, 1);// await _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType == 1 && cs.DrugId == csList[i].DrugId && cs.ManuNo == csList[i].ManuNo).OrderBy(cs => cs.Quantity).ToListAsync();
|
||
if (allDrugStock != null && allDrugStock.Count > 0)
|
||
{
|
||
csList[i].DrawerChanneStockList = new();
|
||
int iReturnQuantity = csList[i].Quantity - csList[i].UseQuantity - csList[i].BaseQuantity;
|
||
for (int j = 0; j < allDrugStock.Count; j++)
|
||
{
|
||
if (allDrugStock[j].BoardType.ToString().Contains("2") && allDrugStock[j].Quantity >= 25)
|
||
continue;
|
||
if (allDrugStock[j].BoardType.ToString().Contains("2") && allDrugStock[j].Quantity + csList[i].Quantity - csList[i].UseQuantity > 25)
|
||
{
|
||
//if (iReturnQuantity <= allDrugStock.Sum(it => it.Quantity))
|
||
if (allDrugStock[j].Quantity <= 25)
|
||
{
|
||
//有空位置可以放
|
||
int canStockQuantity = 25 - allDrugStock[j].Quantity;
|
||
if (canStockQuantity > iReturnQuantity)
|
||
{
|
||
allDrugStock[j].ReturnQuantity = iReturnQuantity;
|
||
csList[i].DrawerChanneStockList.Add(allDrugStock[j]);
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
allDrugStock[j].ReturnQuantity = canStockQuantity;
|
||
iReturnQuantity = iReturnQuantity - allDrugStock[j].ReturnQuantity;
|
||
csList[i].DrawerChanneStockList.Add(allDrugStock[j]);
|
||
}
|
||
//iReturnQuantity = iReturnQuantity - allDrugStock[j].ReturnQuantity;
|
||
//for (int q = 0; iReturnQuantity > 0; q++)
|
||
//{
|
||
|
||
// allDrugStock[j].ReturnQuantity = 25 - allDrugStock[q].Quantity;
|
||
// csList[i].DrawerChanneStockList.Add(allDrugStock[q]);
|
||
// iReturnQuantity = iReturnQuantity - allDrugStock[q].ReturnQuantity;
|
||
// if (iReturnQuantity <= 0)
|
||
// break;
|
||
//}
|
||
|
||
}
|
||
else
|
||
{
|
||
//库位不足,有药品无库位可放
|
||
allDrugStock[j].ReturnQuantity = iReturnQuantity;
|
||
csList[i].DrawerChanneStockList.Add(allDrugStock[j]);
|
||
logger.Info($"还药品【{csList[i].Drug.DrugName}】库位不足,有药品无库位可放");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
allDrugStock[j].ReturnQuantity = iReturnQuantity;
|
||
csList[i].DrawerChanneStockList.Add(allDrugStock[j]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
int pagedData = csList.Count;
|
||
return new PageData<ChannelStock>()
|
||
{
|
||
TotalDesserts = pagedData,
|
||
Desserts = csList.OrderBy(cs => cs.DrugId).OrderByDescending(cs => cs.UseQuantity).ToList()
|
||
};
|
||
}
|
||
//public List<string> GetAnaesthetistName()
|
||
//{
|
||
// List<string> strList = new List<string>();
|
||
// strList = _connection.OrderInfo.Where(it=>it.state==0&&it.HisDispFlag==0&&it.CancelFlag==0).Select(it => it.anaesthetistName).Distinct().ToList();
|
||
// return strList;
|
||
|
||
//}
|
||
/// <summary>
|
||
/// 获取所有药盒号
|
||
/// </summary>
|
||
/// <param name="machineId"></param>
|
||
/// <returns></returns>
|
||
public async Task<List<ChannelStock>> GetDrawerNum(string machineId)
|
||
{
|
||
List<ChannelStock> stockList = _connection.ChannelStock
|
||
.Where(cs => cs.MachineId == machineId)
|
||
.GroupBy(cs => new { cs.DrawerNo, cs.ColNo })
|
||
.Select(g => new ChannelStock
|
||
{
|
||
DrawerNo = g.Key.DrawerNo,
|
||
ColNo = g.Key.ColNo,
|
||
})
|
||
.ToList();
|
||
return stockList;
|
||
}
|
||
/// <summary>
|
||
/// 获取指定药盒号
|
||
/// </summary>
|
||
/// <param name="machineId"></param>
|
||
/// <returns></returns>
|
||
public async Task<List<BoxModel>> GetDrawerNumByOperationNum(string machineId, int boxColor)
|
||
{
|
||
List<BoxModel> boxModelList = new List<BoxModel>();
|
||
//var query = _connection.ChannelStock
|
||
// .Where(cs => cs.MachineId == machineId && operationNum.Contains(cs.DrawerNo)&&cs.Quantity>0);
|
||
//boxModelList = await _connection.ChannelStock
|
||
// .Where(cs => cs.MachineId == machineId && cs.Quantity > 0 && (operationNum.Contains(cs.DrawerNo)))
|
||
// .Select(cs => new BoxModel { BoxName = cs.DrawerNo, BoxNo = Convert.ToInt32(cs.ColNo) }).Distinct().OrderBy(cs=>new { cs.BoxName, cs.BoxNo }).ToListAsync();
|
||
//return boxModelList;
|
||
var query = _connection.ChannelList.Where(cs => cs.MachineId == machineId).AsQueryable();
|
||
if (boxColor > 0)
|
||
{
|
||
query.Where(cs => cs.ColNo == boxColor);
|
||
}
|
||
List<ChannelList> csList = query.OrderBy(cs => cs.DrawerNo).ToList();
|
||
if (csList != null && csList.Count > 0)
|
||
{
|
||
for (int i = 0; i < csList.Count; i++)
|
||
{
|
||
boxModelList.Add(new BoxModel { BoxName = csList[i].DrawerNo, BoxNo = csList[i].ColNo });
|
||
}
|
||
}
|
||
|
||
return boxModelList;
|
||
}
|
||
//核对处方
|
||
public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, BoxModel boxModel)
|
||
{
|
||
try
|
||
{
|
||
_connection.BeginTransaction();
|
||
bool bFlag = true;
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}开始确认手麻单");
|
||
|
||
|
||
string empChannelStock = string.Empty;
|
||
|
||
for (int i = 0; i < selectedOrderInfos.Count; i++)
|
||
{
|
||
OrderInfo oi = selectedOrderInfos[i];
|
||
|
||
|
||
int drawerNo = Convert.ToInt32(boxModel.BoxName);
|
||
if (oi.DetailInfo != null && oi.DetailInfo.Id > 0)
|
||
{
|
||
//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.MachineId.Equals(_setting.boxMachineId)
|
||
// && cs.DrawerNo == drawerNo
|
||
// && cs.Quantity >= oi.DetailList[j].Quantity).FirstOrDefault();
|
||
List<ChannelStock> cs = _connection.ChannelStock.AsQueryable()
|
||
.Where(cs => cs.DrugId == oi.DetailInfo.DrugId
|
||
&& cs.ManuNo == oi.DetailInfo.drugManuNo.ManuNo
|
||
//&& cs.EffDate == ((DateTime)oi.DetailInfo.drugManuNo.EffDate).ToString("yyyy-MM-dd")
|
||
&& cs.MachineId.Equals(_setting.boxMachineId)
|
||
&& cs.DrawerNo == drawerNo && cs.ColNo == boxModel.BoxNo).OrderBy(cs => cs.EffDate).ToList();
|
||
if (cs.Count <= 0)
|
||
{
|
||
logger.Info($"处方{oi.OrderNo}中药品{oi.DetailInfo.Drug.DrugName}在{drawerNo}号药盒无库存");
|
||
empChannelStock += $"处方{oi.OrderNo}中药品{oi.DetailInfo.Drug.DrugName}在{drawerNo}号药盒无库存 ";
|
||
continue;
|
||
}
|
||
int csQuantity = cs.Sum(cs => cs.Quantity);
|
||
if (csQuantity < oi.DetailInfo.Quantity)
|
||
{
|
||
logger.Info($"处方{oi.OrderNo}中药品{oi.DetailInfo.Drug.DrugName}在{drawerNo}号库存不足,需要核对数{oi.DetailInfo.Quantity},库存总数{csQuantity}");
|
||
empChannelStock += $"处方{oi.OrderNo}中药品{oi.DetailInfo.Drug.DrugName}在{drawerNo}号库存不足,需要核对数{oi.DetailInfo.Quantity},库存总数{csQuantity} ";
|
||
continue;
|
||
}
|
||
//更新处方状态
|
||
if (oi.Status == 0)
|
||
{
|
||
int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update();
|
||
int odUpdate = _connection.OrderDetail.Where(od => od.OrderNo == oi.OrderNo).Set(od => od.SetManuNo, oi.DetailInfo.drugManuNo.ManuNo).Set(od => od.Quantity, oi.DetailInfo.Quantity).Update();
|
||
_connection.Insert(new OrderFinish()
|
||
{
|
||
OrderNo = oi.OrderNo,
|
||
PatientId = oi.PatientId,
|
||
Pharmacy = oi.Pharmacy,
|
||
State = 1,
|
||
//WinNo = DrawerNo + 1 + "号手术间",
|
||
Operator = _globalStateService.Operator.NickName,
|
||
});
|
||
}
|
||
int Break = 0;
|
||
for (int k = 0; (k < cs.Count && Break == 0); k++)
|
||
{
|
||
int oldQuantity = cs[k].Quantity;
|
||
int useQuantity = 0; //实际使用数量
|
||
if (cs[k].Quantity >= oi.DetailInfo.Quantity)
|
||
{
|
||
cs[k].Quantity = cs[k].Quantity - oi.DetailInfo.Quantity;
|
||
Break = 1;//药品够取跳出循环
|
||
useQuantity = oi.DetailInfo.Quantity;
|
||
}
|
||
else
|
||
{
|
||
oi.DetailInfo.Quantity = oi.DetailInfo.Quantity - cs[k].Quantity;
|
||
useQuantity = cs[k].Quantity;
|
||
cs[k].Quantity = 0;
|
||
}
|
||
//cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
|
||
logger.Info($"更新药盒{cs[k].DrawerNo}药品{cs[k].DrugId}批次{cs[k].ManuNo}库存为{oldQuantity},处方用药数量为{oi.DetailInfo.Quantity}");
|
||
// 更新数据 库存信息
|
||
_connection.Update(cs[k]);
|
||
|
||
//更新ChannelList对应的总库存
|
||
ChannelList? channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs[k].MachineId) && cl.Id.Equals(cs[k].ListId) && cl.DrawerNo.Equals(cs[k].DrawerNo)).FirstOrDefault();
|
||
if (channelList != null)
|
||
{
|
||
channelList.TotalQuantity = channelList.TotalQuantity - useQuantity;// oi.DetailList[j].Quantity;
|
||
_connection.Update(channelList);
|
||
}
|
||
// 获取更新完库存后的药品库存
|
||
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
|
||
.Where(it => it.MachineId.Equals(cs[k].MachineId) || it.MachineId.Equals(_setting.machineId))
|
||
.Where(it => it.DrugId.Equals(cs[k].DrugId))
|
||
.Where(it => it.ManuNo.Equals(cs[k].ManuNo))
|
||
.Where(it => it.DrawerType == 1)
|
||
.ToList();
|
||
_connection.Insert(new MachineRecord()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrawerNo = cs[k].DrawerNo,
|
||
ColNo = cs[k].ColNo,
|
||
DrugId = cs[k].DrugId,
|
||
ManuNo = cs[k].ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(cs[k].EffDate) ? DateTime.ParseExact(cs[k].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
Operator = _globalStateService.Operator?.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id,
|
||
OperationTime = DateTime.Now,
|
||
Quantity = useQuantity,// oi.DetailList[j].Quantity,
|
||
Type = 2,
|
||
InvoiceId = oi.OrderNo
|
||
//, StockQuantity = nowChannels.Sum(it => it.Quantity)
|
||
});
|
||
|
||
|
||
//查询上一条账册中的空瓶数
|
||
AccountBookG2? accountBookEmpty = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 1 || ab.Type == 2)
|
||
.Where(ab => ab.DrugId == oi.DetailInfo.DrugId)
|
||
.Where(ab => ab.ManuNo == cs[k].ManuNo).OrderByDescending(ab => ab.Id).FirstOrDefault();
|
||
//保存账册
|
||
int iInsertResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oi.DetailInfo.DrugId,
|
||
Type = 2,
|
||
Department = oi.DeptName,
|
||
OrderNo = oi.OrderNo,
|
||
ManuNo = cs[k].ManuNo,
|
||
EffDate = cs[k].EffDate,
|
||
OutQuantity = useQuantity,// oi.DetailList[j].Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
CreateTime = DateTime.Now,
|
||
InvoiceNo = oi.OrderNo,
|
||
ManuStock = nowChannels.Sum(it => it.Quantity),
|
||
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailInfo.Quantity,
|
||
ShoushuJian = drawerNo.ToString()
|
||
});
|
||
//修改凌晨生成的日结存与总结存数据
|
||
AccountBookG2? accountBookG2Day = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 3)
|
||
.Where(ab => ab.DrugId == oi.DetailInfo.DrugId)
|
||
.Where(ab => ab.ManuNo == cs[k].ManuNo)
|
||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault();
|
||
if (accountBookG2Day != null)
|
||
{
|
||
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - useQuantity;// oi.DetailList[j].Quantity;
|
||
_connection.Update(accountBookG2Day);
|
||
}
|
||
else
|
||
{
|
||
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
|
||
int iDayResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oi.DetailInfo.DrugId,
|
||
Type = 3,
|
||
ManuNo = cs[k].ManuNo,
|
||
EffDate = cs[k].EffDate,
|
||
YQuantity = 0,
|
||
ManuStock = useQuantity,// oi.DetailList[j].Quantity,
|
||
TotalStock = useQuantity,// oi.DetailList[j].Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
InvoiceNo = "日结存"
|
||
});
|
||
if (iDayResult <= 0)
|
||
{
|
||
logger.Info($"未写入日结存数据{oi.DetailInfo.DrugId}-{cs[k].ManuNo}-{cs[k].EffDate}-{useQuantity}");
|
||
empChannelStock += $"未写入日结存数据{oi.DetailInfo.DrugId}-{cs[k].ManuNo}-{cs[k].EffDate}-{useQuantity} ";
|
||
}
|
||
}
|
||
//修改凌晨生成的日结存与总结存数据
|
||
AccountBookG2? accountBookG2Total = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 4)
|
||
.Where(ab => ab.DrugId == oi.DetailInfo.DrugId)
|
||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault();
|
||
if (accountBookG2Total != null)
|
||
{
|
||
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - useQuantity;// oi.DetailList[j].Quantity;
|
||
_connection.Update(accountBookG2Total);
|
||
}
|
||
else
|
||
{
|
||
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
|
||
int iTotalResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oi.DetailInfo.DrugId,
|
||
Type = 4,
|
||
YQuantity = 0,
|
||
ManuStock = useQuantity,//oi.DetailList[j].Quantity,
|
||
TotalStock = useQuantity,// oi.DetailList[j].Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
InvoiceNo = "总结存"
|
||
});
|
||
if (iTotalResult <= 0)
|
||
{
|
||
logger.Info($"未写入总结存数据{oi.DetailInfo.DrugId}-{useQuantity}");
|
||
empChannelStock += $"未写入总结存数据{oi.DetailInfo.DrugId}-{useQuantity} ";
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单");
|
||
if (!string.IsNullOrEmpty(empChannelStock))
|
||
{
|
||
_message.Notify(
|
||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"有未核对处方:{empChannelStock}", Duration = 4000 }
|
||
);
|
||
_connection.RollbackTransaction();
|
||
return false;
|
||
}
|
||
if (bFlag)
|
||
{
|
||
_connection.CommitTransaction();
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
_connection.RollbackTransaction();
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}确认手麻单失败");
|
||
return false;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_connection.RollbackTransaction();
|
||
logger.Info($"核对处方异常{ex.Message}");
|
||
return false;
|
||
}
|
||
}
|
||
int status;
|
||
//核对处方
|
||
public async Task<bool> CheckOrderInfoByChannelStock(IList<ChannelStock> csList, BoxModel boxModel)
|
||
{
|
||
try
|
||
{
|
||
_connection.BeginTransaction();
|
||
bool bFlag = true;
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}开始核对处方");
|
||
|
||
|
||
string empChannelStock = string.Empty;
|
||
|
||
for (int i = 0; i < csList.Count; i++)
|
||
{
|
||
ChannelStock channelStock = csList[i];
|
||
if (channelStock != null && channelStock.SelectedOrderList != null && channelStock.SelectedOrderList.Count > 0)
|
||
{
|
||
List<OrderInfo> oiList = channelStock.SelectedOrderList.ToList();
|
||
for (int j = 0; j < oiList.Count; j++)
|
||
{
|
||
//修改选中的处方状态
|
||
int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oiList[j].OrderNo).Set(o => o.Status, 2).Update();
|
||
_connection.Insert(new OrderFinish()
|
||
{
|
||
OrderNo = oiList[j].OrderNo,
|
||
PatientId = oiList[j].PatientId,
|
||
Pharmacy = oiList[j].Pharmacy,
|
||
State = 1,
|
||
//WinNo = DrawerNo + 1 + "号手术间",
|
||
Operator = _globalStateService.Operator.NickName,
|
||
});
|
||
//更新库存
|
||
channelStock.Quantity = channelStock.Quantity - oiList[j].DetailInfo.Quantity;
|
||
_connection.Update(channelStock);
|
||
|
||
//更新ChannelList对应的总库存
|
||
if (!string.IsNullOrEmpty(channelStock.ListId) && channelStock.ListId != "0")
|
||
{
|
||
ChannelList? channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.Id == channelStock.ListId).FirstOrDefault();
|
||
if (channelList != null)
|
||
{
|
||
channelList.TotalQuantity = channelList.TotalQuantity - oiList[j].DetailInfo.Quantity;
|
||
_connection.Update(channelList);
|
||
}
|
||
}
|
||
//记录出库记录
|
||
_connection.Insert(new MachineRecord()
|
||
{
|
||
MachineId = _setting.machineId,
|
||
DrawerNo = channelStock.DrawerNo,
|
||
ColNo = channelStock.ColNo,
|
||
DrugId = channelStock.DrugId,
|
||
ManuNo = channelStock.ManuNo,
|
||
EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
Operator = _globalStateService.Operator?.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id,
|
||
OperationTime = DateTime.Now,
|
||
Quantity = oiList[j].DetailInfo.Quantity,
|
||
Type = 2,
|
||
InvoiceId = oiList[j].OrderNo
|
||
});
|
||
//保存账册
|
||
// 获取更新完库存后的药品库存
|
||
List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
|
||
.Where(it => it.MachineId.Equals(_setting.machineId) || it.MachineId.Equals(_setting.boxMachineId))
|
||
.Where(it => it.DrugId.Equals(oiList[j].DetailInfo.DrugId))
|
||
.Where(it => it.ManuNo.Equals(oiList[j].DetailInfo.SetManuNo))
|
||
.Where(it => it.DrawerType == 1)
|
||
.ToList();
|
||
//查询上一条账册中的空瓶数
|
||
AccountBookG2? accountBookEmpty = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 1 || ab.Type == 2)
|
||
.Where(ab => ab.DrugId == oiList[j].DetailInfo.DrugId)
|
||
.Where(ab => ab.ManuNo == oiList[j].DetailInfo.SetManuNo).OrderByDescending(ab => ab.Id).FirstOrDefault();
|
||
//保存账册
|
||
int iInsertResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oiList[j].DetailInfo.DrugId,
|
||
Type = 2,
|
||
Department = oiList[j].DeptName,
|
||
OrderNo = oiList[j].OrderNo,
|
||
ManuNo = oiList[j].DetailInfo.SetManuNo,
|
||
EffDate = oiList[j].DetailInfo.SetEffDate,
|
||
OutQuantity = oiList[j].DetailInfo.Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
CreateTime = DateTime.Now,
|
||
InvoiceNo = oiList[j].OrderNo,
|
||
ManuStock = nowChannels.Sum(it => it.Quantity),
|
||
TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oiList[j].DetailInfo.Quantity,
|
||
ShoushuJian = oiList[j].RoomName
|
||
});
|
||
|
||
//修改日结
|
||
//修改凌晨生成的日结存与总结存数据
|
||
AccountBookG2? accountBookG2Day = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 3)
|
||
.Where(ab => ab.DrugId == oiList[j].DetailInfo.DrugId)
|
||
.Where(ab => ab.ManuNo == oiList[j].DetailInfo.SetManuNo)
|
||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault();
|
||
if (accountBookG2Day != null)
|
||
{
|
||
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oiList[j].DetailInfo.Quantity;
|
||
_connection.Update(accountBookG2Day);
|
||
}
|
||
else
|
||
{
|
||
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
|
||
int iDayResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oiList[j].DetailInfo.DrugId,
|
||
Type = 3,
|
||
ManuNo = oiList[j].DetailInfo.SetManuNo,
|
||
EffDate = oiList[j].DetailInfo.SetEffDate,
|
||
YQuantity = 0,
|
||
ManuStock = oiList[j].DetailInfo.Quantity,
|
||
TotalStock = oiList[j].DetailInfo.Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
InvoiceNo = "日结存"
|
||
});
|
||
if (iDayResult <= 0)
|
||
{
|
||
logger.Info($"未写入日结存数据{oiList[j].DetailInfo.DrugId}-{oiList[j].DetailInfo.SetManuNo}-{oiList[j].DetailInfo.SetEffDate}-{oiList[j].DetailInfo.Quantity}");
|
||
empChannelStock += $"未写入日结存数据{oiList[j].DetailInfo.DrugId}-{oiList[j].DetailInfo.SetManuNo}-{oiList[j].DetailInfo.SetEffDate}-{oiList[j].DetailInfo.Quantity} ";
|
||
}
|
||
}
|
||
//总结
|
||
//修改凌晨生成的日结存与总结存数据
|
||
AccountBookG2? accountBookG2Total = _connection.AccountBookG2.AsQueryable()
|
||
.Where(ab => ab.MachineId.Equals(_setting.machineId))
|
||
.Where(ab => ab.Type == 4)
|
||
.Where(ab => ab.DrugId == oiList[j].DetailInfo.DrugId)
|
||
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault();
|
||
if (accountBookG2Total != null)
|
||
{
|
||
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oiList[j].DetailInfo.Quantity;// oi.DetailList[j].Quantity;
|
||
_connection.Update(accountBookG2Total);
|
||
}
|
||
else
|
||
{
|
||
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
|
||
int iTotalResult = _connection.Insert(new AccountBookG2()
|
||
{
|
||
DrugId = oiList[j].DetailInfo.DrugId,
|
||
Type = 4,
|
||
YQuantity = 0,
|
||
ManuStock = oiList[j].DetailInfo.Quantity,
|
||
TotalStock = oiList[j].DetailInfo.Quantity,
|
||
UserId1 = _globalStateService.Operator?.Id,
|
||
UserId2 = _globalStateService.Reviewer?.Id,
|
||
MachineId = _setting.machineId,
|
||
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
|
||
InvoiceNo = "总结存"
|
||
});
|
||
if (iTotalResult <= 0)
|
||
{
|
||
logger.Info($"未写入总结存数据{oiList[j].DetailInfo.DrugId}-{oiList[j].DetailInfo.Quantity}");
|
||
empChannelStock += $"未写入总结存数据{oiList[j].DetailInfo.DrugId}-{oiList[j].DetailInfo.Quantity} ";
|
||
}
|
||
}
|
||
//移出库位里是否有未绑套餐且库存为0的数据,有则删除
|
||
_connection.ChannelStock.Where(cs => cs.MachineId.Equals(_setting.boxMachineId) && (string.IsNullOrEmpty(cs.ListId)) && cs.DrawerNo == channelStock.DrawerNo && cs.ColNo == channelStock.ColNo && cs.Quantity <= 0).Delete();
|
||
//删除绑定套餐中同一药品多批次且库存为0的第一条数据
|
||
List<ChannelStock> delChannelStock = await _connection.ChannelStock.Where(cs => cs.MachineId.Equals(_setting.boxMachineId) && cs.DrawerNo == channelStock.DrawerNo && cs.ColNo == channelStock.ColNo && cs.DrugId == channelStock.DrugId).ToListAsync();
|
||
if (delChannelStock != null && delChannelStock.Count > 1)
|
||
{
|
||
//删除绑定套餐中库存为0的药的批次数据,只保留一条数据
|
||
List<ChannelStock> del = delChannelStock.Where(c => c.Quantity <= 0).ToList();
|
||
if (del != null && del.Count > 0)
|
||
{
|
||
if (delChannelStock.Count == del.Count)
|
||
{
|
||
for (int d = 1; d < del.Count; d++)
|
||
{
|
||
_connection.ChannelStock.Where(cs => cs.Id == del[d].Id).Delete();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int d = 0; d < del.Count; d++)
|
||
{
|
||
_connection.ChannelStock.Where(cs => cs.Id == del[d].Id).Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
List<OrderTakeVo> drawerNos = new();
|
||
List<ChannelStock> returnStock = new();
|
||
//if (csList.Any(c => c.DrawerChanneStockList?.Count > 0))
|
||
|
||
if (csList[i].DrawerChanneStockList != null && csList[i].DrawerChanneStockList.Count > 0)
|
||
{
|
||
List<ChannelStock> drawerChannelStockList = csList[i].DrawerChanneStockList;
|
||
for (int j = 0; j < drawerChannelStockList.Count; j++)
|
||
{
|
||
//还药将库存加入抽屉、从药盒中减库存
|
||
_connection.ChannelStock.Where(cs => cs.Id == csList[i].DrawerChanneStockList[j].Id).Set(cs => cs.Quantity, csList[i].DrawerChanneStockList[j].Quantity + csList[i].DrawerChanneStockList[j].ReturnQuantity).Update();
|
||
_connection.ChannelStock.Where(cs => cs.Id == csList[i].Id).Set(cs => cs.Quantity, csList[i].Quantity - csList[i].DrawerChanneStockList[j].ReturnQuantity).Update();
|
||
//药盒对应channel_list表总库存也要减
|
||
ChannelList clList = _connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.boxMachineId) && cl.DrawerNo == csList[i].DrawerNo && cl.ColNo == csList[i].ColNo).FirstOrDefault();
|
||
if (clList != null)
|
||
{
|
||
clList.TotalQuantity -= csList[i].DrawerChanneStockList[j].ReturnQuantity;
|
||
int iUpdate = await _connection.UpdateAsync(clList);
|
||
if (iUpdate <= 0)
|
||
{
|
||
logger.Info($"抽屉还药记录药盒{boxModel.BoxName}-{boxModel.BoxNo}总库存失败,还药数量{csList[i].DrawerChanneStockList[j].ReturnQuantity}");
|
||
}
|
||
}
|
||
MachineRecord _MachineRecord = _connection.MachineRecord
|
||
.Where(dm => dm.MachineId.Equals(_setting.boxMachineId) && dm.DrugId == csList[i].DrugId && dm.ManuNo == csList[i].ManuNo && dm.BoxDrawer == csList[i].DrawerNo && dm.ColNo == csList[i].ColNo && dm.Type == 2 && dm.Status != 2).FirstOrDefault();
|
||
if (_MachineRecord != null)
|
||
{
|
||
_MachineRecord.ReturnQuantity2 = _MachineRecord.ReturnQuantity2 + _MachineRecord.CurrentReturnQuantity;
|
||
_MachineRecord.Status = _MachineRecord.ReturnQuantity2 + _MachineRecord.ReturnQuantity1 >= _MachineRecord.Quantity ? 2 : 1;
|
||
// 更新借药数据 取药记录 设置还药数量、状态
|
||
_connection.Update(_MachineRecord);
|
||
}
|
||
//添加还药记录
|
||
int acid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||
{
|
||
MachineId = _setting.boxMachineId,
|
||
DrawerNo = csList[i].DrawerChanneStockList[j].DrawerNo,
|
||
ColNo = csList[i].DrawerChanneStockList[j].ColNo,
|
||
DrugId = csList[i].DrugId,
|
||
ManuNo = csList[i].DrawerChanneStockList[j].ManuNo,
|
||
// EffDate = !String.IsNullOrEmpty(record.EffDate) ? DateTime.ParseExact(record.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
Operator = _globalStateService.Operator?.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id,
|
||
OperationTime = DateTime.Now,
|
||
Quantity = csList[i].DrawerChanneStockList[j].ReturnQuantity,
|
||
Type = 31,
|
||
InvoiceId = csList[i].Location,
|
||
GetId = _MachineRecord?.GetId
|
||
});
|
||
}
|
||
|
||
|
||
}
|
||
if (csList[i].EmptyStock != null && csList[i].EmptyStock.ReturnQuantity > 0)
|
||
{
|
||
//还空瓶,将空瓶数量加到空瓶库位 //还药将库存加入抽屉、从药盒中减库存
|
||
_connection.ChannelStock.Where(cs => cs.Id == csList[i].EmptyStock.Id).Set(cs => cs.Quantity, csList[i].EmptyStock.Quantity + csList[i].EmptyStock.ReturnQuantity).Update();
|
||
|
||
MachineRecord _MachineRecord = _connection.MachineRecord
|
||
.Where(dm => dm.MachineId.Equals(_setting.boxMachineId) && dm.DrugId == csList[i].DrugId && dm.ManuNo == csList[i].ManuNo && dm.BoxDrawer == csList[i].DrawerNo && dm.ColNo == csList[i].ColNo && dm.Type == 2 && dm.Status != 2).FirstOrDefault();
|
||
if (_MachineRecord != null)
|
||
{
|
||
_MachineRecord.ReturnQuantity2 = _MachineRecord.ReturnQuantity2 + _MachineRecord.CurrentReturnQuantity;
|
||
_MachineRecord.Status = _MachineRecord.ReturnQuantity2 + _MachineRecord.ReturnQuantity1 >= _MachineRecord.Quantity ? 2 : 1;
|
||
// 更新借药数据 取药记录 设置还药数量、状态
|
||
_connection.Update(_MachineRecord);
|
||
}
|
||
//添加还空瓶记录
|
||
int acid = _connection.InsertWithInt32Identity(new MachineRecord()
|
||
{
|
||
MachineId = _setting.boxMachineId,
|
||
DrawerNo = csList[i].EmptyStock.DrawerNo,
|
||
ColNo = csList[i].EmptyStock.ColNo,
|
||
DrugId = csList[i].DrugId,
|
||
ManuNo = csList[i].EmptyStock.ManuNo,
|
||
// EffDate = !String.IsNullOrEmpty(record.EffDate) ? DateTime.ParseExact(record.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
||
Operator = _globalStateService.Operator?.Id,
|
||
Reviewer = _globalStateService.Reviewer?.Id,
|
||
OperationTime = DateTime.Now,
|
||
Quantity = csList[i].EmptyStock.ReturnQuantity,
|
||
Type = 32,
|
||
InvoiceId = csList[i].Location,
|
||
GetId = _MachineRecord?.GetId
|
||
});
|
||
}
|
||
}
|
||
|
||
//将药盒中无绑定库位的药品且库存为0的删除
|
||
_connection.ChannelStock.Where(cs => cs.MachineId.Equals(_setting.boxMachineId) && string.IsNullOrEmpty(cs.ListId) && cs.Quantity <= 0).Delete();
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单");
|
||
if (!string.IsNullOrEmpty(empChannelStock))
|
||
{
|
||
_message.Notify(
|
||
new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"有未核对处方:{empChannelStock}", Duration = 4000 }
|
||
);
|
||
_connection.RollbackTransaction();
|
||
return false;
|
||
}
|
||
if (bFlag)
|
||
{
|
||
_connection.CommitTransaction();
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
_connection.RollbackTransaction();
|
||
logger.Info($"管理员{_globalStateService.Operator.NickName}确认手麻单失败");
|
||
return false;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_connection.RollbackTransaction();
|
||
logger.Info($"核对处方异常{ex.Message}");
|
||
return false;
|
||
}
|
||
}
|
||
|
||
void RestData()
|
||
{
|
||
// PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
|
||
// this.status = 0;
|
||
// data.ForEach(it =>
|
||
// {
|
||
// it.Status = 0;
|
||
// it.BeforeQuantity = new int[9];
|
||
// it.AfterQuantity = new int[9];
|
||
// });
|
||
// this.WeightFinnalQuantity = new int[9];
|
||
// DrawerNoColNoList.Clear();
|
||
}
|
||
public async Task<List<Anaesthetist>> GetAnaesthetistName()
|
||
{
|
||
List<Anaesthetist> strList = new List<Anaesthetist>();
|
||
strList = await _connection.OrderInfo.Where(it => it.state == 0 && it.HisDispFlag == 0 && it.CancelFlag == 0).Select(it => new Anaesthetist { Name = it.anaesthetistName }).Distinct().ToListAsync();
|
||
return strList;
|
||
|
||
}
|
||
|
||
//获取麻醉师单对应的手术间号
|
||
public async Task<List<BoxModel>> GetOperationNum(int boxColor)
|
||
{
|
||
List<BoxModel> boxNumList = new List<BoxModel>();
|
||
//List<int> roomNameList = await _connection.OrderInfo
|
||
// .Where(it => it.state == 0 && it.HisDispFlag == 0 && it.CancelFlag == 0&&it.anaesthetistName== anaesthetistName)
|
||
// .Select(it => Convert.ToInt32(it.RoomName.Substring(6, it.RoomName.Length - 6))).Distinct().ToListAsync();
|
||
//roomNameList.Add(99);
|
||
//roomNameList.Add(111);
|
||
logger.Info($"开始查询药盒{DateTime.Now}");
|
||
boxNumList = await GetDrawerNumByOperationNum(_setting.boxMachineId, boxColor);
|
||
|
||
logger.Info($"结束查询药盒{DateTime.Now}");
|
||
return boxNumList;
|
||
}
|
||
|
||
|
||
//获取麻醉师单对应的手术间号(查询全部手术间已绑套餐的手术间)
|
||
public async Task<List<BoxModel>> GetAllBindOperationNum()
|
||
{
|
||
List<BoxModel> boxModelList = new List<BoxModel>();
|
||
boxModelList = await _connection.ChannelList
|
||
.Where(cs => cs.MachineId == _setting.boxMachineId && (!string.IsNullOrEmpty(cs.DrugId)))
|
||
.Select(cs => new BoxModel { BoxName = cs.DrawerNo, BoxNo = Convert.ToInt32(cs.ColNo) }).Distinct().OrderBy(cs => new { cs.BoxName, cs.BoxNo }).ToListAsync();
|
||
return boxModelList;
|
||
}
|
||
|
||
//查询药品对应的库位 drawerType=1药品库位,其他则是回收库位
|
||
public async Task<List<ChannelStock>> GetStockByDRrug(string drugId, string manuNo, int drawerType)
|
||
{
|
||
if (drawerType == 1)
|
||
{
|
||
return await _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType == drawerType && cs.DrugId == drugId && cs.ManuNo == manuNo).OrderBy(cs => cs.Quantity).ToListAsync();
|
||
}
|
||
else
|
||
{
|
||
return await _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType != 1 && cs.DrugId == drugId).OrderBy(cs => cs.Quantity).ToListAsync();
|
||
}
|
||
}
|
||
|
||
public Task<List<BoxModel>> GetDrawerNumByOperationNum(string machineId, List<int> operationNum)
|
||
{
|
||
throw new NotImplementedException();
|
||
}
|
||
}
|
||
}
|