using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Report; using DM_Weight.Services; using DM_Weight.util; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DM_Weight.ViewModels { internal class SpecialAccountWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime { public static SpecialAccountWindowViewModel vm; private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); private DateTime? nowDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); public DateTime? StartDate { get => _startDate; set { if (value != null) { SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0)); } else { SetProperty(ref _startDate, value); } } } private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59); public DateTime? EndDate { get => _endDate; set { if (value != null) { TimeSpan ershisi = new TimeSpan(23, 59, 59); SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59)); } else { SetProperty(ref _endDate, value); } } } private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); /// /// 账册 /// private List _accountList = new(); public List AccountList { get => _accountList; set => SetProperty(ref _accountList, value); } /// /// 药品 /// private List? _drugInfos; public List? DrugInfos { get => _drugInfos; set => SetProperty(ref _drugInfos, value); } private DrugInfo? _drugInfo; public DrugInfo? DrugInfo { get => _drugInfo; set { SetProperty(ref _drugInfo, value); } } MachineRecordService _machineRecordService; ChannelStockService _channelStockService; IEventAggregator _eventAggregator; public SpecialAccountWindowViewModel(MachineRecordService machineRecord, ChannelStockService channelStockService, IEventAggregator eventAggregator) { _machineRecordService = machineRecord; _channelStockService = channelStockService; _eventAggregator = eventAggregator; vm = this; } private void GetAllDrugInfos() { var list = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList(); DrugInfos = list; DrugInfo = list[0]; } /// /// 生成日结存 /// public DelegateCommand DayAccountBook { get => new DelegateCommand(() => { DayAccountAction(); }); } //生成一条当日没有记录的账册记录 private void DayAccountAction() { try { string machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"; //根据已生成的日结存记录 int deleteNum = SqlSugarHelper.Db.Deleteable() .Where(cs => cs.Type.Equals(5) && cs.OperationTime.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd") && cs.MachineId.Equals(machineId)).ExecuteCommand(); int inQuantity = 0; //当日入库量 int outQuantity = 0; //当日出库量 //查询账册中所有记录,与库存中的记录做比校,如果账册中没有,则添加一条,有则添加一条总日结存 List accountList = _machineRecordService.ReportAccountBook(nowDate, null, 0); //库存中的记录 List channelStockList = _channelStockService.GetAll(); //List channelStockInsert = new List(); if (accountList != null && accountList.Count() > 0) { //账册中有记录则与库存记录对比 for (int i = 0; i < channelStockList.Count; i++) { string drugId = channelStockList[i].DrugId; string manuNo = channelStockList[i].ManuNo; int quantity = channelStockList[i].Quantity; int Count = accountList.Where(cs => cs.DrugId == drugId && cs.ManuNo == manuNo).Count(); if (Count <= 0) { inQuantity = 0; outQuantity = 0; } else { inQuantity = accountList.Where(cs => cs.DrugId == drugId && cs.ManuNo == manuNo).Sum(cs => cs.InQuantity); outQuantity = accountList.Where(cs => cs.DrugId == drugId && cs.ManuNo == manuNo).Sum(cs => cs.OutQuantity); } // 获取药品总库存 int channelStockQuantity = SqlSugarHelper.Db.Queryable() .Where(cs => cs.DrugId.Equals(drugId)).Sum(it => it.Quantity); //没有直接插入 // 保存数据 出/入库记录 string InvoiceId = "Account_" + CurrentTimeMillis(); SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = channelStockList[i].MachineId, DrawerNo = 0,//channelStockList[i].DrawerNo, ColNo = 0,// channelStockList[i].ColNo,FV DrugId = drugId, ManuNo = manuNo, EffDate = null,// !String.IsNullOrEmpty(channelStockList[i].EffDate) ? DateTime.ParseExact(channelStockList[i].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = HomeWindowViewModel.Operator?.Id, Reviewer = HomeWindowViewModel.Reviewer?.Id, OperationTime = DateTime.Now, Quantity = 0, Type = 5, InvoiceId = "日结存",//InvoiceId, ReturnQuantity1 = inQuantity, //当日入库量总数 ReturnQuantity2 = outQuantity, //当日出库量总数 StockQuantity = channelStockQuantity, ManunoQuantity = quantity, SupplierDept = string.Empty,// ConfigurationManager.AppSettings["supplierDept"].ToString(), ReceiveDept = string.Empty,//ConfigurationManager.AppSettings["receiveDept"].ToString() }).ExecuteCommand(); } } else { for (int i = 0; i < channelStockList.Count; i++) { //账册中没有记录则把库存中的所有数据都要生成一条账册记录 // 保存数据 出/入库记录 // 获取药品总库存 string drugId = channelStockList[i].DrugId; string manuNo = channelStockList[i].ManuNo; int quantity = channelStockList[i].Quantity; int channelStockQuantity = SqlSugarHelper.Db.Queryable() .Where(cs => cs.DrugId.Equals(drugId)).Sum(it => it.Quantity); string InvoiceId = "Account_" + CurrentTimeMillis(); SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = channelStockList[i].MachineId, DrawerNo = 0,//channelStockList[i].DrawerNo, ColNo = 0,//channelStockList[i].ColNo, DrugId = drugId, ManuNo = manuNo,// channelStockList[i].ManuNo, EffDate = null,// !String.IsNullOrEmpty(channelStockList[i].EffDate) ? DateTime.ParseExact(channelStockList[i].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = HomeWindowViewModel.Operator?.Id, Reviewer = HomeWindowViewModel.Reviewer?.Id, OperationTime = DateTime.Now, Quantity = 0, Type = 5, InvoiceId = "日结存",// string.Empty,//InvoiceId, ReturnQuantity1 = inQuantity, //当日入库量总数 ReturnQuantity2 = outQuantity, //当日出库量总数 StockQuantity = channelStockQuantity, ManunoQuantity = quantity, SupplierDept = string.Empty,//ConfigurationManager.AppSettings["supplierDept"].ToString(), ReceiveDept = string.Empty,//ConfigurationManager.AppSettings["receiveDept"].ToString() }).ExecuteCommand(); } } AlertMsg alertMsg = new AlertMsg { Message = "日结存已生成完成", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); } catch (Exception ex) { AlertMsg alertMsg = new AlertMsg { Message = "生成日结存失败", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); } } public long CurrentTimeMillis() { return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; } /// /// 导出账册 /// public DelegateCommand DownloadAccountBook { get => new DelegateCommand(() => { GridReportUtil.PrintReportSpecialAccount(EndDate ?? DateTime.Now, DrugInfo == null ? "" : DrugInfo.DrugId); }); } /// /// 导出账册2 /// public DelegateCommand DownloadAccountBook2 { get => new DelegateCommand(() => { GridReportUtil.PrintReportSpecialAccount2New(EndDate ?? DateTime.Now, DrugInfo == null ? "" : DrugInfo.DrugId); }); } public bool KeepAlive => true; 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 FROM `drug_info` d"; if (string.IsNullOrEmpty(text)) { DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList(); return; } if (DrugInfos != null) { DrugInfos.Clear(); } DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text) || di.DrugId.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList(); } public void OnNavigatedTo(NavigationContext navigationContext) { //药品信息 GetAllDrugInfos(); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } } }