HKC/DM_Weight/ViewModels/AddSurgeryDialogViewModel.cs

950 lines
40 KiB
C#
Raw Permalink Normal View History

using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.select;
using DM_Weight.util;
using log4net;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media;
namespace DM_Weight.ViewModels
{
public class AddSurgeryDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
public string Title => "录入手术";
public bool KeepAlive => false;
private List<MachineRecord> machineRecordList;
public List<MachineRecord> MachineRecordList { get => machineRecordList; set => SetProperty(ref machineRecordList, value); }
private SolidColorBrush _colorBrush;
public SolidColorBrush SnackbarBackground
{
get => _colorBrush;
set => SetProperty(ref _colorBrush, value);
}
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
public ISnackbarMessageQueue SnackbarMessageQueue
{
get => _snackbarMessageQueue;
set => SetProperty(ref _snackbarMessageQueue, value);
}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
public static List<OrderTakeSelect> StaticSelects = new()
{
new OrderTakeSelect
{
Code = "DrugName",
Name = "药品名称"
},
new OrderTakeSelect
{
Code = "PyCode",
Name = "拼音码"
},
new OrderTakeSelect
{
Code = "DrugBarcode",
Name = "药品条码"
},
new OrderTakeSelect
{
Code = "DrugId",
Name = "药品编码"
}
};
private List<OrderTakeSelect> _selects = StaticSelects;
public List<OrderTakeSelect> Selects
{
get { return _selects; }
set
{
SetProperty(ref _selects, value);
}
}
private static List<Dictionary<int, string>> keyValuePairs = new List<Dictionary<int, string>>()
{
new Dictionary<int, string>(){ {0,"男"} },new Dictionary<int, string>(){ { 1, "女" } }
};
public List<Dictionary<int, string>> SexKeyValue
{
get { return keyValuePairs; }
set { SetProperty(ref keyValuePairs, value); }
}
private Dictionary<int, string> _selectedSex = keyValuePairs[0];
public Dictionary<int, string> SelectedSex
{
get => _selectedSex;
set => SetProperty(ref _selectedSex, value);
}
private SurgicalSchedule surgicalSchedule = new SurgicalSchedule();
public SurgicalSchedule _SurgicalSchedule
{
get => surgicalSchedule;
set => SetProperty(ref surgicalSchedule, value);
}
private int _totalCount = 0;
public int TotalCount { get => _totalCount; set => SetProperty(ref _totalCount, value); }
private int _pageNum = 1;
public int PageNum
{
get => _pageNum;
set
{
SetProperty(ref _pageNum, value);
RequestData();
}
}
private int _pageCount = 1;
public int PageCount
{
get => _pageCount;
set
{
SetProperty(ref _pageCount, value);
}
}
private int _pageSize = 5;
public int PageSize
{
get => _pageSize;
set
{
SetProperty(ref _pageSize, value);
}
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
List<ChannelStock> ReturnStockLst;
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
private OrderTakeSelect _selectedItem = StaticSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
private MachineRecord selectedRecord;
public MachineRecord SelectedRecord { get => selectedRecord; set => SetProperty(ref selectedRecord, value); }
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
RequestData();
}
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddSurgeryDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
surgicalSchedule.ScheduleTime= DateTime.Now;
_SurgicalSchedule.Indate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
public async void RequestData()
{
int totalCount = 0;
MachineRecordList = SqlSugarHelper.Db.Queryable<MachineRecord>()
.Includes<DrugInfo>(mr => mr.DrugInfo)
.Includes<UserList>(mr => mr.User)
.Includes<SurgicalScheduleDetail>(mr => mr._SurgicalScheduleDetailLst)
.Where(mr => mr.Type == 2)
.Where(mr => mr.Status < 2)
.Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
//.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (mr) => mr.DrugInfo.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (mr) => mr.DrugInfo.DrugBarcode.Contains(SearchValue))
.OrderBy(mr => mr.OperationTime)
.ToPageList(PageNum, PageSize, ref totalCount);
MachineRecordList.ForEach(mr => mr.HasCheckNum = mr._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity));
TotalCount = totalCount;
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
/// <summary>
/// 选中行事件
/// </summary>
public DelegateCommand RowSelected
{
get => new DelegateCommand(() =>
{
if (SelectedRecord != null && selectedRecord.Id != null)
{
MachineRecordList = MachineRecordList.Select(x =>
{
if (x.Id == SelectedRecord.Id)
{
x.IsSelected = !x.IsSelected;
if (x.IsSelected)
{
if (SelectedRecord._SurgicalScheduleDetailLst != null && SelectedRecord._SurgicalScheduleDetailLst.Count > 0)
{
//已经核销数
int HasCheckNum = SelectedRecord._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
x.CheckQuantity = SelectedRecord.Quantity - HasCheckNum;
x.ReturnQuantity1 = SelectedRecord.Quantity - HasCheckNum - x.CheckQuantity;
x.ReturnQuantity2 = HasCheckNum + x.CheckQuantity;
}
else
{
x.CheckQuantity = SelectedRecord.Quantity;
x.ReturnQuantity1 = 0;
x.ReturnQuantity2 = SelectedRecord.Quantity;
}
}
else
{
x.CheckQuantity = 0;
x.ReturnQuantity1 = 0;
x.ReturnQuantity2 = 0;
}
}
return x;
}).ToList();
}
});
}
/// <summary>
/// 保存并核销
/// </summary>
public DelegateCommand AddSurgeryCommand
{
get => new DelegateCommand(() =>
{
if (!string.IsNullOrEmpty(_SurgicalSchedule.OperationId))
{
//检查是否有该手术号,手术号不能重复
int iCount= SqlSugarHelper.Db.Queryable<SurgicalSchedule>().Where(ss => ss.OperationId == _SurgicalSchedule.OperationId).Count();
if(iCount>0)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("该手术号已添加,请勿重复创建");
return;
}
List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity > 0).ToList();
if (RecordsLst.Count > 0)
{
//string operationId = Guid.NewGuid().ToString();
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
{
PName = _SurgicalSchedule.PName,
Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
Age = _SurgicalSchedule.Age,
IdNumber = _SurgicalSchedule.IdNumber,
OpRoomCode = _SurgicalSchedule.OpRoomCode,
OpRoomName = _SurgicalSchedule.OpRoomName,
OperationId = _SurgicalSchedule.OperationId,
ScheduleTime = _SurgicalSchedule.ScheduleTime,
InsertTime=DateTime.Now,
Indiagnosis=_SurgicalSchedule.Indiagnosis,
Indate=_SurgicalSchedule.Indate,
DmStatus = 1,
}).ExecuteCommand();
for (int i = 0; i < RecordsLst.Count; i++)
{
SqlSugarHelper.Db.Insertable(new SurgicalScheduleDetail()
{
OperationId = _SurgicalSchedule.OperationId,
GetRecordId = RecordsLst[i].Id,
Quantity = RecordsLst[i].CheckQuantity,
DrugId = RecordsLst[i].DrugId,
ManuNo = RecordsLst[i].ManuNo,
EffDate = RecordsLst[i].EffDate.ToString(),
InsertUserId = HomeWindowViewModel.Operator?.Id,
}).ExecuteCommand();
int hasQuantity = RecordsLst[i]._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
int dmStatus = 0;
//已经全部挂上钩,修改dm_machine_record状态为完成
//if (hasQuantity + RecordsLst[i].CheckQuantity == RecordsLst[i].Quantity)
//{
// dmStatus = 2;
//}
//else
{
dmStatus = 1;
}
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
Status = dmStatus,
Id = RecordsLst[i].Id
}).UpdateColumns(it => new { it.Status }).WhereColumns(it => new { it.Id }).ExecuteCommand();
}
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "核销完成",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("核销异常,未核销数据");
}
}
else
{
int iRet = SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
{
PName = _SurgicalSchedule.PName,
Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
Age = _SurgicalSchedule.Age,
IdNumber = _SurgicalSchedule.IdNumber,
OpRoomCode = _SurgicalSchedule.OpRoomCode,
OpRoomName = _SurgicalSchedule.OpRoomName,
OperationId = _SurgicalSchedule.OperationId,
ScheduleTime= _SurgicalSchedule.ScheduleTime,
Indiagnosis = _SurgicalSchedule.Indiagnosis,
Indate = _SurgicalSchedule.Indate,
InsertTime = DateTime.Now,
DmStatus = 0,
HisState=1
}).ExecuteCommand();
if (iRet > 0)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "手术录入成功,未核销药品",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("手术录入失败");
}
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("手术号不能为空");
}
});
}
/// <summary>
/// 全部归还(还药、还空瓶)
/// </summary>
public DelegateCommand ReturnCommand
{
get => new DelegateCommand(() =>
{
List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity == 0).ToList();
ReturnStockLst = new List<ChannelStock>();
if (RecordsLst.Count > 0)
{
//待还药的记录
List<MachineRecord> ReturnDrugLst = RecordsLst.Where(rl => rl.ReturnQuantity1 > 0).ToList();
//待还空瓶的记录
List<MachineRecord> ReturnEmptyLst = RecordsLst.Where(rl => rl.ReturnQuantity2 > 0).ToList();
for (int i = 0; i < ReturnDrugLst.Count; i++)
{
ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.DrugId == ReturnDrugLst[i].DrugId)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.ManuNo == ReturnDrugLst[i].ManuNo)
.OrderBy(cs => cs.Quantity).First();
if (queryData != null)
{
queryData.AddQuantity = ReturnDrugLst[i].ReturnQuantity1;
queryData.MachineRecordId = ReturnDrugLst[i].Id;
ReturnStockLst.Add(queryData);
}
}
for (int j = 0; j < ReturnEmptyLst.Count; j++)
{
ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Includes<DrugInfo>(cs => cs.DrugInfo)
.Where(cs => cs.DrugId == ReturnEmptyLst[j].DrugId)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
//.Where(cs => cs.ManuNo == ReturnEmptyLst[j].ManuNo)
.Where(cs => cs.DrawerType == 2)
.OrderBy(cs => cs.Quantity).First();
if (queryData != null)
{
queryData.ReturnQuantity = ReturnEmptyLst[j].ReturnQuantity2;
queryData.MachineRecordId = ReturnEmptyLst[j].Id;
ReturnStockLst.Add(queryData);
}
}
if (ReturnStockLst != null && ReturnStockLst.Count > 0)
{
ReturnStockLst = ReturnStockLst.OrderBy(cls => cls.DrawerNo).ToList();
//还药时AddQuantity有值还空瓶时ReturnQuantity有值
enumerable = ReturnStockLst.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("选中数据未绑定库位,请先进行绑定库位");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("未选中数据或选中数据核销数量不为0");
}
});
}
/// <summary>
/// 刷新
/// </summary>
public DelegateCommand QueryCommand
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "SurgeryTakeWindow")
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
//保存数据
//TakeFinish();
}
}
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位取药数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
string drugName = channelStocks[0].DrugInfo.DrugName;
int drugQuantity = channelStocks.Sum(cs => cs.AddQuantity);
int emptyQuantity = channelStocks.Sum(cs => cs.ReturnQuantity);
string speakTxt = $"正在打开{DrawerNo}号抽屉,请将{drugName}的";
if (drugQuantity > 0)
{
speakTxt += $"{drugQuantity}个药放入抽屉!";
}
if (emptyQuantity > 0)
{
speakTxt += $"{emptyQuantity}个空瓶放入抽屉!";
}
_portUtil.SpeakAsync(speakTxt);
//List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
//singleChannels.ForEach(it =>
//{
// try
// {
// _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
// }
// catch (Exception ex)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = $"打开抽屉异常{ex.Message}",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
//});
_portUtil.WindowName = "SurgeryTakeWindow";
_portUtil.BoardType = channelStocks.Count > 0 ? channelStocks[0].BoardType : 1;
_portUtil.ColNos = channelStocks.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}
private bool _isFinishClick = false;
public bool IsFinishClick { get => _isFinishClick; set => SetProperty(ref _isFinishClick, value); }
//完成
private void TakeFinish()
{
IsFinishClick = true;
bool bRet = false;
var f = SqlSugarHelper.Db.UseTran(() =>
{
for (int i = 0; i < ReturnStockLst.Count; i++)
{
ChannelStock it = ReturnStockLst[i];
int quantity = 0;
if (it.AddQuantity > 0) //还药
{
quantity = it.AddQuantity;
bRet = ReturnDrug(it);
}
else
{
quantity = it.ReturnQuantity;
bRet = ReturnEmpty(it);
}
if (!bRet)
{
break;
}
// 更新屏显库存
if (it.BoardType == 5)
{
_portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + quantity);
}
AlertMsg alertMsg = new AlertMsg
{
Message = "操作完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
}
return bRet;
});
if (!f.IsSuccess || !f.Data)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("库存更新失败!");
}
Status = 0;
IsFinishClick = false;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
/// <summary>
/// 还药
/// </summary>
private bool ReturnDrug(ChannelStock stock)
{
try
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
string InvoiceId = "RETURN_" + CurrentTimeMillis(); ;
MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = stock.Quantity + stock.AddQuantity,
Id = stock.Id,
}).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(stock.MachineId))
.Where(cs => cs.DrugId.Equals(stock.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
// 更新数据 取药记录 设置还药数量、状态
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
ReturnQuantity1 = recordInfo.ReturnQuantity1 + stock.AddQuantity,
Id = recordInfo.Id,
Status = (recordInfo.CanReturnQuantity - stock.AddQuantity) == 0 ? 2 : 1,
}).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand();
// 保存数据 还药记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
ColNo = stock.ColNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
OperationTime = DateTime.Now,
Quantity = stock.AddQuantity,
Type = 31,
InvoiceId = InvoiceId,
GetId = stock.MachineRecordId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
//保存账册
SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 1,
Department = ConfigurationManager.AppSettings["department"].ToString(),
InvoiceNo = InvoiceId,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
AddQuantity = stock.AddQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
CreateTime = DateTime.Now
}).ExecuteCommand();
//修改凌晨生成的日结存数据
AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(stock.MachineId))
.Where(ab => ab.Type == 3)
.Where(ab => ab.DrugId == stock.DrugId)
.Where(ab => ab.ManuNo == stock.ManuNo)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Day != null)
{
accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + stock.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
}
else
{
//生成日结存时可能没有该库位的绑定信息,需要写入日结存
int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 3,
ManuNo = stock.ManuNo,
EffDate = stock.EffDate,
YQuantity = 0,
ManuStock = stock.ReturnQuantity,
TotalStock = stock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "日结存"
}).ExecuteCommand();
if (iDayResult <= 0)
{
logger.Info($"未写入日结存数据{stock.DrugId}-{stock.ManuNo}-{stock.EffDate}-{stock.AddQuantity}");
}
}
//修改凌晨生成的总结存数据
AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
.Where(ab => ab.MachineId.Equals(stock.MachineId))
.Where(ab => ab.Type == 4)
.Where(ab => ab.DrugId == stock.DrugId)
.Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (accountBookG2Total != null)
{
accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + stock.AddQuantity;
SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
}
else
{
//生成总结存时可能没有该库位的绑定信息,需要写入总结存
int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
{
DrugId = stock.DrugId,
Type = 4,
YQuantity = 0,
ManuStock = stock.ReturnQuantity,
TotalStock = stock.ReturnQuantity,
UserId1 = HomeWindowViewModel.Operator?.Id,
UserId2 = HomeWindowViewModel.Reviewer?.Id,
MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
InvoiceNo = "总结存"
}).ExecuteCommand();
if (iTotalResult <= 0)
{
logger.Info($"未写入总结存数据{stock.DrugId}-{stock.AddQuantity}");
}
}
});
if (f.IsSuccess)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 还空瓶
/// </summary>
private bool ReturnEmpty(ChannelStock stock)
{
string InvoiceId = "RETURN_" + CurrentTimeMillis();
var f = SqlSugarHelper.Db.UseTran(() =>
{
// 更新数据 库存信息
SqlSugarHelper.Db.Updateable(new ChannelStock()
{
Quantity = stock.Quantity + stock.ReturnQuantity,
Id = stock.Id,
}).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.MachineId.Equals(stock.MachineId))
.Where(cs => cs.DrugId.Equals(stock.DrugId))
.Where(cs => cs.DrawerType == 1)
.ToList();
MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
// 更新数据 取药记录 设置还药数量、状态
SqlSugarHelper.Db.Updateable(new MachineRecord()
{
ReturnQuantity2 = stock.ReturnQuantity,
Id = recordInfo.Id,
Status = 2,
}).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand();
// 保存数据 还药空瓶记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = stock.MachineId,
DrawerNo = stock.DrawerNo,
ColNo = stock.ColNo,
DrugId = stock.DrugId,
ManuNo = stock.ManuNo,
EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = stock.ReturnQuantity, //ReturnQuantity,
Type = 32,
InvoiceId = InvoiceId,
GetId = stock.MachineRecordId
//,StockQuantity = nowChannels.Sum(it => it.Quantity)
}).ExecuteCommand();
return true;
});
if (!f.IsSuccess || !f.Data)
{
return false;
}
else
{
return true;
}
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
/// <summary>
/// 取消
/// </summary>
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
});
}
// 完成按钮
public DelegateCommand TakeFinishCommand
{
get => new DelegateCommand(TakeFinish);
}
private void DoDialogResult(IDialogResult dialogResult)
{
// 委托 被动执行 被子窗口执行
// dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态
//if(dialogResult.Result == ButtonResult.OK)
//{
// 关闭当前窗口
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
}
}