490 lines
23 KiB
C#
490 lines
23 KiB
C#
|
|
using LinqToDB;
|
|||
|
|
using log4net;
|
|||
|
|
using MasaBlazorApp3.DataAccess.Dao;
|
|||
|
|
using MasaBlazorApp3.Pages;
|
|||
|
|
using MasaBlazorApp3.Pojo;
|
|||
|
|
using MasaBlazorApp3.Pojo.Config;
|
|||
|
|
using MasaBlazorApp3.Pojo.Vo;
|
|||
|
|
using MasaBlazorApp3.Port;
|
|||
|
|
using Microsoft.Extensions.Options;
|
|||
|
|
using Mysqlx.Crud;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using static LinqToDB.Common.Configuration;
|
|||
|
|
|
|||
|
|
namespace MasaBlazorApp3.DataAccess.Impl
|
|||
|
|
{
|
|||
|
|
public class MachineRecordDao : IMachineRecordDao
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
private readonly AppDataConnection _connection;
|
|||
|
|
private readonly SettingConfig _setting;
|
|||
|
|
private readonly ILog logger = LogManager.GetLogger(typeof(MachineRecordDao));
|
|||
|
|
private readonly PortUtil _portUtil;
|
|||
|
|
|
|||
|
|
private GlobalStateService _globalStateService;
|
|||
|
|
//public UserDao(MyContext context)
|
|||
|
|
//{
|
|||
|
|
// Context = context;
|
|||
|
|
//}
|
|||
|
|
public MachineRecordDao(AppDataConnection connection, IOptions<SettingConfig> setting, PortUtil portUtil, GlobalStateService globalStateService)
|
|||
|
|
{
|
|||
|
|
_connection = connection;
|
|||
|
|
_setting = setting.Value;
|
|||
|
|
_portUtil = portUtil;
|
|||
|
|
_globalStateService = globalStateService;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<List<ChannelStock>> GetChannelStockByDrugId(string DrugId, String ManuNo)
|
|||
|
|
{
|
|||
|
|
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))
|
|||
|
|
.Where(cs => cs.ManuNo.Equals(ManuNo));
|
|||
|
|
|
|||
|
|
|
|||
|
|
return await query.OrderBy((cs) => cs.EffDate)
|
|||
|
|
.ThenBy((cs) => cs.DrawerNo)
|
|||
|
|
.ThenBy((cs) => cs.ColNo)
|
|||
|
|
.ToListAsync();
|
|||
|
|
}
|
|||
|
|
//还药时有库位即可,不需要库存大于0的条件
|
|||
|
|
public async Task<List<ChannelStock>> GetChannelStockByDrugIdForReturn(string DrugId, String ManuNo)
|
|||
|
|
{
|
|||
|
|
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))
|
|||
|
|
.Where(cs => cs.ManuNo.Equals(ManuNo));
|
|||
|
|
|
|||
|
|
|
|||
|
|
return await query.OrderBy((cs) => cs.EffDate)
|
|||
|
|
.ThenBy((cs) => cs.DrawerNo)
|
|||
|
|
.ThenBy((cs) => cs.ColNo)
|
|||
|
|
.ToListAsync();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<PageData<MachineRecord>> GetCanReturnRecords(DateTime start, DateTime end, int operatorId, string drugId, int? take, int? skip)
|
|||
|
|
{
|
|||
|
|
var query = _connection.MachineRecord.AsQueryable().Where(it => it.MachineId.Equals(_setting.machineId)&&it.InvoiceId.StartsWith("DRAWER_"));
|
|||
|
|
if (start != null && start != DateTime.MinValue)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.OperationTime > start);
|
|||
|
|
}
|
|||
|
|
if (end != null && end != DateTime.MinValue)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.OperationTime < end.AddDays(1));
|
|||
|
|
}
|
|||
|
|
if (operatorId != 0)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.Operator == operatorId);
|
|||
|
|
}
|
|||
|
|
query = query.Where(mr => mr.Type == 2);
|
|||
|
|
query = query.Where(mr => mr.Status < 2);
|
|||
|
|
if (!String.IsNullOrEmpty(drugId))
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.DrugId == drugId);
|
|||
|
|
}
|
|||
|
|
int pagedData = await query.CountAsync();
|
|||
|
|
List<MachineRecord> MachineRecords = await query.LoadWith(mr => mr.Drug)
|
|||
|
|
.LoadWith(mr => mr.OperatorUser)
|
|||
|
|
.OrderByDescending(mr => mr.OperationTime)
|
|||
|
|
.Skip((int)skip)
|
|||
|
|
.Take((int)take)
|
|||
|
|
.ToListAsync();
|
|||
|
|
|
|||
|
|
return new PageData<MachineRecord>() { Desserts = MachineRecords, TotalDesserts = pagedData };
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<PageData<MachineRecord>> GetMachineRecordAsync(DateTime start, DateTime end, int operatorId, string drugId, int type, int? take, int? skip)
|
|||
|
|
{
|
|||
|
|
var query = from mr in _connection.MachineRecord select mr ;
|
|||
|
|
|
|||
|
|
if (start != null && start != DateTime.MinValue)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.OperationTime > start);
|
|||
|
|
}
|
|||
|
|
if (end != null && end != DateTime.MinValue)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.OperationTime < end.AddDays(1));
|
|||
|
|
}
|
|||
|
|
if (operatorId != 0)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.Operator == operatorId);
|
|||
|
|
}
|
|||
|
|
if (type != 0)
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.Type == type);
|
|||
|
|
}
|
|||
|
|
if (!String.IsNullOrEmpty(drugId))
|
|||
|
|
{
|
|||
|
|
query = query.Where(mr => mr.DrugId == drugId);
|
|||
|
|
}
|
|||
|
|
query = query.OrderByDescending(mr => mr.OperationTime);
|
|||
|
|
query =from mr in query
|
|||
|
|
from dr in _connection.DrugInfo.Where(d => d.DrugId == mr.DrugId)
|
|||
|
|
from us in _connection.User.Where(u => u.Id == mr.Operator)
|
|||
|
|
select MachineRecord.Build(mr, dr, us);
|
|||
|
|
|
|||
|
|
int pagedData = await query.CountAsync();
|
|||
|
|
List<MachineRecord> MachineRecords = await query
|
|||
|
|
//.OrderByDescending(mr => mr.OperationTime)
|
|||
|
|
.Skip((int)skip)
|
|||
|
|
.Take((int)take)
|
|||
|
|
.ToListAsync();
|
|||
|
|
|
|||
|
|
//var query = _connection.MachineRecord.AsQueryable().Where(it => it.MachineId.Equals(_setting.machineId));
|
|||
|
|
//if (start != null && start != DateTime.MinValue)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.OperationTime > start);
|
|||
|
|
//}
|
|||
|
|
//if (end != null && end != DateTime.MinValue)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.OperationTime < end.AddDays(1));
|
|||
|
|
//}
|
|||
|
|
//if (operatorId != 0)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.Operator == operatorId);
|
|||
|
|
//}
|
|||
|
|
//if (type != 0)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.Type == type);
|
|||
|
|
//}
|
|||
|
|
//if (!String.IsNullOrEmpty(drugId))
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.DrugId == drugId);
|
|||
|
|
//}
|
|||
|
|
//int pagedData = await query.CountAsync();
|
|||
|
|
//List<MachineRecord> MachineRecords = await query.LoadWith(mr => mr.Drug)
|
|||
|
|
// .LoadWith(mr => mr.OperatorUser)
|
|||
|
|
// .OrderByDescending(mr => mr.OperationTime)
|
|||
|
|
// .Skip((int)skip)
|
|||
|
|
// .Take((int)take)
|
|||
|
|
// .ToListAsync();
|
|||
|
|
|
|||
|
|
return new PageData<MachineRecord>() { Desserts = MachineRecords, TotalDesserts = pagedData };
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public int InsertMachineRecord(MachineRecord record)
|
|||
|
|
{
|
|||
|
|
record.MachineId = _setting.machineId;
|
|||
|
|
return _connection.InsertWithInt32Identity(record);
|
|||
|
|
}
|
|||
|
|
public async Task<List<OperationVo<List<MachineRecord>>>> getReturnDrugInfoByRecords(List<MachineRecord> records)
|
|||
|
|
{
|
|||
|
|
List<OperationVo<List<MachineRecord>>> list = new();
|
|||
|
|
|
|||
|
|
for (int i = 0; i < records.Count; i++)
|
|||
|
|
{
|
|||
|
|
var record = records[i];
|
|||
|
|
//var index = list.FindIndex(it => it.Drug.DrugId == record.DrugId && it.data.Count > 0 && it.data.First().ManuNo == record.ManuNo);
|
|||
|
|
var index = list.FindIndex(it => it.Drug.DrugId == record.DrugId && it.data.First().ManuNo == record.ManuNo);
|
|||
|
|
if (index > -1)
|
|||
|
|
{
|
|||
|
|
list[index].Quantity += record.CurrentReturnQuantity;
|
|||
|
|
list[index].data.Add(record);
|
|||
|
|
if (list[index].ChannelStocks.Count > 0)
|
|||
|
|
{
|
|||
|
|
list[index].ChannelStocks.First().ReturnQuantity += record.CurrentReturnQuantity;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//List<ChannelStock> stockList = await this.GetChannelStockByDrugId(record.DrugId, record.ManuNo);
|
|||
|
|
List<ChannelStock> stockList = await this.GetChannelStockByDrugIdForReturn(record.DrugId, record.ManuNo);
|
|||
|
|
// 当前药品的库存总量
|
|||
|
|
var total = stockList.Sum(current => current.Quantity);
|
|||
|
|
if (stockList.Count > 0)
|
|||
|
|
{
|
|||
|
|
stockList.First().ReturnQuantity = record.CurrentReturnQuantity;
|
|||
|
|
}
|
|||
|
|
list.Add(new OperationVo<List<MachineRecord>>()
|
|||
|
|
{
|
|||
|
|
Drug = record.Drug,
|
|||
|
|
ChannelStocks = stockList,
|
|||
|
|
data = new List<MachineRecord> { record },
|
|||
|
|
Quantity = record.CurrentReturnQuantity,
|
|||
|
|
StockQuantity = total,
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return list;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<bool> ReturnDrugFinish(List<OperationVo<List<MachineRecord>>> datas)
|
|||
|
|
{
|
|||
|
|
//throw new NotImplementedException();
|
|||
|
|
//还药完成
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
_connection.BeginTransaction();
|
|||
|
|
if (datas.Count > 0)
|
|||
|
|
{
|
|||
|
|
datas = datas.Select(it =>
|
|||
|
|
{
|
|||
|
|
it.ChannelStocks = it.ChannelStocks.Where(cs => cs.ReturnQuantity > 0).ToList();
|
|||
|
|
return it;
|
|||
|
|
}).ToList();
|
|||
|
|
if (datas.Count > 0)
|
|||
|
|
{
|
|||
|
|
foreach (var data in datas)
|
|||
|
|
{
|
|||
|
|
int sumQuantity = data.data.Sum(mr => mr.CurrentReturnQuantity);
|
|||
|
|
//更新 库存
|
|||
|
|
foreach (ChannelStock record in data.ChannelStocks)
|
|||
|
|
{
|
|||
|
|
record.Quantity = record.Quantity + record.ReturnQuantity;
|
|||
|
|
record.Id = record.Id;
|
|||
|
|
_connection.Update(record);
|
|||
|
|
|
|||
|
|
// 保存数据 还药记录
|
|||
|
|
int acid = _connection.InsertWithInt32Identity(new MachineRecord()
|
|||
|
|
{
|
|||
|
|
MachineId = record.MachineId,
|
|||
|
|
DrawerNo = record.DrawerNo,
|
|||
|
|
ColNo = record.ColNo,
|
|||
|
|
DrugId = record.DrugId,
|
|||
|
|
ManuNo = record.ManuNo,
|
|||
|
|
EffDate = !String.IsNullOrEmpty(record.EffDate) ? DateTime.ParseExact(record.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
|||
|
|
Operator = data.data.First().Operator,
|
|||
|
|
OperationTime = DateTime.Now,
|
|||
|
|
Quantity = record.ReturnQuantity,
|
|||
|
|
Type = 31,
|
|||
|
|
InvoiceId = data.data.First().InvoiceId,
|
|||
|
|
GetId = data.data.First().GetId
|
|||
|
|
});
|
|||
|
|
//称重计数或称重+智能显示+管控药盒 类型需要 发26指令
|
|||
|
|
if (record.BoardType == 5 || record.BoardType == 6)
|
|||
|
|
{
|
|||
|
|
//计数数量设置,发送称重26指令
|
|||
|
|
_portUtil.SetNumCount(record.DrawerNo, record.ColNo, record.ReturnQuantity);
|
|||
|
|
Thread.Sleep(80);
|
|||
|
|
}
|
|||
|
|
// 获取更新完库存之后的药品库存
|
|||
|
|
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(record.DrugId))
|
|||
|
|
.ToListAsync();
|
|||
|
|
//账册添加入库记录
|
|||
|
|
int accountID = _connection.InsertWithInt32Identity(new AccountBook()
|
|||
|
|
{
|
|||
|
|
MachineId = _setting.machineId,
|
|||
|
|
DrugId = record.DrugId,
|
|||
|
|
ManuNo = record.ManuNo,
|
|||
|
|
EffDate = !String.IsNullOrEmpty(record.EffDate) ? DateTime.ParseExact(record.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
|
|||
|
|
OperationTime = DateTime.Now,
|
|||
|
|
Type = 31,
|
|||
|
|
AddQuantity = record.ReturnQuantity,
|
|||
|
|
Operator = _globalStateService.Operator.Id,
|
|||
|
|
Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
|
|||
|
|
ManuStock = list.Where(it => it.ManuNo == record.ManuNo).Sum(it => it.Quantity),
|
|||
|
|
TotalStock = list.Sum(it => it.Quantity),
|
|||
|
|
InvoiceId = data.data.First().InvoiceId,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
// 更新 取药记录 设置还药数量、状态
|
|||
|
|
foreach (MachineRecord record in data.data)
|
|||
|
|
{
|
|||
|
|
record.ReturnQuantity1 = record.ReturnQuantity1 + record.CurrentReturnQuantity;
|
|||
|
|
record.Id = record.Id;
|
|||
|
|
record.Status = (record.Quantity - (record.ReturnQuantity1 + record.ReturnQuantity2 + sumQuantity)) <= 0 ? 2 : 1;
|
|||
|
|
_connection.Update(record);
|
|||
|
|
|
|||
|
|
//更新药盒库存(原库存减已还药数)
|
|||
|
|
if(record.BoxDrawer>0)
|
|||
|
|
{
|
|||
|
|
//查询药盒库位中对应的药品信息
|
|||
|
|
ChannelStock csBox = _connection.ChannelStock.Where(cs => cs.MachineId.Equals(_setting.boxMachineId) && cs.DrugId == record.DrugId && cs.ManuNo == record.ManuNo && cs.DrawerNo == record.BoxDrawer && cs.ColNo == record.BoxColNo).FirstOrDefault();
|
|||
|
|
if(csBox!=null)
|
|||
|
|
{
|
|||
|
|
csBox.Quantity = csBox.Quantity - sumQuantity;
|
|||
|
|
int iUpdateBox= _connection.Update(csBox);
|
|||
|
|
if(iUpdateBox<=0)
|
|||
|
|
{
|
|||
|
|
logger.Info("更新药品库存失败");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
logger.Info($"未查询到药品{record.DrugId}批次{record.ManuNo}在库位{record.BoxDrawer}-{record.BoxColNo}中信息");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
_connection.CommitTransaction();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_connection.RollbackTransaction();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
logger.Error("还药完成保存数据库失败,错误:" + ex.Message);
|
|||
|
|
_connection.RollbackTransaction();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#region 还空瓶
|
|||
|
|
public async Task<List<ChannelStock>> GetReturnEmpty()
|
|||
|
|
{
|
|||
|
|
List<ChannelStock> channelStocks = new();
|
|||
|
|
var query = _connection.ChannelStock.AsQueryable().Where(it => it.MachineId == _setting.machineId && it.DrawerType == 2);
|
|||
|
|
channelStocks= await query.LoadWith(cs => cs.Drug).ToListAsync();
|
|||
|
|
|
|||
|
|
//获取可归还数量
|
|||
|
|
return channelStocks;
|
|||
|
|
//if (start != null && start != DateTime.MinValue)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.OperationTime > start);
|
|||
|
|
//}
|
|||
|
|
//if (end != null && end != DateTime.MinValue)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.OperationTime < end);
|
|||
|
|
//}
|
|||
|
|
//if (operatorId != 0)
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.Operator == operatorId);
|
|||
|
|
//}
|
|||
|
|
//query = query.Where(mr => mr.Type == 2);
|
|||
|
|
//query = query.Where(mr => mr.Status < 2);
|
|||
|
|
//if (!String.IsNullOrEmpty(drugId))
|
|||
|
|
//{
|
|||
|
|
// query = query.Where(mr => mr.DrugId == drugId);
|
|||
|
|
//}
|
|||
|
|
//int pagedData = await query.CountAsync();
|
|||
|
|
//List<MachineRecord> MachineRecords = await query.LoadWith(mr => mr.Drug)
|
|||
|
|
// .LoadWith(mr => mr.OperatorUser)
|
|||
|
|
// .OrderByDescending(mr => mr.OperationTime)
|
|||
|
|
// .Skip((int)skip)
|
|||
|
|
// .Take((int)take)
|
|||
|
|
// .ToListAsync();
|
|||
|
|
|
|||
|
|
//return new PageData<MachineRecord>() { Desserts = MachineRecords, TotalDesserts = pagedData };
|
|||
|
|
}
|
|||
|
|
public async Task<PageData<MachineRecord>> getReturnEmptyInfoByRecords(ChannelStock records)
|
|||
|
|
{
|
|||
|
|
List<MachineRecord> machineRecords = new();
|
|||
|
|
int pagedData = 0;
|
|||
|
|
if (records != null && !string.IsNullOrEmpty(records.DrugId))
|
|||
|
|
{
|
|||
|
|
var query = _connection.MachineRecord.Where(it => it.DrugId == records.DrugId && it.MachineId == _setting.machineId && it.Type == 2 && it.Status != 2).AsQueryable();
|
|||
|
|
machineRecords = await query.LoadWith(cs => cs.OperatorUser).ToListAsync();
|
|||
|
|
|
|||
|
|
pagedData = await query.CountAsync();
|
|||
|
|
}
|
|||
|
|
return new PageData<MachineRecord>() { Desserts = machineRecords, TotalDesserts = pagedData };
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public async Task<bool> ReturnEmptyFinish(List<MachineRecord> datas, ChannelStock channelStock)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
_connection.BeginTransaction();
|
|||
|
|
// 更新数据 库存信息
|
|||
|
|
channelStock.Quantity = channelStock.Quantity+ datas.Sum(it => it.CurrentReturnQuantity);
|
|||
|
|
int iStock = _connection.Update(channelStock);
|
|||
|
|
for (int i = 0; i < datas.Count; i++)
|
|||
|
|
{
|
|||
|
|
MachineRecord _MachineRecord = datas[i];
|
|||
|
|
_MachineRecord.ReturnQuantity2 = _MachineRecord.ReturnQuantity2+ _MachineRecord.CurrentReturnQuantity;
|
|||
|
|
_MachineRecord.Status = _MachineRecord.ReturnQuantity2 + _MachineRecord.ReturnQuantity1 >= _MachineRecord.Quantity ? 2 : 1;
|
|||
|
|
// 更新数据 取药记录 设置还药数量、状态
|
|||
|
|
_connection.Update(_MachineRecord);
|
|||
|
|
// 保存数据 还药空瓶记录
|
|||
|
|
int iMachineRecord = _connection.InsertWithInt32Identity(new MachineRecord() {
|
|||
|
|
MachineId= channelStock.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 = _MachineRecord.Operator,
|
|||
|
|
OperationTime = DateTime.Now,
|
|||
|
|
Quantity = _MachineRecord.CurrentReturnQuantity,
|
|||
|
|
Type = 32,
|
|||
|
|
InvoiceId = _MachineRecord.InvoiceId,
|
|||
|
|
GetId = _MachineRecord.GetId
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
////称重计数或称重+智能显示+管控药盒 类型需要 发26指令
|
|||
|
|
//if (channelStock.BoardType == 5 || channelStock.BoardType == 6)
|
|||
|
|
//{
|
|||
|
|
// //计数数量设置,发送称重26指令
|
|||
|
|
// _portUtil.SetNumCount(channelStock.DrawerNo, channelStock.ColNo, channelStock.ReturnQuantity);
|
|||
|
|
// Thread.Sleep(80);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (channelStock.BoardType.ToString().Contains("5"))
|
|||
|
|
{
|
|||
|
|
await _portUtil.WriteQuantityMethod(channelStock.Quantity + datas.Sum(it => it.CurrentReturnQuantity), channelStock.DrawerNo, channelStock.ColNo);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 更新屏显库存
|
|||
|
|
if (channelStock.BoardType == 5 || channelStock.BoardType == 35)
|
|||
|
|
{
|
|||
|
|
_portUtil.WriteQuantity(channelStock.DrawerNo, channelStock.ColNo, channelStock.Quantity);
|
|||
|
|
}
|
|||
|
|
_connection.CommitTransaction();
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
logger.Error("还空瓶完成保存数据库失败,错误:" + ex.Message);
|
|||
|
|
_connection.RollbackTransaction();
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public async Task<List<ChannelStock>> GetReturnEmptyWithCanReturnQuantiy()
|
|||
|
|
{
|
|||
|
|
List<ChannelStock> channelStocks = new();
|
|||
|
|
var queryStock = _connection.ChannelStock.Where(cs => cs.DrawerType == 2 && cs.MachineId == _setting.machineId);
|
|||
|
|
var queryMachineRecord = _connection.MachineRecord.Where(dm => dm.Type == 2 && dm.Status != 2);
|
|||
|
|
var query = from cs in queryStock
|
|||
|
|
join other in queryMachineRecord on cs.DrugId equals other.DrugId
|
|||
|
|
where cs.MachineId==other.MachineId
|
|||
|
|
group other by cs.DrugId into g
|
|||
|
|
select new
|
|||
|
|
{
|
|||
|
|
ChannelStockId = g.Key,
|
|||
|
|
SumValue = g.Sum(x => x.Quantity-x.ReturnQuantity1-x.ReturnQuantity2)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
var results = await query.ToListAsync();
|
|||
|
|
channelStocks= await queryStock.LoadWith(cs => cs.Drug).ToListAsync();
|
|||
|
|
foreach (var itemStock in channelStocks)
|
|||
|
|
{
|
|||
|
|
foreach (var itemResult in results)
|
|||
|
|
{
|
|||
|
|
if(itemStock.DrugId==itemResult.ChannelStockId)
|
|||
|
|
{
|
|||
|
|
itemStock.CanReturnQuantity = itemResult.SumValue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return channelStocks;
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
}
|
|||
|
|
}
|