using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.util; using log4net; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace DM_Weight.ViewModels { public class ChangeShiftsDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime { public string Title => "交接班"; public bool KeepAlive => true; //交班人 发药人 public UserList Operator { get; set; } private bool _operatorLogin = false; public bool OperatorLogin { get => _operatorLogin; set { SetProperty(ref _operatorLogin, value); } } //private _brushesOperator = Brushes.Green; //public System.Drawing.Brush BrushesOperator //{ // get=> _brushesOperator; // set { SetProperty(ref _brushesOperator, value);} //} //交班人 审核人 public UserList Reviewer { get; set; } private bool _reviewerLogin = false; public bool ReviewerLogin { get => _reviewerLogin; set { SetProperty(ref _reviewerLogin, value); } } //private System.Drawing.Brush _brushesReviewer=Brushes.Green; //public System.Drawing.Brush BrushesReviewer //{ // get=> _brushesReviewer; // set // { // SetProperty(ref _brushesReviewer, value); // } //} //接班人 发药人 public UserList JieOperator { get; set; } //接班人 审核人 public UserList JieReviewer { get; set; } //当前操作人 public UserList CurrentUser { get; set; } //双人登录还是单人登录 private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1"); //第一个登录的是发药人还是接班人 private string firstLogin = ConfigurationManager.AppSettings["firstLogin"]?.ToString() ?? "operator"; //验证按钮可用状态 private bool _jiaoBanOk = true; public bool JiaoBanOk { get => _jiaoBanOk; set { SetProperty(ref _jiaoBanOk, value); } } private NavigationParameters keys = new NavigationParameters(); public bool SingleLogin { get => ReadAppSetting("loginMode") == "1"; //get => loginMode == 1; } public bool MultiLogin { //get => loginMode == 2; get => ReadAppSetting("loginMode") == "2"; } //private PortUtil _portUtil; private Boolean _loginBtnEnable = true; public Boolean LoginBtnEnable { get { return _loginBtnEnable; } set { SetProperty(ref _loginBtnEnable, value); } } public string Password { get { return password; } set { SetProperty(ref password, value); } } public string Username { get { return username; } set { SetProperty(ref username, value); } } private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel)); private string username; private string password; private bool _fingerMsg; public bool FingerMsg { get => _fingerMsg; set => SetProperty(ref _fingerMsg, value); } public event Action RequestClose; public DelegateCommand BtnCloseCommand { get => new DelegateCommand(() => { // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); }); } //确认交接 public DelegateCommand ShiftsCommand => new DelegateCommand(ShiftsAction); private void ShiftsAction() { if (Operator != null && !OperatorLogin) { AlertMsg alertMsg = new AlertMsg { Message = "交班发药人需要系统验证!", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); return; } if (Reviewer != null && !ReviewerLogin) { AlertMsg alertMsg = new AlertMsg { Message = "交班审核人需要系统验证!", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); return; } if (JieOperator == null && JieReviewer == null) { AlertMsg alertMsg = new AlertMsg { Message = "接班发药人或审核需要系统验证!", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); return; } //1验证交班人与接班人是否都已登录验证2写交接信息 //if ((Operator != null || Reviewer != null) && (JieOperator != null || JieReviewer != null)) //{ DateTime dt = DateTime.Now; //保存交接班信息(查询当前值班人的最后一条交接班信息(如有则修改状态,没有则插入一条)并写入一条接班人信息) //var f = SqlSugarHelper.Db.UseTran(() => var f = SqlSugarHelper.Db.UseTran(() => { List listHkcChangeShifts = SqlSugarHelper.Db.Queryable() .Where(cs => cs.State == "0") .WhereIF(Operator != null && !string.IsNullOrEmpty(Operator.UserName), cs => cs.FromOperator == Operator.UserName) .WhereIF(Reviewer != null && !string.IsNullOrEmpty(Reviewer.UserName), cs => cs.FromRviewer == Reviewer.UserName) .OrderByDescending(cs => cs.OptState) .ToList(); if (listHkcChangeShifts != null && listHkcChangeShifts.Count > 0) { //存在则修改,不存在则插入一条 SqlSugarHelper.Db.Updateable(new HkcChangeShifts() { Id = listHkcChangeShifts[0].Id, ToOperator = JieOperator == null ? "" : JieOperator.UserName, ToReviewer = JieReviewer == null ? "" : JieReviewer.UserName, State = "1", ToDate = dt }).UpdateColumns(it => new { it.ToOperator, it.ToReviewer, it.State, it.ToDate }).WhereColumns(it => new { it.Id }).ExecuteCommand(); } else { SqlSugarHelper.Db.Insertable(new HkcChangeShifts() { FromOperator = Operator == null ? "" : Operator.UserName, FromRviewer = Reviewer == null ? "" : Reviewer.UserName, ToOperator = JieOperator == null ? "" : JieOperator.UserName, ToReviewer = JieReviewer == null ? "" : JieReviewer.UserName, State = "1", OptState = "0", OptDate = dt, Machineid = ConfigurationManager.AppSettings["machineId"] ?? "DM1" }).ExecuteCommand(); } SqlSugarHelper.Db.Insertable(new HkcChangeShifts() { FromOperator = JieOperator == null ? "" : JieOperator.UserName, FromRviewer = JieReviewer == null ? "" : JieReviewer.UserName, State = "0", OptState = "0", OptDate = dt, //ToDate = dt, Machineid = ConfigurationManager.AppSettings["machineId"] ?? "DM1" }).ExecuteCommand(); //插入交接班报表数据信息 string strSql = @"SELECT drug.drug_name,drug.DRUG_SPEC,c.manu_no,d.useNum,d.getNum,sum(quantity) as surplus, (SELECT d2.manu_stock FROM account_book_g2 d2 WHERE d2.drug_id = c.`drug_id` and d2.manu_no=c.manu_no AND d2.create_date < @beforeDate ORDER BY d2.create_date DESC,d2.id DESC LIMIT 1) AS beforeNum from channel_stock c LEFT JOIN drug_info drug on c.drug_id=drug.drug_id left JOIN (SELECT drug_id,manu_no, SUM(IF(d1.`type` = 1, d1.quantity, 0)) AS getNum,SUM(IF(d1.`type` = 2, d1.quantity, 0)) AS useNum FROM dm_machine_record d1 WHERE d1.`type` IN (1, 2) AND d1.`operation_time` >= @startDate and d1.`operation_time` <=@endDate and d1.machine_id=@machineId GROUP BY d1.Drug_ID ,d1.manu_no) d on c.drug_id=d.drug_id and c.manu_no=d.manu_no WHERE c.machine_id=@machineId and c.drug_id is not NULL GROUP BY c.Drug_ID ,c.manu_no UNION SELECT drug.drug_name,drug.DRUG_SPEC,d.manu_no,d.useNum,d.getNum,sum(quantity) as surplus,(SELECT d2.manu_stock FROM account_book_g2 d2 WHERE d2.drug_id = d.`drug_id` and d2.manu_no=d.manu_no AND d2.create_date < @beforeDate ORDER BY d2.create_date DESC,d2.id DESC LIMIT 1) AS beforeNum from (SELECT drug_id,manu_no, SUM(IF(d1.`type` = 1, d1.quantity, 0)) AS getNum,SUM(IF(d1.`type` = 2, d1.quantity, 0)) AS useNum FROM dm_machine_record d1 WHERE d1.`type` IN (1, 2) AND d1.`operation_time` >= @startDate and d1.`operation_time` <=@endDate and d1.machine_id=@machineId GROUP BY d1.Drug_ID ,d1.manu_no) d LEFT JOIN drug_info drug on d.drug_id=drug.drug_id left JOIN channel_stock c on c.drug_id=d.drug_id and c.manu_no=d.manu_no AND c.machine_id=@machineId GROUP BY d.Drug_ID ,d.manu_no "; List shiftsReports = SqlSugarHelper.Db.SqlQueryable(strSql) .AddParameters(new { machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1", beforeDate = listHkcChangeShifts[0].OptDate, startDate = listHkcChangeShifts[0].OptDate, endDate = dt }) .Select(it => new ShiftsReport()) .ToList(); if (shiftsReports != null && shiftsReports.Count > 0) { for (int i = 0; i < shiftsReports.Count; i++) { SqlSugarHelper.Db.Insertable(new ShiftsReport() { OptDate = dt, DrugName = shiftsReports[i].DrugName, DrugSpec = shiftsReports[i].DrugSpec, BeforeNum = shiftsReports[i].BeforeNum ?? 0, GetNum = shiftsReports[i].GetNum ?? 0, UseNum = shiftsReports[i].UseNum ?? 0, ManuNo = shiftsReports[i].ManuNo, Surplus = shiftsReports[i].Surplus ?? 0, FromOperator = Operator == null ? "" : Operator.Nickname, FromReviewer = Reviewer == null ? "" : Reviewer.Nickname, ToOperator = JieOperator == null ? "" : JieOperator.Nickname, ToReviewer = JieReviewer == null ? "" : JieReviewer.Nickname, MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1" }).ExecuteCommand(); } } return true; }); if (f.Data) { AlertMsg alertMsg = new AlertMsg { Message = "交接班操作完成!", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); } if (!f.IsSuccess) { AlertMsg alertMsg = new AlertMsg { Message = "交接班操作失败!", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); } //} //else //{ // AlertMsg alertMsg = new AlertMsg // { // Message = "交接班需要交班人与接班人全部系统验证!", // Type = MsgType.ERROR, // }; // _eventAggregator.GetEvent().Publish(alertMsg); //} } //用户名密码登录 public DelegateCommand LoginCommand => new DelegateCommand(LoginAction); //清空 public DelegateCommand ClearCommand => new DelegateCommand(ClearAction); private void ClearAction() { Username = string.Empty; Password = string.Empty; } private void LoginAction() { Login(); } void Login() { 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 = string.Empty; Password = string.Empty; } else if (userList.Role == null) { AlertMsg alertMsg = new AlertMsg { Message = "用户还未设置权限,请联系管理员", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); Username = string.Empty; Password = string.Empty; } else { if (userList.PassWord == MD5.GetMD5Hash(Password)) { Username = string.Empty; Password = string.Empty; HkcChangeShifts changeOperator = GetOperator(); if (changeOperator != null) { if (userList.UserName == changeOperator.FromOperator&&!OperatorLogin) { Operator = userList; RaisePropertyChanged("Operator"); //交班人的发药人登录 OperatorLogin = true; if (((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null && JieReviewer != null) { JiaoBanOk = false; } } else if (userList.UserName == changeOperator.FromRviewer&&!ReviewerLogin) { //交班人的审核人登录 Reviewer = userList; RaisePropertyChanged("Reviewer"); ReviewerLogin = true; if (((Operator != null && OperatorLogin) || (Operator == null)) && JieOperator != null && JieReviewer != null) { JiaoBanOk = false; } } else { if (keys.ContainsKey("operator")) { //if (userList.UserName == (JieOperator == null ? "" : JieOperator.UserName)) //{ // AlertMsg alertMsg = new AlertMsg // { // Message = "接班发药人不能与审核人相同", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); //} //else { keys.Add("reviewer", userList); JieReviewer = userList; RaisePropertyChanged("JieReviewer"); if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null) { JiaoBanOk = false; } } } else { //if (userList.UserName == (JieReviewer == null ? "" : JieReviewer.UserName)) //{ // AlertMsg alertMsg = new AlertMsg // { // Message = "接班发药人不能与审核人相同", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); //} //else { keys.Add("operator", userList); JieOperator = userList; RaisePropertyChanged("JieOperator"); if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieReviewer != null) { JiaoBanOk = false; } } } } } } else { AlertMsg alertMsg = new AlertMsg { Message = "密码错误", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); Password = string.Empty; } } } else { AlertMsg alertMsg = new AlertMsg { Message = "请输入账号或密码", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } LoginBtnEnable = true; } //void SetUser(UserList user) //{ // // 双人登录模式 // { // // 如果已经录入了发药人,已经有一个用户登录 // if (keys.ContainsKey("operator")) // { // if (keys.GetValue("operator").Id != user.Id) // { // keys.Add("reviewer", user); // JieReviewer = user; // RaisePropertyChanged("JieReviewer"); // } // 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); // JieOperator = user; // RaisePropertyChanged("JieOperator"); // } // else // { // AlertMsg alertMsg = new AlertMsg // { // Message = "该审核人账号已登录,请输入不同账号", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); // } // } // // 第一个用户登录 // else // { // if (firstLogin.Equals("operator")) // { // keys.Add("operator", user); // JieOperator = user; // RaisePropertyChanged("JieOperator"); // } // else // { // keys.Add("reviewer", user); // JieReviewer = user; // RaisePropertyChanged("JieReviewer"); // } // } // } //} 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 { HkcChangeShifts changeOperator = GetOperator(); if (changeOperator != null) { if (userList.UserName == changeOperator.FromOperator) { Operator = userList; RaisePropertyChanged("Operator"); //交班人的发药人登录 OperatorLogin = true; if (((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null && JieReviewer != null) { JiaoBanOk = false; } } else if (userList.UserName == changeOperator.FromRviewer) { //交班人的审核人登录 Reviewer = userList; RaisePropertyChanged("Reviewer"); ReviewerLogin = true; if (((Operator != null && OperatorLogin) || (Operator == null)) && JieOperator != null && JieReviewer != null) { JiaoBanOk = false; } } else { if (keys.ContainsKey("operator")) { //if (userList.UserName == (JieOperator == null ? "" : JieOperator.UserName)) //{ // AlertMsg alertMsg = new AlertMsg // { // Message = "接班发药人不能与审核人相同", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); //} //else { keys.Add("reviewer", userList); JieReviewer = userList; RaisePropertyChanged("JieReviewer"); if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null) { JiaoBanOk = false; } } } else { //if (userList.UserName == (JieReviewer == null ? "" : JieReviewer.UserName)) //{ // AlertMsg alertMsg = new AlertMsg // { // Message = "接班发药人不能与审核人相同", // Type = MsgType.ERROR // }; // _eventAggregator.GetEvent().Publish(alertMsg); //} //else { keys.Add("operator", userList); JieOperator = userList; RaisePropertyChanged("JieOperator"); if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieReviewer != null) { JiaoBanOk = false; } } } } } } } } } IEventAggregator _eventAggregator; ////private SqlSugarScope SqlSugarHelper.Db; public ChangeShiftsDialogViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; ////this.SqlSugarHelper.Db = sqlSugarScope; } public bool CanCloseDialog() { return true; } public void OnDialogClosed() { _eventAggregator.GetEvent().Unsubscribe(ChangeShiftsLoginEvent); } public void OnDialogOpened(IDialogParameters parameters) { HkcChangeShifts changeOperator = GetOperator(); if (changeOperator != null) { Operator = SqlSugarHelper.Db.Queryable().Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Single(u => u.UserName == changeOperator.FromOperator); Reviewer = SqlSugarHelper.Db.Queryable().Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Single(u => u.UserName == changeOperator.FromRviewer); } FingerMsg = false;// !_fingerprintUtil.bIsConnected; _eventAggregator.GetEvent().Subscribe(ChangeShiftsLoginEvent); } //查询值班人信息 private HkcChangeShifts GetOperator() { //查询发药人及审核人 HkcChangeShifts changeOperator = SqlSugarHelper.Db.Queryable().Single(change => change.State == "0"); //if (changeOperator != null) //{ // Operator = SqlSugarHelper.Db.Queryable().Single(u => u.UserName == changeOperator.FromOperator); // Reviewer = SqlSugarHelper.Db.Queryable().Single(u => u.UserName == changeOperator.ToOperator); //} return changeOperator; } //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题 public string ReadAppSetting(string key) { string xPath = $"/configuration/appSettings//add[@key='{key}']"; XmlDocument doc = new XmlDocument(); string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; doc.Load(exeFileName + ".dll.config"); XmlNode node = doc.SelectSingleNode(xPath); return node.Attributes["value"].Value.ToString(); } } }