using Google.Protobuf.WellKnownTypes; using LinqToDB; using log4net; using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; using MasaBlazorApp3.Util; using Microsoft.Extensions.Options; using System.Data; using System.Xml.Linq; namespace MasaBlazorApp3.DataAccess.Impl { public class UserDao : IUserDao { //private MyContext Context; private readonly AppDataConnection _connection; private readonly SettingConfig _setting; private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao)); //public UserDao(MyContext context) //{ // Context = context; //} public UserDao(AppDataConnection connection, IOptions setting) { _connection = connection; _setting = setting.Value; } public async Task> GetAllByNickname(string nickname, int? take, int? skip) { var query = _connection.User.AsQueryable(); if (!String.IsNullOrEmpty(nickname)) { query = query.Where(r => r.NickName.IndexOf(nickname) > -1); } query = query.Where(u => u.MachineId == _setting.boxMachineId); List list = await query .LoadWith(u => u.role) .OrderBy(u => u.Id) .Skip((int)skip) .Take((int)take) .ToListAsync(); int pagedData = await query.CountAsync(); return new PageData() { TotalDesserts = pagedData, Desserts = list }; } public User GetById(int id) { return _connection.User.LoadWith(u => u.role).FirstOrDefault(u => u.Id == id && u.MachineId == _setting.boxMachineId); } public User GetByUsername(string username) { return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username && u.MachineId == _setting.boxMachineId); } public int InsertUser(User user) { user.MachineId = _setting.boxMachineId; user.Password = MD5.GetMD5Hash("123456").ToLower(); #region 交接柜添加用户时毒麻柜同时也添加用户 User userDM = user; userDM.MachineId = _setting.machineId; _connection.InsertWithInt32Identity(userDM); #endregion return _connection.InsertWithInt32Identity(user); } public bool UpdateUser(User user) { #region 交接柜修改用户时毒麻柜同时也修改用户 User userOld = _connection.User .Where(u => u.Id == user.Id).FirstOrDefault(); if(userOld != null) { User userDm=_connection.User.Where(u => u.Username == userOld.Username&&u.MachineId==_setting.machineId).FirstOrDefault(); if(userDm!=null) { userDm.NickName = user.NickName; userDm.Username = user.Username; userDm.RoleId = user.RoleId; _connection.Update(userDm); } } #endregion var statement = _connection.User .Where(u => u.Id == user.Id) .Set(u => u.NickName, user.NickName) .Set(u => u.Username, user.Username) .Set(u => u.RoleId, user.RoleId); //if(!String.IsNullOrEmpty(user.Password)) //{ // statement.Set(u => user.Password, MD5.GetMD5Hash(user.Password).ToLower()); //} return statement.Update() > 0; } public bool DeleteeUser(int id) { #region 交接柜删除用户时毒麻柜同时也删除用户 User userOld = _connection.User .Where(u => u.Id == id).FirstOrDefault(); if (userOld != null) { User userDm = _connection.User.Where(u => u.Username == userOld.Username && u.MachineId == _setting.machineId).FirstOrDefault(); if (userDm != null) { _connection.User.Where(u => u.Id == userDm.Id).Delete(); } } #endregion return _connection.User.Where(u => u.Id == id).Delete() > 0; } //重置用户密码 public bool ResetPassword(int id) { var statement = _connection.User.Where(u => u.Id == id).Set(u => u.Password, MD5.GetMD5Hash("123456").ToLower()); return statement.Update() > 0; } public async Task UpdateSign(int id, string sign) { var statement = _connection.User .Where(u => u.Id == id) .Set(u => u.Sign, Convert.FromBase64String(sign)); //if(!String.IsNullOrEmpty(user.Password)) //{ // statement.Set(u => user.Password, MD5.GetMD5Hash(user.Password).ToLower()); //} return (await statement.UpdateAsync()) > 0; } //修改密码 public bool UpdateUserPassword(User user) { var statement = _connection.User .Where(u => u.Id == user.Id) .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower()); return statement.Update() > 0; } //查询当前值班信息 public HkcChangeShifts GetOnDuty() { try { return _connection.HkcChangeShifts.Where(cs => cs.MachineId == _setting.boxMachineId && cs.State == "0").FirstOrDefault(); } catch (Exception ex) { logger.Info($"查询当前值班信息异常{ex.Message}"); return null; } } //保存交接班信息 public async Task UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew) { try { _connection.BeginTransaction(); var insertResult = _connection.InsertWithInt32Identity(changeShiftNew); int updateResult = _connection.HkcChangeShifts .Where(cs => cs.Id == changeShift.Id) .Set(cs => cs.State, "1") .Set(cs => cs.ToDate, DateTime.Now) .Set(cs => cs.ToOperator, changeShift.ToOperator).Update(); //插入交接班时药品数据信息 var channelStockList = _connection.ChannelStock .Where(cs => (cs.MachineId == _setting.machineId || cs.MachineId == _setting.boxMachineId) && cs.DrawerType == 1) .GroupBy(cs => cs.DrugId) .Select(g => new { drugId = g.Key, sumQuantity = g.Sum(cs => cs.Quantity) }).ToList(); if (channelStockList != null && channelStockList.Count > 0) { //将药品库存信息写入交接明细表 for (int i = 0; i < channelStockList.Count; i++) { //查询药品上次交接的明细,用于记录处方数 HkcChangeShiftsDetail? historyList = _connection.HkcChangeShiftsDetail .Where(d => d.DrugId == channelStockList[i].drugId && d.ChangeshiftsId == changeShift.Id).FirstOrDefault(); HkcChangeShiftsDetail detail = new HkcChangeShiftsDetail() { ChangeshiftsId = insertResult, DrugId = channelStockList[i].drugId, RealNumber = channelStockList[i].sumQuantity, OrderNumber = historyList != null ? historyList.OrderNumber + historyList.RealNumber - channelStockList[i].sumQuantity : 0 }; var insertDetailResult = _connection.InsertWithInt32Identity(detail); } } if (insertResult <= 0 || updateResult <= 0) { _connection.RollbackTransaction(); return false; } else { _connection.CommitTransaction(); return true; } } catch (Exception ex) { logger.Error($"更新交接班信息异常: {ex.Message}"); return false; } } } }