XiangTan_JiaoJie_Bak/DM_Weight/ViewModels/BindBoxPackageWindowViewMod...

487 lines
18 KiB
C#
Raw Normal View History

2025-01-06 09:40:32 +08:00
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using log4net.Repository.Hierarchy;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace DM_Weight.ViewModels
{
public class BindBoxPackageWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(BindBoxPackageWindowViewModel));
public static BindBoxPackageWindowViewModel vm;
private int _drawerNo = 0;
public int DrawerNo
{
get => _drawerNo;
set => SetProperty(ref _drawerNo, 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 List<ChannelList>? _channelLists;
2025-01-06 09:40:32 +08:00
public List<ChannelList>? _ChannelLists
2025-01-06 09:40:32 +08:00
{
get => _channelLists;
set => SetProperty(ref _channelLists, value);
2025-01-06 09:40:32 +08:00
}
private ChannelList? _channelList;
2025-01-06 09:40:32 +08:00
public ChannelList? _ChannelList
2025-01-06 09:40:32 +08:00
{
get => _channelList;
2025-01-06 09:40:32 +08:00
set
{
if (value != null)
{
DrugInfo = DrugInfos.Where(di => di.DrugId == value.Drug.DrugId).First();
2025-01-06 09:40:32 +08:00
BaseQuantity = value.BaseQuantity.ToString();
//DrugManuNo = DrugManuNos.Where(dm => dm.DrugId == value.DrugId && dm.ManuNo == value.ManuNo).First();
2025-01-06 09:40:32 +08:00
}
SetProperty(ref _channelList, value);
2025-01-06 09:40:32 +08:00
}
}
//private List<ChannelStock>? _channels;
//public List<ChannelStock>? Channels
//{
// get => _channels;
// set => SetProperty(ref _channels, value);
//}
//private ChannelStock _channelStock;
//public ChannelStock Channel
//{
// get { return _channelStock; }
// set
// {
// if (value != null)
// {
// DrugInfo = DrugInfos.Where(di => di.DrugId == value.DrugInfo.DrugId).First();
// BaseQuantity = value.BaseQuantity.ToString();
// //DrugManuNo = DrugManuNos.Where(dm => dm.DrugId == value.DrugId && dm.ManuNo == value.ManuNo).First();
// }
// SetProperty(ref _channelStock, value);
// }
//}
//private DrugManuNo? _drugManuNo;
//public DrugManuNo? DrugManuNo
//{
// get => _drugManuNo;
// set => SetProperty(ref _drugManuNo, value);
//}
//private List<DrugManuNo>? _drugManuNos;
//public List<DrugManuNo>? DrugManuNos
//{
// get => _drugManuNos;
// set => SetProperty(ref _drugManuNos, value);
//}
2025-01-06 09:40:32 +08:00
private List<DrugInfo>? _drugInfos;
public List<DrugInfo>? DrugInfos
{
get => _drugInfos;
set => SetProperty(ref _drugInfos, value);
}
private DrugInfo? _drugInfo;
public DrugInfo? DrugInfo
{
get => _drugInfo;
set
{
SetProperty(ref _drugInfo, value);
//if (_drugInfo != null)
//{
// DrugManuNos = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(m => m.DrugId == _drugInfo.DrugId.ToString()).ToList();
// if (DrugManuNos != null)
// {
// DrugManuNo = DrugManuNos[0];
// }
//}
//else
//{
// DrugManuNo = null;
//}
2025-01-06 09:40:32 +08:00
}
}
//药品基数
private string _baseQuantity;
public string BaseQuantity { get => _baseQuantity; set { SetProperty(ref _baseQuantity, value); } }
private bool _isEnable = true;
public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); }
private int _status = 0;
public int Status { get => _status; set { SetProperty(ref _status, value); } }
public bool KeepAlive => false;
//抽屉号列表
public static List<int> iList = new List<int>();
//第几个抽屉号下标
//public static int iNumber = 0;
//private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public BindBoxPackageWindowViewModel(IEventAggregator eventAggregator)
{
vm = this;
//_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
private void RequestData()
{
_ChannelLists?.Clear();
2025-01-06 09:40:32 +08:00
BaseQuantity = "";
var list = SqlSugarHelper.Db.Queryable<ChannelList>()
2025-01-06 09:40:32 +08:00
//.Includes(cl => cl.channelStocks, cs => cs.DrugInfo,di=>di.drugBase)
.Includes(cl => cl.channelStocks)
.Includes(cl => cl.Drug)
.Where(cl => cl.MachineId.Equals("DM5"))
.Where(cl => cl.DrawerNo == DrawerNo + 1)
.OrderBy(cl => cl.DrugId).ToList();
//if (list != null && list.Count > 0)
//{
// Channels = list.GroupBy(cs =>new { cs.DrugId, cs.ManuNo }).Select(cs =>
// {
// var ret = cs.First();
// ret.Quantity = cs.Sum(itx => itx.Quantity);
// return ret;
// }).ToList();
//}
//else
//{
// Channels = null;
//}
2025-01-06 09:40:32 +08:00
if (list != null && list.Count > 0)
{
_ChannelLists = list;
2025-01-06 09:40:32 +08:00
}
else
{
_ChannelLists = null;
2025-01-06 09:40:32 +08:00
}
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
logger.Info("进入OnNavigatedTo");
RequestDrug();
RequestData();
logger.Info("结束RequestData");
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
//_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public DelegateCommand<string> UpdateDrawerNo
{
get => new DelegateCommand<string>((DrawerNo) =>
{
this.DrawerNo = Convert.ToInt32(DrawerNo);
RequestData();
}
);
}
private void RequestDrug()
{
//var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
//DrugInfos = list;
string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
}
public DelegateCommand BindingDrug
{
get => new DelegateCommand(BindDrugAction);
}
//绑定
private void BindDrugAction()
{
if (DrugInfo == null || BaseQuantity == null)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("请选择药品并输入药品基数");
return;
}
int baseQuantity;
if (!int.TryParse(BaseQuantity, out baseQuantity))
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("药品基数请输入正确的整数");
return;
}
if (_ChannelList != null)
2025-01-06 09:40:32 +08:00
{
int iNum = _ChannelLists.Where(cs => cs.DrugId == DrugInfo.DrugId.ToString()).Count();
2025-01-06 09:40:32 +08:00
if (iNum > 0)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("该药品已在手术间绑定,请选择其他药品");
return;
}
}
var f = SqlSugarHelper.Db.UseTran(() =>
{
//string chnguid = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"].ToString() && cs.DrawerNo == DrawerNo + 1).Select(cs => cs.Id).First();
int colNoCount = SqlSugarHelper.Db.Queryable<ChannelList>()
.Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"].ToString() && cs.DrawerNo == DrawerNo + 1)
.Max(cs=>cs.ColNo);
string chnguid = $"DM5_{(DrawerNo + 1)}_{(colNoCount+1)}_{DrugInfo.DrugId}";
SqlSugarHelper.Db.Insertable(new ChannelList()
{
Id = chnguid,
DrawerNo = (DrawerNo + 1),
ColNo=(colNoCount+1),
DrugId = DrugInfo.DrugId,
BaseQuantity = baseQuantity,
MachineId = "DM5",
DrawerType=1
}).ExecuteCommand();
2025-01-06 09:40:32 +08:00
SqlSugarHelper.Db.Insertable(new ChannelStock()
{
Chnguid = chnguid,
DrawerNo = DrawerNo + 1,
DrugId = DrugInfo.DrugId,
2025-01-06 09:40:32 +08:00
BaseQuantity = baseQuantity,
Id = Guid.NewGuid().ToString(),
MachineId = "DM5",
AddToJJNum = 0,
NeedNum = baseQuantity,
//ManuNo=DrugManuNo.ManuNo
2025-01-06 09:40:32 +08:00
}).ExecuteCommand();
// 保存数据 入库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = "DM5",
DrawerNo = DrawerNo + 1,
DrugId = DrugInfo.DrugId,
2025-01-06 09:40:32 +08:00
Operator = HomeWindowViewModel.Operator?.Id,
OperationTime = DateTime.Now,
Quantity = baseQuantity,
Type = 55,
InvoiceId = "绑定手术间",
}).ExecuteCommand();
return true;
});
if (f.Data)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
SnackbarMessageQueue.Enqueue("药品已绑定手术间");
RequestDrug();
RequestData();
}
}
public void UpdateComboBoxItems(string text)
{
string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
if (string.IsNullOrEmpty(text))
{
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
return;
}
if (DrugInfos != null)
{
DrugInfos.Clear();
}
DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
}
//解绑
public DelegateCommand RemoveBinding
{
get => new DelegateCommand(() => RemoveBindingAction());
}
private void RemoveBindingAction()
{
try
{
if (_ChannelList == null)
2025-01-06 09:40:32 +08:00
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("所选手术间中无可解绑药品");
return;
}
if (_ChannelList != null)
2025-01-06 09:40:32 +08:00
{
//解绑选定行的单个药品
SqlSugarHelper.Db.Deleteable(_ChannelList.channelStocks).ExecuteCommand();
//解绑ChannelList表中的药品
SqlSugarHelper.Db.Deleteable<ChannelList>().Where(cl => cl.Id == _ChannelList.Id).ExecuteCommand();
2025-01-06 09:40:32 +08:00
// 保存数据 入库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = "DM5",
DrawerNo = DrawerNo,
DrugId = _ChannelList.DrugId,
2025-01-06 09:40:32 +08:00
Operator = HomeWindowViewModel.Operator?.Id,
OperationTime = DateTime.Now,
Quantity = _ChannelList.BaseQuantity,
2025-01-06 09:40:32 +08:00
Type = 55,
InvoiceId = "解绑手术间单个药品",
}).ExecuteCommand();
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("请选择要解绑的药品");
////解绑药箱下的所有药品
//Channels.ForEach(item =>
//{
2025-01-06 09:40:32 +08:00
// SqlSugarHelper.Db.Deleteable(item).ExecuteCommand();
2025-01-06 09:40:32 +08:00
// // 保存数据 入库记录
// SqlSugarHelper.Db.Insertable(new MachineRecord()
// {
// MachineId = "DM5",
// DrawerNo = DrawerNo,
// DrugId = item.DrugId.ToString(),
// Operator = HomeWindowViewModel.Operator?.Id,
// OperationTime = DateTime.Now,
// Quantity = item.Quantity,
// Type = 55,
// InvoiceId = "绑定手术间全部药品",
// }).ExecuteCommand();
2025-01-06 09:40:32 +08:00
//});
2025-01-06 09:40:32 +08:00
}
RequestDrug();
RequestData();
}
catch (Exception ex)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("解绑操作异常");
}
}
//保存修改的药品基数
public DelegateCommand SaveCommand
{
get => new DelegateCommand(() =>
{
if (DrugInfo.DrugId != _ChannelList.DrugId)
2025-01-06 09:40:32 +08:00
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("只能修改药品基数,不能更换绑定药品!");
return;
}
int baseQty = 0;
if (int.TryParse(BaseQuantity, out baseQty))
{
logger.Info($"修改药品基数{_ChannelList.BaseQuantity}改为{baseQty}");
if (baseQty > _ChannelList.BaseQuantity)
{
//基数变大,需要补药
_ChannelList.channelStocks[0].NeedNum = baseQty - _ChannelList.BaseQuantity;
}
else
{
_ChannelList.channelStocks[0].NeedNum = 0;
}
_ChannelList.BaseQuantity = baseQty;
_ChannelList.channelStocks[0].BaseQuantity = baseQty;
int iUpdate = SqlSugarHelper.Db.Updateable<ChannelStock>(_ChannelList.channelStocks[0]).ExecuteCommand();
2025-05-13 16:56:35 +08:00
_ChannelList.channelStocks.ForEach(cs=>cs.BaseQuantity= baseQty);
int iBaseUpdate= SqlSugarHelper.Db.Updateable(_ChannelList.channelStocks).UpdateColumns(cs => cs.BaseQuantity).ExecuteCommand();
//更新ChannelList表中的BaseQuantity
int iUpdateChannelList = SqlSugarHelper.Db.Updateable<ChannelList>()
.SetColumns(it => new ChannelList() { BaseQuantity = baseQty })
.Where(it => it.Id == _ChannelList.Id).ExecuteCommand();
if (iUpdate > 0 && iUpdateChannelList > 0)
2025-01-06 09:40:32 +08:00
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
SnackbarMessageQueue.Enqueue("保存修改完成!");
RequestData();
2025-01-06 09:40:32 +08:00
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
SnackbarMessageQueue.Enqueue("保存修改失败!");
}
}
else
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("药品基数只能是正整数,请检查输入!");
return;
}
});
}
//刷新
public DelegateCommand Query
{
get => new DelegateCommand(RequestData);
}
}
}