using LinqToDB; using LinqToDB.SqlQuery; using log4net; using log4net.Util; using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pages; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; using MasaBlazorApp3.Pojo.Vo; using MasaBlazorApp3.Port; using Microsoft.Extensions.Options; using Mysqlx.Crud; using Radzen.Blazor.Rendering; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MasaBlazorApp3.DataAccess.Impl { public class OrderInfoDao : IOrderInfoDao { private readonly SettingConfig _setting; private AppDataConnection _connection; private GlobalStateService _globalStateService; private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao)); private readonly PortUtil _portUtil; public OrderInfoDao(AppDataConnection connection, IOptions setting, GlobalStateService globalStateService, PortUtil portUtil) { _connection = connection; _setting = setting.Value; _globalStateService = globalStateService; _portUtil = portUtil; } public async Task> GetAllOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip) { //var query = _connection.OrderInfo.AsQueryable(); //query.InnerJoin((oi, od) => oi.OrderNo == od.OrderNo); var query2 = from od in _connection.OrderDetail from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) group od by od.OrderNo into temp select new { temp.Key }; var query = from oi in _connection.OrderInfo from od in query2.InnerJoin(od => od.Key == oi.OrderNo) select oi; if (!String.IsNullOrEmpty(OrderrNo)) { query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); } if (OrderDate != null && OrderDate != DateTime.MinValue) { query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 0); query = query.Where(oi => oi.HisDispFlag == 0); query = query.Where(oi => oi.CancelFlag == 0); int pagedData = await query.CountAsync(); List list = await query //.LoadWith(oi => oi.Detail) //.LoadWith(oi => oi.Detail.Drug) .OrderBy((oi) => oi.RecvDate) .ThenBy((oi => oi.OrderNo)) .Skip((int)skip) .Take((int)take) .ToListAsync(); return new PageData() { TotalDesserts = pagedData, Desserts = list }; } public async Task> getDetailByOrderNo(string OrderrNo) { var query2 = from cl in _connection.ChannelStock where cl.MachineId == _setting.machineId group cl by cl.DrugId into temp select new { temp.Key }; ; var query = from od in _connection.OrderDetail.Where(od => od.OrderNo == OrderrNo) from cl in query2.InnerJoin(c => c.Key == od.DrugId) orderby od.DrugId select od; query = query.LoadWith(od => od.Drug); return await query.ToListAsync(); } public async Task> GetChannelStockByDrugId(string DrugId, String ManuNo, int quantity = 0) { var query = _connection.ChannelStock.AsQueryable(); query = query.Where(cs => cs.MachineId.Equals(_setting.machineId)).Where(cs => cs.DrawerType == 1) .Where(cs => cs.Quantity > 0) .Where(cs => cs.DrugId.Equals(DrugId)); if (quantity > 0) { if (!String.IsNullOrEmpty(ManuNo)) { query = query.Where(cs => cs.ManuNo.Equals(ManuNo)); } } else { if (!String.IsNullOrEmpty(ManuNo)) { query = query.Where(cs => cs.ManuNo.Equals(ManuNo) || cs.Quantity == 0); } } return await query.OrderBy((cs) => cs.EffDate) .ThenBy((cs) => cs.DrawerNo) .ThenBy((cs) => cs.ColNo) .ToListAsync(); } public async Task> getTakeInfoByOrderNo(string OrderrNo) { List tempData = new(); List tempData2 = new(); List details = await this.getDetailByOrderNo(OrderrNo); var flag = true; for (var i = 0; i < details.Count; i++) { //List> tempData = new(); OrderDetail detail = details[i]; // 当前detail取药数量 var Quantity = detail.Quantity; List stockList = await this.GetChannelStockByDrugId(detail.DrugId, detail.SetManuNo, Quantity); // 当前药品的库存总量 var total = stockList.Sum(current => current.Quantity); tempData2.Add(new OrderTakeVo() { Drug = detail.Drug, OrderDetail = detail, StockQuantity = total, Quantity = Quantity }); if (flag) { // 盘点库存是否足够 if (total > Quantity) { for (var j = 0; Quantity > 0; j++) { ChannelStock stock = stockList[j]; if (Quantity > stock.Quantity) { // 取药数量大于库存 tempData.Add(new OrderTakeVo() { Drug = detail.Drug, OrderDetail = detail, ChannelStock = stock, StockQuantity = total, Quantity = stock.Quantity, }); Quantity -= stock.Quantity; } else { //取药数量小于库存 tempData.Add(new OrderTakeVo() { Drug = detail.Drug, OrderDetail = detail, ChannelStock = stock, StockQuantity = total, Quantity = Quantity, }); Quantity = 0; } } } else { // 库存不足 flag = false; } } } if (flag) { return tempData; } else { return tempData2; } } public async Task OrderTakeFinish(List datas) { try { _connection.BeginTransaction(); var flag = true; // 更新处方状态 int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo) .Set(oi => oi.Status, 1) .Update(); if (!(r1 > 0)) { flag = false; logger.Error("处方取药完成更新处方状态失败"); _connection.RollbackTransaction(); return flag; } for (var i = 0; i < datas.Count; i++) { var orderTakeVo = datas[i]; var EffDate = orderTakeVo.ChannelStock.EffDate; if (!DateTime.TryParse(orderTakeVo.ChannelStock.EffDate, out DateTime dEffDate)) { //效期转换出错 if (orderTakeVo.ChannelStock.EffDate != null) { string[] idate = orderTakeVo.ChannelStock.EffDate.Split('/'); foreach (string iS in idate) { if (!string.IsNullOrEmpty(iS.Trim())) { switch (iS.Trim().Length) { case 4: EffDate = iS.Trim(); break; case 2: EffDate += "-" + iS.Trim(); break; case 1: EffDate += "-0" + iS.Trim(); break; } } } } } else { EffDate = dEffDate.ToString("yyyy-MM-dd"); } // 出库记录 int mid = _connection.InsertWithInt32Identity(new MachineRecord() { MachineId = _setting.machineId, DrawerNo = orderTakeVo.ChannelStock.DrawerNo, ColNo = orderTakeVo.ChannelStock.ColNo, DrugId = orderTakeVo.ChannelStock.DrugId, ManuNo = orderTakeVo.ChannelStock.ManuNo, EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 2, Quantity = orderTakeVo.GetQuantity, Operator = _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, InvoiceId = orderTakeVo.OrderDetail.Id.ToString(), }); // 更新库存 int r = _connection.ChannelStock.Where(cs => cs.Id == orderTakeVo.ChannelStock.Id) .Set(cs => cs.Quantity, orderTakeVo.ChannelStock.Quantity - orderTakeVo.GetQuantity) .Update(); // 获取更新完库存之后的药品库存 List list = await _connection.ChannelStock.AsQueryable() .InnerJoin( _connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1), (cs, cl) => cs.ListId == cl.Id, (cs, cl) => cs ) .Where(cs => cs.DrugId.Equals(orderTakeVo.ChannelStock.DrugId)) .ToListAsync(); // 保存账册 int acid = _connection.InsertWithInt32Identity(new AccountBook() { MachineId = _setting.machineId, DrugId = orderTakeVo.ChannelStock.DrugId, ManuNo = orderTakeVo.ChannelStock.ManuNo, EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 2, OutQuantity = orderTakeVo.GetQuantity, AddQuantity = 0, Operator = _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, ManuStock = list.Where(it => it.ManuNo == orderTakeVo.ChannelStock.ManuNo).Sum(it => it.Quantity), TotalStock = list.Sum(it => it.Quantity), InvoiceId = orderTakeVo.OrderDetail.Id.ToString() }); if (mid > 0 && r > 0 && acid > 0) { if (orderTakeVo.ChannelStock.BoardType.ToString().Contains("5")) { await _portUtil.WriteQuantityMethod(orderTakeVo.ChannelStock.Quantity - orderTakeVo.GetQuantity, orderTakeVo.ChannelStock.DrawerNo, orderTakeVo.ChannelStock.ColNo); } } else { flag = false; break; } } if (flag) { _connection.CommitTransaction(); } else { _connection.RollbackTransaction(); } return flag; } catch (Exception ex) { logger.Error("处方取药完成保存数据库失败,错误:" + ex.Message); _connection.RollbackTransaction(); return false; } } public async Task> GetAllCanReturnOrderInfo(string OrderrNo, DateTime OrderDate, int? take, int? skip) { var query2 = from od in _connection.OrderDetail from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) group od by od.OrderNo into temp select new { temp.Key }; var query = from oi in _connection.OrderInfo from od in query2.InnerJoin(od => od.Key == oi.OrderNo) select oi; if (!String.IsNullOrEmpty(OrderrNo)) { query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); } if (OrderDate != null && OrderDate != DateTime.MinValue) { query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 1); query = query.Where(oi => oi.CancelFlag == 1); int pagedData = await query.CountAsync(); List list = await query .OrderBy((oi) => oi.RecvDate) .ThenBy((oi => oi.OrderNo)) .Skip((int)skip) .Take((int)take) .ToListAsync(); return new PageData() { TotalDesserts = pagedData, Desserts = list }; } public async Task> GetMachineRecordByOrderNo(string OrderrNo) { var query = _connection.MachineRecord.AsQueryable(); query = query.InnerJoin( _connection.OrderDetail.Where(od => od.OrderNo.Equals(OrderrNo)), (mr, od) => mr.InvoiceId.Equals(od.Id), (mr, od) => mr ) .Where(md => md.Type == 2) .LoadWith(md => md.Drug) ; return await query.ToListAsync(); } public async Task>> getReturnInfoByOrderNo(string OrderrNo) { List> tempData = new(); List details = await this.GetMachineRecordByOrderNo(OrderrNo); for (var i = 0; i < details.Count; i++) { //List> tempData = new(); MachineRecord detail = details[i]; List stockList = await this.GetChannelStockByDrugId(detail.DrugId, detail.ManuNo); // 当前药品的库存总量 var total = stockList.Sum(current => current.Quantity); // 当前detail出库数量 var Quantity = detail.Quantity; stockList.First().AddQuantity = Quantity; tempData.Add(new OperationVo() { Drug = detail.Drug, data = detail, StockQuantity = total, Quantity = Quantity, ChannelStocks = stockList, }); } return tempData; } public async Task GetDrugManuNo(string drugId, string manuNo) { var query = _connection.DrugManuNo.AsQueryable(); return await query.Where(m => m.DrugId.Equals(drugId)) .Where(m => m.ManuNo.Equals(manuNo)) .FirstAsync(); } public async Task OrderReturnFinish(List> datas, string OrderNo) { try { _connection.BeginTransaction(); var flag = true; // 更新处方状态 int r1 = _connection.OrderInfo.Where(oi => oi.OrderNo == OrderNo) .Set(oi => oi.Status, 0) .Update(); if (!(r1 > 0)) { flag = false; logger.Error("处方取药完成更新处方状态失败"); _connection.RollbackTransaction(); return flag; } for (var i = 0; i < datas.Count; i++) { var operationVo = datas[i]; List stocks = operationVo.ChannelStocks.Where(cs => cs.ReturnQuantity > 0).ToList(); // 更新取出记录状态 var r2 = _connection.MachineRecord.Where(cs => cs.Id == operationVo.data.Id) .Set(cs => cs.Status, 2) .Set(cs => cs.ReturnQuantity1, operationVo.data.Quantity).Update(); if (r2 > 0) { } else { flag = false; break; } for (var j = 0; j < stocks.Count; j++) { var channelStock = stocks[j]; // 更新库存 var q = _connection.ChannelStock.Where(cs => cs.Id == channelStock.Id) .Set(cs => cs.Quantity, channelStock.Quantity + channelStock.ReturnQuantity); if (String.IsNullOrEmpty(channelStock.ManuNo) || (channelStock.Quantity == 0 && !channelStock.ManuNo.Equals(operationVo.data.ManuNo))) { DrugManuNo drugManuNo = await GetDrugManuNo(channelStock.DrugId, operationVo.data.ManuNo); channelStock.Dmnguid = drugManuNo.Id; channelStock.ManuNo = drugManuNo.ManuNo; channelStock.EffDate = drugManuNo.EffDate.ToString(); q = q.Set(cs => cs.Dmnguid, drugManuNo.Id) .Set(cs => cs.ManuNo, drugManuNo.ManuNo) .Set(cs => cs.EffDate, drugManuNo.EffDate.ToString()); } int r = q.Update(); // 退回记录 int mid = _connection.InsertWithInt32Identity(new MachineRecord() { MachineId = _setting.machineId, DrawerNo = channelStock.DrawerNo, ColNo = channelStock.ColNo, DrugId = channelStock.DrugId, ManuNo = channelStock.ManuNo, EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 31, Quantity = channelStock.ReturnQuantity, Operator = _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, InvoiceId = operationVo.data.InvoiceId.ToString(), GetId = operationVo.data.Id }); // 获取更新完库存之后的药品库存 List list = await _connection.ChannelStock.AsQueryable() .InnerJoin( _connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1), (cs, cl) => cs.ListId == cl.Id, (cs, cl) => cs ) .Where(cs => cs.DrugId.Equals(channelStock.DrugId)) .ToListAsync(); // 保存账册 int acid = _connection.InsertWithInt32Identity(new AccountBook() { MachineId = _setting.machineId, DrugId = channelStock.DrugId, ManuNo = channelStock.ManuNo, EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 2, OutQuantity = channelStock.ReturnQuantity, AddQuantity = 0, Operator = _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, ManuStock = list.Where(it => it.ManuNo == channelStock.ManuNo).Sum(it => it.Quantity), TotalStock = list.Sum(it => it.Quantity), InvoiceId = operationVo.data.InvoiceId }); if (mid > 0 && r > 0 && acid > 0) { if (channelStock.BoardType.ToString().Contains("5")) { await _portUtil.WriteQuantityMethod(channelStock.Quantity - channelStock.ReturnQuantity, channelStock.DrawerNo, channelStock.ColNo); } } else { flag = false; break; } } } if (flag) { _connection.CommitTransaction(); } else { _connection.RollbackTransaction(); } return flag; } catch (Exception ex) { logger.Error("处方取药完成保存数据库失败,错误:" + ex.Message); _connection.RollbackTransaction(); return false; } } /// /// 获取药箱中的用药信息 /// /// /// /// /// /// public async Task> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip) { var query2 = from od in _connection.OrderDetail from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) group od by od.OrderNo into temp select new { temp.Key }; var query = from oi in _connection.OrderInfo from od in query2.InnerJoin(od => od.Key == oi.OrderNo) select oi; if (!String.IsNullOrEmpty(OrderrNo)) { query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); } if (OrderDate != null && OrderDate != DateTime.MinValue) { query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 0); query = query.Where(oi => oi.HisDispFlag == 0); query = query.Where(oi => oi.CancelFlag == 0); //query = query.Where(oi => oi.DoctorCode == box); int pagedData = await query.CountAsync(); List list = await query //.LoadWith(oi => oi.DetailList) .OrderBy((oi) => oi.RecvDate) .ThenBy((oi => oi.OrderNo)) .Skip((int)skip) .Take((int)take) .ToListAsync(); if (list != null && list.Count > 0) { for (int i = 0; i < list.Count; i++) { for (int j = 0; j < list[i].DetailList.Count; j++) { list[i].DetailList[j].Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailList[j].DrugId).FirstOrDefaultAsync(); } } } //var query2 = from od in _connection.OrderDetail // from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) // group od by od.OrderNo into temp // select new { temp.Key }; //var query = from oi in _connection.OrderInfo // from od in query2.InnerJoin(od => od.Key == oi.OrderNo) // select oi; //if (!String.IsNullOrEmpty(OrderrNo)) //{ // query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); //} //if (OrderDate != null && OrderDate != DateTime.MinValue) //{ // query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); //} //query = query.Where(oi => oi.Status == 0); //query = query.Where(oi => oi.HisDispFlag == 0); //query = query.Where(oi => oi.CancelFlag == 0); ////query = query.Where(oi => oi.DoctorCode == box); //int pagedData = await query.CountAsync(); //List list = await query // .LoadWith(oi => oi.Detail) // .LoadWith(oi => oi.Detail.Drug) // .OrderBy((oi) => oi.RecvDate) // .ThenBy((oi => oi.OrderNo)) // .Skip((int)skip) // .Take((int)take) // .ToListAsync(); //if (list != null && list.Count > 0) //{ // for (int i = 0; i < list.Count; i++) // { // //list[i].Detail = await _connection.OrderDetail.AsQueryable() // // .Where(od => od.OrderNo == list[i].OrderNo) // // .LoadWith(od => od.Drug) // // .ToListAsync(); // } //} return new PageData() { TotalDesserts = pagedData, Desserts = list }; } /// /// 获取所有药箱号 /// /// /// public async Task GetDrawerNum(string machineId) { int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); return ints; } //核对处方 public async Task CheckOrderInfo(IList selectedOrderInfos, int DrawerNo) { try { _connection.BeginTransaction(); bool bFlag = true; logger.Info($"管理员{_globalStateService.Operator.NickName}开始确认手麻单"); string empChannelStock = string.Empty; for (int i = 0; i < selectedOrderInfos.Count; i++) { OrderInfo oi = selectedOrderInfos[i]; //更新处方状态 if (oi.Status == 1) { int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update(); _connection.Insert(new OrderFinish() { OrderNo = oi.OrderNo, PatientId = oi.PatientId, Pharmacy = oi.Pharmacy, State = 2, //WinNo = DrawerNo + 1 + "号手术间", Operator = _globalStateService.Operator.NickName, }); } int drawerNo = DrawerNo; if (oi.DetailList != null && oi.DetailList.Count > 0) { for (int j = 0; j < oi.DetailList.Count; j++) { ChannelStock cs = _connection.ChannelStock.AsQueryable() .Where(cs => cs.DrugId == oi.DetailList[j].DrugId && cs.ManuNo == oi.DetailList[j].SetManuNo // && cs.EffDate == oi._OrderDetail.SetEffDate && cs.MachineId.Equals(_setting.boxMachineId) && cs.DrawerNo == drawerNo && cs.Quantity >= oi.DetailList[j].Quantity).First(); if (cs == null) { logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存"); continue; } cs.Quantity = cs.Quantity - oi.DetailList[j].Quantity; //cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity; logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}"); // 更新数据 库存信息 _connection.Update(cs); //更新ChannelList对应的总库存 ChannelList channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs.MachineId) && cl.Id.Equals(cs.ListId) && cl.DrawerNo.Equals(cs.DrawerNo)).FirstOrDefault(); channelList.TotalQuantity = channelList.TotalQuantity - oi.DetailList[j].Quantity; _connection.Update(channelList); // 获取更新完库存后的药品库存 List nowChannels = _connection.ChannelStock.AsQueryable() .Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId)) .Where(it => it.DrugId.Equals(cs.DrugId)) .Where(it => it.ManuNo.Equals(cs.ManuNo)) .Where(it => it.DrawerType == 1) .ToList(); if (cs != null) { _connection.Insert(new MachineRecord() { MachineId = _setting.machineId, DrawerNo = cs.DrawerNo, ColNo = cs.ColNo, DrugId = cs.DrugId, ManuNo = cs.ManuNo, EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = _globalStateService.Operator?.Id, Reviewer = _globalStateService.Reviewer?.Id, OperationTime = DateTime.Now, Quantity = oi.DetailList[j].Quantity, Type = 2, InvoiceId = oi.OrderNo //, StockQuantity = nowChannels.Sum(it => it.Quantity) }); //查询上一条账册中的空瓶数 AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 1 || ab.Type == 2) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First(); //保存账册 int iInsertResult = _connection.Insert(new AccountBookG2() { DrugId = oi.DetailList[j].DrugId, Type = 2, Department = oi.DeptName, OrderNo = oi.OrderNo, ManuNo = cs.ManuNo, EffDate = cs.EffDate, OutQuantity = oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), CreateTime = DateTime.Now, InvoiceNo = oi.OrderNo, ManuStock = nowChannels.Sum(it => it.Quantity), TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailList[j].Quantity, ShoushuJian = drawerNo.ToString() }); //修改凌晨生成的日结存与总结存数据 AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 3) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) .Where(ab => ab.ManuNo == cs.ManuNo) .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); if (accountBookG2Day != null) { accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity; _connection.Update(accountBookG2Day); } else { //生成日结存时可能没有该库位的绑定信息,需要写入日结存 int iDayResult = _connection.Insert(new AccountBookG2() { DrugId = oi.DetailList[j].DrugId, Type = 3, ManuNo = cs.ManuNo, EffDate = cs.EffDate, YQuantity = 0, ManuStock = oi.DetailList[j].Quantity, TotalStock = oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), InvoiceNo = "日结存" }); if (iDayResult <= 0) { logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}"); } } //修改凌晨生成的日结存与总结存数据 AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 4) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); if (accountBookG2Total != null) { accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity; _connection.Update(accountBookG2Total); } else { //生成总结存时可能没有该库位的绑定信息,需要写入总结存 int iTotalResult = _connection.Insert(new AccountBookG2() { DrugId = oi.DetailList[j].DrugId, Type = 4, YQuantity = 0, ManuStock = oi.DetailList[j].Quantity, TotalStock = oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), InvoiceNo = "总结存" }); if (iTotalResult <= 0) { logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}"); } } } } } } return true; logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单"); if (bFlag) { _connection.CommitTransaction(); return true; } } catch (Exception ex) { _connection.RollbackTransaction(); logger.Info($"核对处方异常{ex.Message}"); return false; } } } }