HuNan_DM/DM_Weight/ViewModels/AccountWindowViewModel.cs

443 lines
17 KiB
C#

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 SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace DM_Weight.ViewModels
{
public class AccountWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
public static AccountWindowViewModel vm;
//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 = 8;
//public int PageSize
//{
// get => _pageSize;
// set
// {
// SetProperty(ref _pageSize, value);
// }
//}
//private int _totalCount = 0;
//public int TotalCount
//{
// get => _totalCount;
// set
// {
// SetProperty(ref _totalCount, value);
// }
//}
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);
}
RequestData();
}
}
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);
}
RequestData();
}
}
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>
/// 账册
/// </summary>
private List<AccountModel> _accountList = new();
public List<AccountModel> AccountList
{
get => _accountList;
set => SetProperty(ref _accountList, value);
}
/// <summary>
/// 药品
/// </summary>
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 = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
//}
RequestData();
}
}
/// <summary>
/// 账册类型1入2出3总结存
/// </summary>
private List<AccountType> _accountTypeList = new List<AccountType>() {
new AccountType
{
AccountTypeName="借入",
AccountTypeValue=1
},
new AccountType
{
AccountTypeName="发出",
AccountTypeValue=2
},
new AccountType
{
AccountTypeName="日结存",
AccountTypeValue=5
}
};
public List<AccountType>? AccountTypeList
{
get => _accountTypeList;
set
{
SetProperty(ref _accountTypeList, value);
RequestData();
}
}
private AccountType? _accountType;
public AccountType AccountType
{
get => _accountType;
set
{
SetProperty(ref _accountType, value);
RequestData();
}
}
MachineRecordService _machineRecordService;
ChannelStockService _channelStockService;
IEventAggregator _eventAggregator;
////private SqlSugarScope SqlSugarHelper.Db;
public AccountWindowViewModel(MachineRecordService machineRecord, ChannelStockService channelStockService, IEventAggregator eventAggregator)
{
_machineRecordService = machineRecord;
_channelStockService = channelStockService;
////this.SqlSugarHelper.Db = sqlSugarScope;
_eventAggregator = eventAggregator;
vm = this;
}
void RequestData()
{
int totalCount = 0;
AccountList = _machineRecordService.ReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, DrugInfo == null ? "" : DrugInfo.DrugId ?? "");
//for (int i = 0; i < accountList.Count; i++)
//{
// if (accountList[i].DrugInfo is null)
// {
// DrugInfo drug= new DrugInfo();
// drug.DrugId = accountList[i].DrugId;
// drug.DrugName = accountList[i].DrugName;
// drug.DrugSpec = accountList[i].DrugSpec;
// drug.Dosage= accountList[i].Dosage;
// drug.PackUnit= accountList[i].PackUnit;
// drug.Manufactory= accountList[i].Manufactory;
// accountList[i].DrugInfo= drug;
// }
//}
//ICollectionView vw = CollectionViewSource.GetDefaultView(accountList);
//vw.GroupDescriptions.Add(new PropertyGroupDescription("DrugInfo"));
}
private void GetAllDrugInfos()
{
var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
DrugInfos = list;
DrugInfo = list[0];
}
/// <summary>
/// 生成日结存
/// </summary>
public DelegateCommand DayAccountBook
{
get => new DelegateCommand(() =>
{
DayAccountAction();
RequestData();
});
}
//生成一条当日没有记录的账册记录
private void DayAccountAction()
{
try
{
string machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1";
//根据已生成的日结存记录
int deleteNum = SqlSugarHelper.Db.Deleteable<MachineRecord>()
.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<AccountModel> accountList = _machineRecordService.ReportAccountBook(nowDate, null, 0);
//库存中的记录
List<ChannelStockCount> channelStockList = _channelStockService.GetAll();
//List<ChannelStock> channelStockInsert = new List<ChannelStock>();
if (accountList != null && accountList.Count() > 0)
{
//账册中有记录则与库存记录对比
for (int i = 0; i < channelStockList.Count; i++)
{
string drugId = channelStockList[i].DrugId;
int Count = accountList.Where(cs => cs.DrugId == drugId).Count();
if (Count <= 0)
{
inQuantity = 0;
outQuantity = 0;
}
else
{
inQuantity = accountList.Where(cs => cs.DrugId == drugId).Sum(cs => cs.InQuantity);
outQuantity = accountList.Where(cs => cs.DrugId == drugId).Sum(cs => cs.OutQuantity);
}
// 获取药品总库存
int channelStockQuantity = SqlSugarHelper.Db.Queryable<ChannelStock>()
.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 = "",//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 = "日结存",//InvoiceId,
ReturnQuantity1 = inQuantity, //当日入库量总数
ReturnQuantity2 = outQuantity, //当日出库量总数
StockQuantity = channelStockQuantity,
ManunoQuantity = 0,
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;
int channelStockQuantity = SqlSugarHelper.Db.Queryable<ChannelStock>()
.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 = "",// 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 = 0,
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<SnackbarEvent>().Publish(alertMsg);
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "生成日结存失败",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
RequestData();
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
//public void InsertDayAccount()
//{
// // 保存数据 出/入库记录
// SqlSugarHelper.Db.Insertable(new MachineRecord()
// {
// MachineId = it.MachineId,
// DrawerNo = it.DrawerNo,
// ColNo = it.ColNo,
// DrugId = it.DrugId,
// ManuNo = it.ManuNo,
// EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
// Operator = HomeWindowViewModel.Operator?.Id,
// Reviewer = HomeWindowViewModel.Reviewer?.Id,
// OperationTime = DateTime.Now,
// Quantity = it.AddQuantity,
// Type = 1,
// InvoiceId = InvoiceId,
// StockQuantity = nowChannels.Sum(it => it.Quantity),
// ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity),
// SupplierDept = Invoice.PharmacyName1 ?? ConfigurationManager.AppSettings["supplierDept"].ToString(),
// ReceiveDept = Invoice.PharmacyName2 ?? ConfigurationManager.AppSettings["receiveDept"].ToString()
// }).ExecuteCommand();
//}
/// <summary>
/// 导出账册
/// </summary>
public DelegateCommand DownloadAccountBook
{
get => new DelegateCommand(() =>
{
GridReportUtil.PrintReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, DrugInfo == null ? "" : DrugInfo.DrugId);
});
}
/// <summary>
/// 刷新
/// </summary>
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
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<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) || di.DrugId.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
//药品信息
GetAllDrugInfos();
//查询表格数据
RequestData();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}