XiangTan_DM/DM_Weight/ViewModels/DrugListWindowViewModel.cs

398 lines
13 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using DM_Weight.Models;
using DM_Weight.select;
using DM_Weight.util;
using log4net.Repository.Hierarchy;
using log4net;
using DM_Weight.msg;
using Prism.Events;
using System.Configuration;
using static Unity.Storage.RegistrationSet;
namespace DM_Weight.ViewModels
{
public class DrugListWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
{
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);
}
}
IEventAggregator _eventAggregator;
public DrugListWindowViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
private List<DrugInfo> _drugInfos;
public List<DrugInfo> DrugInfos
{
get { return _drugInfos; }
set { SetProperty(ref _drugInfos, value); }
}
private DrugInfo _selectedDrug = new();
public DrugInfo SelectedDrug
{
get
{
return _selectedDrug;
}
set
{
if (value != null)
{
SetProperty(ref _selectedDrug, value);
GetManuNos();
}
else
{
SetProperty(ref _selectedDrug, new());
Manunos = null;
SelectedDrug.drugBase = new();
}
}
}
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 OrderTakeSelect _selectedItem = StaticSelects[0];
/// <summary>
/// 查询条件 查询字段
/// </summary>
public OrderTakeSelect SelectedItem
{
get { return _selectedItem; }
set
{
SetProperty(ref _selectedItem, value);
RequestData();
}
}
private string? _searchValue;
/// <summary>
/// 查询条件 查询字段值
/// </summary>
public string? SearchValue
{
get { return _searchValue; }
set
{
SetProperty(ref _searchValue, value);
RequestData();
}
}
private List<DrugManuNo> _manunos;
public List<DrugManuNo> Manunos
{
get { return _manunos; }
set { SetProperty(ref _manunos, value); }
}
private DrugManuNo _selectedManuno = new DrugManuNo();
public DrugManuNo SelectedManuno
{
get { return _selectedManuno; }
set { SetProperty(ref _selectedManuno, value ?? new()); }
}
public bool KeepAlive => false;
public DelegateCommand Query
{
get => new DelegateCommand(() =>
{
RequestData();
});
}
public DelegateCommand AddDrugCommand
{
get => new DelegateCommand(() =>
{
try
{
//查询最大药品id并+1赋值给新增药品
string maxDrugId = SqlSugarHelper.Db.Queryable<DrugInfo>().Max(it => it.DrugId);
SelectedDrug.DrugId = maxDrugId + 1;
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Insertable(SelectedDrug).ExecuteCommand();
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId,
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "新增成功",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "新增失败",
Type = MsgType.INFO,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
RequestData();
}
catch (Exception ex)
{
ILog logger = LogManager.GetLogger(typeof(DrugListWindowViewModel));
logger.Info($"添加数据异常:{ex.ToString()}");
AlertMsg alertMsg = new AlertMsg
{
Message = $"添加数据异常:{ex.ToString()}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
}, () => SelectedDrug.DrugId == null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand EditDrugCommand
{
get => new DelegateCommand(() =>
{
var f = SqlSugarHelper.Db.UseTran(() =>
{
SqlSugarHelper.Db.Updateable(SelectedDrug).UpdateColumns(d => new { d.DrugName, d.Manufactory, d.PyCode, d.PackUnit, d.MaxStock, d.DrugSpec }).ExecuteCommand();
if (SelectedDrug.drugBase == null)
{
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId,
MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
}
else
{
//查询药品基数是否存在,存在则修改不存在则新增
DrugBase drugBase = SqlSugarHelper.Db.Queryable<DrugBase>()
.Where(db => db.BaseId == SelectedDrug.drugBase.BaseId).First();
if (drugBase == null)
{
SqlSugarHelper.Db.Insertable(new DrugBase()
{
DrugId = SelectedDrug.DrugId,
MachineId = ConfigurationManager.AppSettings["machineId"]??"DM1",
BaseQuantity = SelectedDrug.drugBase.BaseQuantity
}).ExecuteCommand();
}
else
{
SqlSugarHelper.Db.Updateable(new DrugBase() { BaseQuantity = SelectedDrug.drugBase.BaseQuantity }).UpdateColumns(bs => new { bs.BaseQuantity }).Where(bs => bs.BaseId == SelectedDrug.drugBase.BaseId).ExecuteCommand();
}
}
});
if (f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "修改完成",
Type = MsgType.INFO,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "修改失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
RequestData();
}, () => SelectedDrug.DrugId !=null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand AddManuCommand
{
get => new DelegateCommand(() =>
{
if (!string.IsNullOrEmpty(SelectedManuno.EffDate) && !string.IsNullOrEmpty(SelectedManuno.ManuNo))
{
SelectedManuno.Id = Guid.NewGuid().ToString();
SelectedManuno.DrugId = SelectedDrug.DrugId.ToString();
SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
SqlSugarHelper.Db.Insertable(SelectedManuno).ExecuteCommand();
GetManuNos();
}
}, () => SelectedDrug.DrugId !=null).ObservesProperty(() => SelectedDrug);
}
public DelegateCommand EditManuCommand
{
get => new DelegateCommand(() =>
{
SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
SqlSugarHelper.Db.Updateable(SelectedManuno).UpdateColumns(m => new { m.ManuNo, m.EffDate }).ExecuteCommand();
GetManuNos();
}, () => !string.IsNullOrEmpty(SelectedManuno.DrugId)).ObservesProperty(() => SelectedManuno);
}
//这个方法用于拦截请求,continuationCallback(true)就是不拦截continuationCallback(false)拦截本次操作
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
continuationCallback(true);
}
//接收导航传过来的参数
public void OnNavigatedTo(NavigationContext navigationContext)
{
//查询表格数据
RequestData();
}
void GetManuNos()
{
Manunos = SqlSugarHelper.Db.Queryable<DrugManuNo>()
.WhereIF(SelectedDrug != null, (di) => di.DrugId.Equals(SelectedDrug.DrugId))
.Select(di => di)
.ToList();
}
void RequestData()
{
int totalCount = 0;
DrugInfos = SqlSugarHelper.Db.Queryable<DrugInfo>()
.Includes(di => di.drugBase)
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (di) => di.DrugId.ToString().Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (di) => di.DrugName.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (di) => di.PyCode.Contains(SearchValue))
.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (di) => di.DrugBarcode.Contains(SearchValue))
//.Select(di => di)
.ToPageList(PageNum, PageSize, ref totalCount);
foreach(DrugInfo di in DrugInfos)
{
if(di.drugBase==null)
{
di.drugBase = new DrugBase();
}
}
TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
}
//每次导航的时候该实列用不用重新创建true是不重新创建,false是重新创建
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}