using DM_Weight.Finger; using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using log4net; using log4net.Core; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using SqlSugar; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DM_Weight.ViewModels { public class ChangeShiftsWindowViewModel : BindableBase, IRegionMemberLifetime, IConfirmNavigationRequest { private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel)); //交班人发药人用户名 private string jiaoFaUsername = App.CurrentFaUserList.UserName ?? ""; public string JiaoFaUsername { get => jiaoFaUsername; set { SetProperty(ref jiaoFaUsername, value); } } //交班人发药人密码 private string jiaoFaPassword; public string JiaoFaPassword { get => jiaoFaPassword; set { SetProperty(ref jiaoFaPassword, value); } } //交班人审核人用户名 private string jiaoShenUsername = App.CurrentShenUserList.UserName ?? ""; public string JiaoShenUsername { get => jiaoShenUsername; set { SetProperty(ref jiaoShenUsername, value); } } //交班人审核人密码 private string jiaoShenPassword; public string JiaoShenPassword { get => jiaoShenPassword; set { SetProperty(ref jiaoShenPassword, value); } } //接班人发药人用户名 private string jieFaUsername; public string JieFaUsername { get => jieFaUsername; set { SetProperty(ref jieFaUsername, value); } } //接班人发药人密码 private string jieFaPassword; public string JieFaPassword { get => jieFaPassword; set { SetProperty(ref jieFaPassword, value); } } //接班人审核人用户名 private string jieShenUsername; public string JieShenUsername { get => jieShenUsername; set { SetProperty(ref jieShenUsername, value); } } //接班人审核人密码 private string jieShenPassword; public string JieShenPassword { get => jieShenPassword; set { SetProperty(ref jieShenPassword, value); } } //接班人发药人 public UserList Operator { get; set; } //接班人审核人 public UserList Reviewer { get; set; } private Boolean _loginBtnEnable = true; public Boolean LoginBtnEnable { get { return _loginBtnEnable; } set { SetProperty(ref _loginBtnEnable, value); } } private string firstLogin = ConfigurationManager.AppSettings["firstLogin"]?.ToString() ?? "operator"; //交班确认按钮是否可用 private bool _jieBanOk = true; public bool JieBanOk { get => _jieBanOk; set { SetProperty(ref _jieBanOk, value); } } //接班确认按钮是否可用 private bool _jiaoBanOk = true; public bool JiaoBanOk { get => _jiaoBanOk; set { SetProperty(ref _jiaoBanOk, value); } } private PortUtil _portUtil; IRegionManager _regionManager; IEventAggregator _eventAggregator; public bool KeepAlive => false; private bool _fingerMsg; public bool FingerMsg { get => _fingerMsg; set => SetProperty(ref _fingerMsg, value); } public ChangeShiftsWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil) { _portUtil = portUtil; _regionManager = regionManager; _eventAggregator = eventAggregator; } #region 交班确认按钮 private bool JiaoBanFYRFlag = false; //交班发药人flag private bool JiaoBanSHRFlag = false; //交班审核人flag public DelegateCommand JiaobanCommand => new DelegateCommand(JiaoBanAction); private void JiaoBanAction() { if (!string.IsNullOrEmpty(JiaoFaUsername) && !string.IsNullOrEmpty(JiaoFaPassword)) { JiaoBanFYRFlag = ChangeShiftsLogin(JiaoFaUsername.Trim(), JiaoFaPassword.Trim()); } else if (!string.IsNullOrEmpty(JiaoShenUsername) && !string.IsNullOrEmpty(JiaoShenPassword)) { JiaoBanSHRFlag = ChangeShiftsLogin(JiaoShenUsername.Trim(), JiaoShenPassword.Trim()); } else { //提示:请输入交班人中发药人或审核人的用户名密码 AlertMsg alertMsg = new AlertMsg { Message = "请输入交班人中发药人或审核人的用户名密码", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } if (JiaoBanFYRFlag || JiaoBanSHRFlag) { JiaoBanOk = false; } } #endregion 交班确认按钮 #region 接班确认按钮 private bool JieBanFYRFlag = false; //接班发药人flag private bool JieBanSHRFlag = false; //接班审核人flag public DelegateCommand JiebanCommand => new DelegateCommand(JiebanAction); private void JiebanAction() { if (!string.IsNullOrEmpty(JieFaUsername) && !string.IsNullOrEmpty(JieFaPassword)) { ChangeShiftsForJieLogin(JieFaUsername.Trim(), JieFaPassword.Trim()); } else if (!string.IsNullOrEmpty(JieShenUsername) && !string.IsNullOrEmpty(JieShenPassword)) { ChangeShiftsForJieLogin(JieShenUsername.Trim(), JieShenPassword.Trim()); } else { //提示:请输入接班人中发药人或审核人的用户名密码 AlertMsg alertMsg = new AlertMsg { Message = "请输入接班人中发药人或审核人的用户名密码", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } if (JieBanFYRFlag || JieBanSHRFlag) { JieBanOk = false; } } #endregion 接班确认按钮 #region 清空按钮 public DelegateCommand ClearOneCommand => new DelegateCommand(ClearAction); private void ClearAction() { JiaoFaPassword = string.Empty; JiaoShenPassword = string.Empty; } #endregion #region 接班人清空按钮 public DelegateCommand ClearTwoCommand => new DelegateCommand(ClearTwoAction); private void ClearTwoAction() { JieFaUsername = string.Empty; JieFaPassword = string.Empty; JieShenUsername = string.Empty; JieShenPassword = string.Empty; } #endregion #region 确认交接 public DelegateCommand ShiftsCommand => new DelegateCommand(ShiftsAction); private void ShiftsAction() { //1验证交班人与接班人是否都已登录验证2写交接信息 if ((JiaoBanFYRFlag || JiaoBanSHRFlag) && (JieBanFYRFlag || JieBanSHRFlag)) { //保存交接班信息(查询当前值班人的最后一条交接班信息(如有则修改状态,没有则插入一条)并写入一条接班人信息) var f = SqlSugarHelper.Db.UseTran(() => { List listHkcChangeShifts = SqlSugarHelper.Db.Queryable() .Where(cs => cs.State == "0") .WhereIF(App.CurrentFaUserList != null && !string.IsNullOrEmpty(App.CurrentFaUserList.UserName), cs => cs.FromOperator == App.CurrentFaUserList.UserName) .WhereIF(App.CurrentShenUserList != null && !string.IsNullOrEmpty(App.CurrentShenUserList.UserName), cs => cs.FromRviewer == App.CurrentShenUserList.UserName) .OrderByDescending(cs => cs.OptState) .ToList(); //List listMachineRecord=SqlSugarHelper.Db.Queryable() //.Where(m=>) if (listHkcChangeShifts != null && listHkcChangeShifts.Count > 0) { //存在则修改,不存在则插入一条 SqlSugarHelper.Db.Updateable(new HkcChangeShifts() { Id = listHkcChangeShifts[0].Id, ToOperator = Operator == null ? "" : Operator.UserName, ToReviewer = Reviewer == null ? "" : Reviewer.UserName, State = "1", OptState = "1", ToDate = DateTime.Now }).UpdateColumns(it => new { it.ToOperator, it.ToReviewer, it.State, it.OptState,it.ToDate }).WhereColumns(it => new { it.Id }).ExecuteCommand(); } else { SqlSugarHelper.Db.Insertable(new HkcChangeShifts() { FromOperator = App.CurrentFaUserList.UserName, FromRviewer = App.CurrentShenUserList.UserName, ToOperator = Operator == null ? "" : Operator.UserName, ToReviewer = Reviewer == null ? "" : Reviewer.UserName, State = "1", OptState = "0", OptDate = DateTime.Now }).ExecuteCommand(); } SqlSugarHelper.Db.Insertable(new HkcChangeShifts() { FromOperator = App.CurrentFaUserList.UserName, FromRviewer = App.CurrentShenUserList.UserName, State = "0", OptState = "0", OptDate = DateTime.Now, ToDate = DateTime.Now }).ExecuteCommand(); return true; }); if (f.Data) { AlertMsg alertMsg = new AlertMsg { Message = "交接班操作完成!", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); } if (!f.IsSuccess) { AlertMsg alertMsg = new AlertMsg { Message = "交接班操作失败!", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); } } } #endregion 确认交接 private NavigationParameters keys = new NavigationParameters(); bool ChangeShiftsLogin(string userName, string passWord) { LoginBtnEnable = false; if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(passWord)) { { UserList userList = SqlSugarHelper.Db.Queryable() .Includes(u => u.Role) .InnerJoin((u, r) => u.RoleId == r.Id) .First(u => u.UserName == userName && ConfigurationManager.AppSettings["machineId"].ToString().Equals(u.MachineId)); if (userList == null) { AlertMsg alertMsg = new AlertMsg { Message = "无此用户", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); userName = ""; passWord = ""; return false; } else if (userList.Role == null) { AlertMsg alertMsg = new AlertMsg { Message = "用户还未设置权限,请联系管理员", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); userName = ""; passWord = ""; return false; } else { if (userList.PassWord == MD5.GetMD5Hash(passWord)) { if (userList.UserName == App.CurrentShenUserList.UserName) { //交班人 指纹验证发药人成功 JiaoBanFYRFlag = true; } else if (userList.UserName == App.CurrentFaUserList.UserName) { //交班人 指纹验证审核人成功 JiaoBanSHRFlag = true; } else { //接班人登录 SetUser(userList); } return true; } else { AlertMsg alertMsg = new AlertMsg { Message = "密码错误", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); passWord = ""; return false; } } } } else { AlertMsg alertMsg = new AlertMsg { Message = "请输入账号或密码", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); return false; } //LoginBtnEnable = true; } void ChangeShiftsForJieLogin(string userName, string passWord) { LoginBtnEnable = false; if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(passWord)) { { UserList userList = SqlSugarHelper.Db.Queryable() .Includes(u => u.Role) .InnerJoin((u, r) => u.RoleId == r.Id) .First(u => u.UserName == userName && ConfigurationManager.AppSettings["machineId"].ToString().Equals(u.MachineId)); if (userList == null) { AlertMsg alertMsg = new AlertMsg { Message = "无此用户", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); userName = ""; passWord = ""; } else if (userList.Role == null) { AlertMsg alertMsg = new AlertMsg { Message = "用户还未设置权限,请联系管理员", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); userName = ""; passWord = ""; } else { if (userList.PassWord == MD5.GetMD5Hash(passWord)) { //接班人登录 SetUser(userList); } else { AlertMsg alertMsg = new AlertMsg { Message = "密码错误", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); passWord = ""; } } } } else { AlertMsg alertMsg = new AlertMsg { Message = "请输入账号或密码", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } //LoginBtnEnable = true; } void ChangeShiftsLoginEvent(FingerprintMsg msg) { logger.Info(msg.ToString()); if (msg.Message.Equals("CONNECT")) { FingerMsg = !msg.Result; } if (LoginBtnEnable) { if (msg.Message.Equals("LOGIN")) { UserList userList = SqlSugarHelper.Db.Queryable() .Includes(u => u.Role) .First(u => u.Id == msg.Id); if (userList == null) { AlertMsg alertMsg = new AlertMsg { Message = "无此用户", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); //Username = ""; //Password = ""; } else if (userList.Role == null) { AlertMsg alertMsg = new AlertMsg { Message = "用户还未设置权限,请联系管理员", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); //Username = ""; //Password = ""; } else { if (userList.UserName == App.CurrentShenUserList.UserName) { //交班人 指纹验证发药人成功 JiaoBanFYRFlag = true; } else if (userList.UserName == App.CurrentFaUserList.UserName) { //交班人 指纹验证审核人成功 JiaoBanSHRFlag = true; } else { //接班人登录 SetUser(userList); } if (JiaoBanFYRFlag || JiaoBanSHRFlag) { JiaoBanOk = false; } if (JieBanFYRFlag || JieBanSHRFlag) { JieBanOk = false; } } } } } void SetUser(UserList user) { // 双人登录模式 { // 如果已经录入了发药人,已经有一个用户登录 if (keys.ContainsKey("operator")) { if (keys.GetValue("operator").Id != user.Id) { keys.Add("reviewer", user); Reviewer = user; JieBanFYRFlag = true; //RaisePropertyChanged("Reviewer"); } else { AlertMsg alertMsg = new AlertMsg { Message = "该发药人账号已登录,请输入不同账号", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } } // 如果已经录入了审核人, 已经有一个用户登录 else if (keys.ContainsKey("reviewer")) { if (keys.GetValue("reviewer").Id != user.Id) { keys.Add("operator", user); Operator = user; //RaisePropertyChanged("Operator"); JieBanSHRFlag = true; } else { AlertMsg alertMsg = new AlertMsg { Message = "该审核人账号已登录,请输入不同账号", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } } // 第一个用户登录 else { if (firstLogin.Equals("operator")) { keys.Add("operator", user); Operator = user; JieBanFYRFlag = true; } else { keys.Add("reviewer", user); Reviewer = user; JieBanSHRFlag = true; } } } } public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } public void OnNavigatedTo(NavigationContext navigationContext) { FingerMsg = false;// !_fingerprintUtil.bIsConnected; _eventAggregator.GetEvent().Subscribe(ChangeShiftsLoginEvent); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { _eventAggregator.GetEvent().Unsubscribe(ChangeShiftsLoginEvent); } } }