using Dm.filter.log; //using DM_Dal.Models; using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using DM_Weight.ViewModels; using log4net; using log4net.Repository.Hierarchy; using Microsoft.Data.SqlClient; using Microsoft.Web.WebView2.Core; //using MySqlConnector; using MySql.Data.MySqlClient; using Mysqlx.Crud; using Mysqlx.Expr; //using MySqlConnector; using Newtonsoft.Json; using SCHelper.Database; using SqlSugar.SplitTableExtensions; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing.Printing; using System.Linq; using System.Reflection; using System.Reflection.PortableExecutable; using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Automation; using System.Windows.Documents; using System.Windows.Ink; namespace DM_Weight.Services { public class SqlHelperService { private readonly ILog logger = LogManager.GetLogger(typeof(SqlHelperService)); //public static string connStr = ConfigurationManager.AppSettings["database"].ToString(); public static string connStr = ConfigurationManager.ConnectionStrings["database"].ToString(); static string machine_id = ConfigurationManager.AppSettings["machineId"] ?? "DM1"; private static readonly DateTime Jan1st1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); static string SupplierDept = ConfigurationManager.AppSettings["supplierDept"].ToString(); static string ReceiveDept = ConfigurationManager.AppSettings["receiveDept"].ToString(); //指纹登录 public UserList CheckUserByFingerPrinter(int fingerPrinterId) { UserList? user = null; using (MySqlConnection con = new MySqlConnection(connStr)) { logger.Info($"connStr:{connStr}"); try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } logger.Info($"数据库连接状态{con.State}"); string sql = @"select ul.id as id,ul.user_id,ul.User_name as userName,r.id as rid,r.role_name,r.permissions,r.machine_id from user_list ul INNER JOIN role r on ul.machine_role_id=r.id where ul.Id=@ID and ul.machine_id=@machine_id and r.machine_id=@machine_id"; MySqlCommand cmd = new MySqlCommand(sql, con); cmd.Parameters.Clear(); MySqlParameter[] mySqlParameter = new MySqlParameter[] { new MySqlParameter("ID", fingerPrinterId), new MySqlParameter("machine_id", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")) }; cmd.Parameters.AddRange(mySqlParameter); //执行语句 MySqlDataReader reader = cmd.ExecuteReader(); logger.Info("MySqlDataReader读数据"); while (reader.Read()) { user = new UserList(); user.Id = reader.GetInt32("id"); user.UserName = reader["user_id"] is DBNull ? "" : reader.GetString("user_id"); //user.UserName = reader["id"] is DBNull ? "" : reader.GetString("id"); user.Nickname = reader["userName"] is DBNull ? "" : reader.GetString("userName"); user.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); RoleDm role = new RoleDm(); role.Id = reader.GetInt32("rid"); //role.Permissions = reader["permissions"] is DBNull ? "" : reader.GetString("permissions"); role.RoleName = reader["role_name"] is DBNull ? "" : reader.GetString("role_name"); role.Permissions = JsonConvert.DeserializeObject>(reader["permissions"] is DBNull ? "" : reader.GetString("permissions")); // JsonConvert.SerializeObject(reader.GetString("permissions")).ToList(); user.Role = role; } reader.Close(); //logger.Info($"sql:{sql}"); return user; } } //private Task connOpen(MySqlConnection con) //{ // return Task.Run(() => // { // if (con.State != System.Data.ConnectionState.Closed) // { // con.Close(); // } // try // { // con.Open(); // } // catch (Exception ex) // { // logger.Info($"Open失败:{ex.Message}"); // } // }); //} //用户名密码登录 public UserList CheckUserForLogin(string userName) { UserList user = null; using (MySqlConnection con = new MySqlConnection(connStr)) { logger.Info($"connStr:{connStr}"); try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } logger.Info($"数据库连接状态{con.State}"); string sql = @"select ul.id as id,ul.User_name as userName,ul.pass_word,r.id as rId,r.role_name,r.permissions,r.machine_id from user_list ul INNER JOIN role r on ul.machine_role_id=r.id where ul.user_ID=@UserName and ul.machine_id=@machine_id and r.machine_id=@machine_id"; //MySqlDataAdapter da= new MySqlDataAdapter(sql,con); MySqlCommand cmd = new MySqlCommand(sql, con); cmd.Parameters.Clear(); MySqlParameter[] mySqlParameter = new MySqlParameter[] { new MySqlParameter("UserName", userName), new MySqlParameter("machine_id", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")) }; cmd.Parameters.AddRange(mySqlParameter); //执行语句 MySqlDataReader reader = cmd.ExecuteReader(); logger.Info("MySqlDataReader读数据"); while (reader.Read()) { user = new UserList(); user.Id = reader.GetInt32("id"); user.UserName = reader["userName"] is DBNull ? "" : reader.GetString("userName"); //user.UserName = reader["id"] is DBNull ? "" : reader.GetString("id"); user.Nickname = reader["userName"] is DBNull ? "" : reader.GetString("userName"); user.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); RoleDm role = new RoleDm(); role.Id = reader.GetInt32("rId"); //role.Permissions = reader["permissions"] is DBNull ? "" : reader.GetString("permissions"); role.RoleName = reader["role_name"] is DBNull ? "" : reader.GetString("role_name"); role.Permissions = JsonConvert.DeserializeObject>(reader["permissions"] is DBNull ? "" : reader.GetString("permissions")); // JsonConvert.SerializeObject(reader.GetString("permissions")).ToList(); user.Role = role; user.PassWord = reader["pass_word"] is DBNull ? "" : reader.GetString("pass_word"); } reader.Close(); logger.Info($"sql:{sql}"); return user; } } //获取抽屉数量 public int FindDrawerCount() { int count = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { logger.Info($"connStr:{connStr}"); try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } logger.Info($"数据库连接状态{con.State}"); string sql = @"SELECT COUNT(1) FROM (SELECT COUNT(row_no) FROM channel_list WHERE ( drawer_type <> 3 ) AND (machine_id = @machine_id) GROUP BY row_no ) CountTable"; MySqlCommand cmd = new MySqlCommand(sql, con); cmd.Parameters.Clear(); MySqlParameter mySqlParameter = new MySqlParameter("machine_id", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")); cmd.Parameters.Add(mySqlParameter); //执行语句 count = Convert.ToInt32(cmd.ExecuteScalar()); } return count; } /// /// 处方取药 /// /// /// /// /// public List GetOrderInfos(string Code, string SearchValue, string OrderDate, int pageNum, int pageSize, ref int totalCount) { List orderInfos = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { logger.Info($"connStr:{connStr}"); try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } logger.Info($"数据库连接状态{con.State}"); totalCount = 0; pageNum = (pageNum - 1) * pageSize; string countSql = @" SELECT COUNT(1) FROM (SELECT oi.order_id FROM order_info oi Inner JOIN order_detail od ON ( oi.order_no = od.order_no ) Inner JOIN (SELECT chnguid,machine_id,row_no,col_no,pos_no,drug_id,drawer_type,board_type,state FROM channel_list WHERE ( drawer_type = 1 ) AND (machine_id = @machineId) GROUP BY drug_id ) t ON ( od.drug_id = t.drug_id ) WHERE ( oi.dm_status = 0 ) AND ( oi.his_disp_flag = 0 ) AND ( oi.cancel_flag = 0 ) "; if (!string.IsNullOrEmpty(OrderDate)) { countSql += $" AND (DATE_FORMAT(oi.recv_date, '%Y-%m-%d') = '{OrderDate}' ) "; } if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("OrderNo")) countSql += $" AND ( oi.order_no = '{SearchValue}' ) "; else countSql += $" AND ( oi.patient_id = '{SearchValue}' ) "; } countSql += " GROUP BY oi.order_no ) CountTable "; MySqlCommand cmdCount = new MySqlCommand(countSql, con); cmdCount.Parameters.Clear(); MySqlParameter[] mySqlParameterCount = new MySqlParameter[] { new MySqlParameter("machineId", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")), new MySqlParameter("OrderDate", OrderDate) }; cmdCount.Parameters.AddRange(mySqlParameterCount); //执行语句 totalCount = Convert.ToInt32(cmdCount.ExecuteScalar()); string sql = $@" SELECT oi.order_id,oi.pharmacy,oi.order_no,oi.patient_id,oi.p_name,oi.sex,oi.age,oi.id_number, oi.patient_card, oi.invoice_no,oi.patient_no,oi.doctor_name,oi.order_date,oi.charge_date,oi.recv_date, oi.dept_name,oi.disease,oi.order_type,oi.charge_type,oi.state,oi.his_disp_flag,oi.cancel_flag,oi.dm_status,oi.costs FROM order_info oi Inner JOIN order_detail od ON ( oi.order_no = od.order_no ) Inner JOIN (SELECT chnguid,machine_id,row_no,col_no,pos_no,drug_id,drawer_type,board_type,state FROM channel_list WHERE ( drawer_type = 1 ) AND (machine_id = @machineId) GROUP BY drug_id ) t ON ( od.drug_id = t.drug_id ) WHERE ( oi.dm_status = 0 ) AND ( oi.his_disp_flag = 0 ) AND ( oi.cancel_flag = 0 ) "; if (!string.IsNullOrEmpty(OrderDate)) { sql += " AND (DATE_FORMAT(oi.recv_date, '%Y-%m-%d') = @OrderDate ) "; } if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("OrderNo")) sql += $" AND ( oi.order_no = '{SearchValue}' ) "; else sql += $" AND ( oi.patient_id = '{SearchValue}' ) "; } sql += " GROUP BY oi.order_no LIMIT @Start,@End"; MySqlCommand cmd = new MySqlCommand(sql, con); cmd.Parameters.Clear(); MySqlParameter[] mySqlParameter = new MySqlParameter[] { new MySqlParameter("machineId", (ConfigurationManager.AppSettings["machineId"] ?? "DM1")), new MySqlParameter("OrderDate", OrderDate), new MySqlParameter("Start",pageNum), new MySqlParameter("End",pageSize) }; cmd.Parameters.AddRange(mySqlParameter); //执行语句 MySqlDataReader reader = cmd.ExecuteReader(); logger.Info("MySqlDataReader读数据"); while (reader.Read()) { OrderInfo order = new OrderInfo(); order.OrderId = reader.GetInt32("order_id"); order.Pharmacy = reader["pharmacy"] is DBNull ? "" : reader.GetString("pharmacy"); order.OrderNo = reader["order_no"] is DBNull ? "" : reader.GetString("order_no"); order.PatientId = reader["patient_id"] is DBNull ? "" : reader.GetString("patient_id"); order.PName = reader["p_name"] is DBNull ? "" : reader.GetString("p_name"); order.Sex = reader["sex"] is DBNull ? "" : reader.GetString("sex"); order.Age = reader["age"] is DBNull ? "" : reader.GetString("age"); order.IdNumber = reader["id_number"] is DBNull ? "" : reader.GetString("id_number"); order.PatientCard = reader["patient_card"] is DBNull ? "" : reader.GetString("patient_card"); order.InvoiceNo = reader["invoice_no"] is DBNull ? "" : reader.GetString("invoice_no"); order.PatientNo = reader["patient_no"] is DBNull ? "" : reader.GetString("patient_no"); order.DoctorName = reader["doctor_name"] is DBNull ? "" : reader.GetString("doctor_name"); order.OrderDate = reader["order_date"] is DBNull ? DateTime.Now.AddYears(-1) : reader.GetDateTime("order_date"); order.ChargeDate = reader["charge_date"] is DBNull ? DateTime.Now.AddYears(-1) : reader.GetDateTime("charge_date"); order.RecvDate = reader["recv_date"] is DBNull ? DateTime.Now.AddYears(-1) : reader.GetDateTime("recv_date"); order.DeptName = reader["dept_name"] is DBNull ? "" : reader.GetString("dept_name"); order.Disease = reader["disease"] is DBNull ? "" : reader.GetString("disease"); order.OrderType = reader["order_type"] is DBNull ? "" : reader.GetString("order_type"); order.ChargeType = reader["charge_type"] is DBNull ? "" : reader.GetString("charge_type"); order.State = reader.GetInt32("state"); order.HisDispFlag = reader.GetInt32("his_disp_flag"); order.CancelFlag = reader.GetInt32("cancel_flag"); order.DmStatus = reader.GetInt32("dm_status"); order.Costs = reader["costs"] is DBNull ? 0 : reader.GetInt32("costs"); orderInfos.Add(order); } reader.Close(); logger.Info($"sql:{sql}"); return orderInfos; } } /// /// 根据处方号获取处方详情 /// /// /// public List GetOrderDetails(string orderNo, int orderId) { List orderDetails = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { logger.Info($"connStr:{connStr}"); try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } logger.Info($"数据库连接状态{con.State}"); string strSql = @"SELECT od.id,od.patient_id,od.order_no,od.charge_date,od.drug_id,od.quantity,od.order_unit, od.unit_convercoef,od.set_manu_no,od.set_eff_date,od.use_discrip,od.use_frequ,od.use_once,od.use_by, od.use_self,od.use_dosage,D.drug_name FROM order_detail od INNER JOIN DRUG_INFO D ON od.DRUG_ID=D.DRUG_ID Inner JOIN (SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE ( drawer_type = 1 ) AND (machine_id = @machineId) GROUP BY drug_id ) t ON ( od.drug_id = t.drug_id ) WHERE ( od.order_no = @orderNo and od.order_id=@orderId)"; MySqlCommand cmd = new MySqlCommand(strSql, con); cmd.Parameters.Clear(); MySqlParameter[] parameters = new MySqlParameter[] { new MySqlParameter("machineId",(ConfigurationManager.AppSettings["machineId"] ?? "DM1")), new MySqlParameter("orderNo",orderNo), new MySqlParameter("orderId",orderId) }; cmd.Parameters.AddRange(parameters); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { OrderDetail od = new OrderDetail(); DrugInfo oi = new DrugInfo(); od.Id = reader.GetInt32("id"); od.PatientId = reader["patient_id"] is DBNull ? "" : reader.GetString("patient_id"); od.OrderNo = reader["order_no"] is DBNull ? "" : reader.GetString("order_no"); od.ChargeDate = reader["charge_date"] is DBNull ? DateTime.Now.AddYears(-1) : reader.GetDateTime("charge_date"); od.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); od.Quantity = reader["quantity"] is DBNull ? 0 : Convert.ToInt32(reader["quantity"]); od.OrderUnit = reader["order_unit"] is DBNull ? "" : reader.GetString("order_unit"); od.SetEffDate = reader["set_eff_date"] is DBNull ? "" : reader.GetString("set_eff_date"); od.SetManuNo = reader["set_manu_no"] is DBNull ? "" : reader.GetString("set_manu_no"); oi.DrugName = reader["drug_name"] is DBNull ? "" : reader.GetString("drug_name"); od.DrugInfo = oi; orderDetails.Add(od); } reader.Close(); } return orderDetails; } /// /// 获取药品对应库存信息 /// /// public List GetChannelStocks(string drugId) { List channelStocks = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { try { if (con.State != ConnectionState.Open) { con.Open(); } } catch (Exception ex) { logger.Info($"Open失败:{ex.ToString()};连接状态:{con.State}"); logger.Info("再次Open"); con.Open(); } string strSql = @"SELECT cs.chsguid,cs.chnguid,cs.machine_id,cs.row_no,cs.col_no,cs.pos_no,cs.drug_id,cs.manu_no, cs.eff_date,cs.quantity,cs.drawer_type,cs.board_type,cs.state,D.Drug_Name,D.drug_spec FROM channel_stock cs Inner JOIN channel_list cl ON (( cs.chnguid = cl.chnguid ) AND ( cs.drug_id = cl.drug_id )) INNER JOIN DRUG_INFO D ON cs.drug_id=D.drug_id WHERE ( cs.quantity > 0 ) AND ( cs.drawer_type = 1 ) AND (cs.machine_id = @machineId) AND ( cs.drug_id = @drugId )ORDER BY cs.eff_date ASC,cs.row_no ASC,cs.manu_no ASC "; MySqlCommand cmd = new MySqlCommand(strSql, con); cmd.Parameters.Clear(); MySqlParameter[] parameters = new MySqlParameter[]{ new MySqlParameter("machineId", ConfigurationManager.AppSettings["machineId"] ?? "DM1"), new MySqlParameter("drugId",drugId) }; cmd.Parameters.AddRange(parameters); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock channelStock = new ChannelStock(); DrugInfo drugInfo = new DrugInfo(); channelStock.Id = reader["chsguid"] is DBNull ? "" : reader.GetString("chsguid"); channelStock.Chnguid = reader["chnguid"] is DBNull ? "" : reader.GetString("chnguid"); channelStock.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); channelStock.DrawerNo = reader["row_no"] is DBNull ? 0 : reader.GetInt32("row_no"); channelStock.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); channelStock.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); channelStock.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); channelStock.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); channelStock.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); channelStock.DrawerType = reader["drawer_type"] is DBNull ? 0 : reader.GetInt32("drawer_type"); channelStock.BoardType = reader["board_type"] is DBNull ? 0 : reader.GetInt32("board_type"); channelStock.State = reader["state"] is DBNull ? 0 : reader.GetInt32("state"); drugInfo.DrugName = reader["Drug_Name"] is DBNull ? "" : reader.GetString("Drug_Name"); drugInfo.DrugSpec = reader["drug_spec"] is DBNull ? "" : reader.GetString("drug_spec"); channelStock.DrugInfo = drugInfo; channelStocks.Add(channelStock); } reader.Close(); } return channelStocks; } /// /// 完成处方取药 /// /// public bool SaveOrderTakeInfo(string orderNo, string orderDeptName, List record) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { if (con.State != ConnectionState.Open) { con.Open(); } MySqlTransaction transaction = con.BeginTransaction(); try { using (MySqlCommand cmd = new MySqlCommand()) { cmd.Connection = con; cmd.Transaction = transaction; string strSql = $"UPDATE order_info SET dm_status=1 WHERE ORDER_NO='{orderNo}'"; cmd.CommandText = strSql; cmd.ExecuteNonQuery(); for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; logger.Info($"更新ChannelStock:{it.Id}"); int quantity = it.Quantity - it.TakeQuantity; // 更新数据 库存信息 string ssSql = $"UPDATE channel_stock SET quantity={quantity},manu_no='{it.ManuNo}',eff_date='{it.EffDate}' WHERE chsguid='{it.Id}'"; cmd.CommandText = ssSql; //cmd.CommandText = ssSql; cmd.ExecuteNonQuery(); // 获取更新完库存后的药品库存 List nowChannels = new List(); string querySql = @"SELECT Quantity,Manu_No,drug_id FROM channel_stock WHERE drawer_type=1 and machine_id=@machineId AND drug_id=@drugId "; cmd.CommandText = querySql; MySqlParameter[] parameters = new MySqlParameter[] { new MySqlParameter("machineId", ConfigurationManager.AppSettings["machineId"] ?? "DM1"), new MySqlParameter("drugId", it.DrugId) }; cmd.Parameters.Clear(); cmd.Parameters.AddRange(parameters); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["Quantity"] is DBNull ? 0 : reader.GetInt32("Quantity"); ; stock.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); stock.ManuNo = reader["Manu_No"] is DBNull ? "" : reader.GetString("Manu_No"); nowChannels.Add(stock); } reader.Close(); logger.Info($"保存MachineRecord:{it.ManuNo}"); DateTime EFFDATE = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : DateTime.Now; int? operatorUser = HomeWindowViewModel.Operator?.Id; int? reviewerUser = HomeWindowViewModel.Reviewer?.Id; int stockQuantity = nowChannels.Sum(it => it.Quantity); int manunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); string insertSql = $"INSERT INTO dm_machine_record " + $"SET MACHINE_ID='{it.MachineId}',drawer_no='{it.DrawerNo}',COL_NO='{it.ColNo}',DRUG_ID='{it.DrugId}',MANU_NO='{it.ManuNo}'," + $"EFF_DATE='{EFFDATE}',Operator={operatorUser},reviewer={reviewerUser}," + $"operation_time=NOW(),quantity={it.TakeQuantity},type=2,invoice_id='{orderNo}',stock_quantity={stockQuantity}," + $"manunoQuantity={manunoQuantity},supplierDept='{SupplierDept}',receiveDept='{orderDeptName}'"; cmd.CommandText = insertSql; cmd.Parameters.Clear(); cmd.ExecuteNonQuery(); } transaction.Commit(); bFlag = true; } } catch (Exception ex) { transaction.Rollback(); bFlag = false; } } return bFlag; } /// /// 根据抽屉号、库位号查询库存信息 /// /// /// /// public List GetChannelStockList(int rowNo, int colNo) { List channel = new List(); //SqlSugarHelper.Db.Queryable() // .Where(cs => cs.MachineId == singleChannels[i].MachineId) // .Where(cs => cs.DrawerNo == singleChannels[i].DrawerNo) // .Where(cs => cs.ColNo == singleChannels[i].ColNo) // //.Where(cs=>cs.Quantity>0) // .OrderBy(cs => cs.EffDate) // .ToList(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); string sql = $"SELECT ROW_NO,COL_NO,eff_date,quantity,manu_no FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND ROW_NO={rowNo} AND COL_NO={colNo} ORDER BY EFF_DATE"; MySqlCommand cmd = new MySqlCommand(sql, con); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock cs = new ChannelStock(); cs.DrawerNo = reader["row_no"] is DBNull ? 0 : reader.GetInt32("row_no"); cs.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); cs.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); cs.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); cs.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); channel.Add(cs); } reader.Close(); } return channel; } #region 抽屉取药 /// /// 通过抽屉号获取库存信息 /// /// public List GetChannelStockByDrawer(int row_no) { List channelStocks = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); string strSql = $@"SELECT CS.chsguid,CS.chnguid,CS.machine_id,CS.row_no,CS.col_no,CS.pos_no,CS.drug_id,CS.manu_no,CS.eff_date,CS.quantity,CS.drawer_type,CS.board_type,CS.state , DI.DRUG_NAME,DI.DRUG_SPEC,DI.DRUG_ID FROM channel_stock CS INNER JOIN drug_info DI ON CS.DRUG_ID=DI.DRUG_ID WHERE ( row_no = {row_no} ) AND ( CS.drug_id IS NOT NULL ) AND (machine_id = '{machine_id}') AND ( drawer_type = 1 ) AND ( quantity > 0 )ORDER BY col_no ASC,eff_date ASC"; MySqlCommand cmd = new MySqlCommand(strSql, con); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); DrugInfo drug = new DrugInfo(); stock.Id = reader["chsguid"] is DBNull ? "" : reader.GetString("chsguid"); stock.Chnguid = reader["chnguid"] is DBNull ? "" : reader.GetString("chnguid"); stock.DrawerNo = row_no; stock.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); stock.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); stock.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); stock.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); stock.BoardType = reader["board_type"] is DBNull ? 0 : reader.GetInt32("board_type"); stock.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); drug.DrugName = reader["DRUG_NAME"] is DBNull ? "" : reader.GetString("DRUG_NAME"); drug.DrugSpec = reader["DRUG_SPEC"] is DBNull ? "" : reader.GetString("DRUG_SPEC"); drug.DrugId = reader["DRUG_ID"] is DBNull ? "" : reader.GetString("DRUG_ID"); stock.DrugInfo = drug; stock.DrugId = reader["DRUG_ID"] is DBNull ? "" : reader.GetString("DRUG_ID"); channelStocks.Add(stock); } reader.Close(); return channelStocks; } } /// /// 抽屉取药保存数据 /// /// /// public bool SaveDrawerTakeDrug(List record) { bool iRet = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; MySqlTransaction transaction = con.BeginTransaction(); cmd.Transaction = transaction; try { for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; string strSql = @"UPDATE channel_stock SET manu_no=@manu_no,eff_date=@eff_date, quantity=@quantity WHERE chsguid=@chsguid"; MySqlParameter[] parameter = new MySqlParameter[] { new MySqlParameter("manu_no",it.ManuNo), new MySqlParameter("eff_date",it.EffDate), new MySqlParameter("quantity",it.Quantity - it.TakeQuantity), new MySqlParameter("chsguid",it.Id) }; cmd.CommandText = strSql; cmd.Parameters.Clear(); cmd.Parameters.AddRange(parameter); // 更新数据 库存信息 int iResult = cmd.ExecuteNonQuery(); logger.Info($"Updateable_ChannelStock完成{iResult}"); // 获取更新完库存后的药品库存 string querySql = @$"SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type, state FROM channel_stock WHERE (machine_id = '{machine_id}') AND (drug_id = '{it.DrugId}') AND ( drawer_type = 1 ) "; cmd.CommandText = querySql; MySqlDataReader reader = cmd.ExecuteReader(); List nowChannels = new List(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["quantity"] is null ? 0 : reader.GetInt32("quantity"); stock.ManuNo = reader["manu_no"] is null ? "" : reader.GetString("manu_no"); nowChannels.Add(stock); } reader.Close(); logger.Info("Queryable_ChannelStock完成"); int stockQuantity = nowChannels.Sum(it => it.Quantity); int manuQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); DateTime? EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; string InvoiceId = "DRAWER_" + (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; int? operatorUser = HomeWindowViewModel.Operator?.Id; int? reviewerUser = HomeWindowViewModel.Reviewer?.Id; string insertSql = @$"INSERT INTO dm_machine_record (machine_id,drug_id,quantity,stock_quantity,manu_no,operator,reviewer,operation_time,eff_date, type,invoice_id,col_no,drawer_no,manunoQuantity,supplierDept,receiveDept) VALUES ('{machine_id}','{it.DrugId}',{it.TakeQuantity},{stockQuantity},'{it.ManuNo}',{operatorUser},{reviewerUser},'{DateTime.Now}','{EffDate}',2,'{InvoiceId}', {it.ColNo},{it.DrawerNo},{manuQuantity},'{SupplierDept}','{ReceiveDept}') "; cmd.CommandText = insertSql; iResult = cmd.ExecuteNonQuery(); logger.Info($"Insert_MachineRecord完成{iResult}"); logger.Info($"抽屉取药保存->库位【{it.DrawerNo}-{it.ColNo}】取出药品【{it.DrugInfo.DrugName}】个数【{it.TakeQuantity}】,取药前库存【{it.Quantity}】"); } transaction.Commit(); iRet = true; } catch (Exception ex) { transaction.Rollback(); logger.Info($"SaveDrawerTakeDrug Exception:{ex.Message}"); iRet = false; } } return iRet; } //查询该库位下非0的近效期及批次重新绑定 //更新绑定的效期、批次 public ChannelStock GetMinManuEffDate(ChannelStock groupCS) { ChannelStock newBind = new ChannelStock(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); string strSql = @$"SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE ( machine_id = '{machine_id}' ) AND ( row_no = '{groupCS.DrawerNo}' ) AND ( col_no = {groupCS.ColNo} ) AND ( quantity > 0 ) ORDER BY eff_date ASC LIMIT 0,1"; MySqlCommand cmd = new MySqlCommand(strSql, con); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { newBind.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); newBind.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); newBind.DrawerNo = reader["row_no"] is DBNull ? 0 : reader.GetInt32("row_no"); newBind.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); } reader.Close(); } return newBind; } #endregion #region 自选取药 /// /// 自选取药页面加载数据 /// /// public List GetSelfTakeInfo(string Code, string SearchValue, int pageNum, int pageSize, ref int totalCount) { List drugs = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { totalCount = 0; pageNum = (pageNum - 1) * pageSize; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; string countSql = @$"SELECT Count(1) FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) )"; if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("DrugName")) countSql += $" AND (drug_name like concat('%{SearchValue}%')) "; if (Code.Equals("PyCode")) countSql += $" AND ( oi.py_code like concat '%{SearchValue}%' ) "; if (Code.Equals("DrugBarcode")) countSql += $" AND drug_barcode like concat '%{SearchValue}%'"; if (Code.Equals("DrugId")) countSql += $" AND drug_id LIKE CONCAT('%{SearchValue}%')"; } cmd.CommandText = countSql; cmd.Connection = con; //执行语句 totalCount = Convert.ToInt32(cmd.ExecuteScalar()); string strSql = @$"SELECT drug_id,py_code,drug_barcode,drug_name,drug_brand_name,drug_spec,dosage,pack_unit,manufactory,max_stock FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) ) "; if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("DrugName")) strSql += $" AND (drug_name like concat('%{SearchValue}%')) "; if (Code.Equals("PyCode")) strSql += $" AND ( oi.py_code like concat '%{SearchValue}%' ) "; if (Code.Equals("DrugBarcode")) strSql += $" AND drug_barcode like concat '%{SearchValue}%'"; if (Code.Equals("DrugId")) strSql += $" AND drug_id LIKE CONCAT('%{SearchValue}%')"; } strSql += $" ORDER BY drug_id ASC LIMIT {pageNum},{pageSize} "; DataSet ds = new DataSet(); MySqlDataAdapter sda = new MySqlDataAdapter(strSql, con); sda.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo drug = new DrugInfo(); List stocks = new List(); drug.DrugId = ds.Tables[0].Rows[i]["drug_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_id"].ToString(); drug.PyCode = ds.Tables[0].Rows[i]["py_code"] is DBNull ? "" : ds.Tables[0].Rows[i]["py_code"].ToString(); drug.DrugBarcode = ds.Tables[0].Rows[i]["drug_barcode"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_barcode"].ToString(); drug.DrugName = ds.Tables[0].Rows[i]["drug_name"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_name"].ToString(); drug.DrugBrandname = ds.Tables[0].Rows[i]["drug_brand_name"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_brand_name"].ToString(); drug.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_spec"].ToString(); drug.Dosage = ds.Tables[0].Rows[i]["dosage"] is DBNull ? "" : ds.Tables[0].Rows[i]["dosage"].ToString(); drug.PackUnit = ds.Tables[0].Rows[i]["pack_unit"] is DBNull ? "" : ds.Tables[0].Rows[i]["pack_unit"].ToString(); drug.Manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); drug.MaxStock = ds.Tables[0].Rows[i]["max_stock"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["max_stock"]); if (!string.IsNullOrEmpty(drug.DrugId)) { string stockSql = @$"SELECT chsguid AS Id,chnguid AS Chnguid,machine_id AS MachineId,row_no AS DrawerNo,col_no AS ColNo, pos_no AS PosNo,drug_id AS DrugId,manu_no AS ManuNo,eff_date AS EffDate,quantity AS Quantity, drawer_type AS DrawerType,board_type AS BoardType,state AS State FROM channel_stock WHERE drawer_type = 1 AND quantity > 0 AND drug_id = '{drug.DrugId}' AND machine_id = '{machine_id}' ORDER BY row_no , col_no "; cmd.CommandText = stockSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.DrawerNo = reader["DrawerNo"] is DBNull ? 0 : reader.GetInt32("DrawerNo"); stock.ColNo = reader["ColNo"] is DBNull ? 0 : reader.GetInt32("ColNo"); stock.ManuNo = reader["ManuNo"] is DBNull ? "" : reader.GetString("ManuNo"); stock.EffDate = reader["EffDate"] is DBNull ? "" : reader.GetString("EffDate"); stock.Quantity = reader["Quantity"] is DBNull ? 0 : reader.GetInt32("Quantity"); stock.MachineId = reader["MachineId"] is DBNull ? "" : reader.GetString("MachineId"); stock.DrugId = reader["DrugId"] is DBNull ? "" : reader.GetString("DrugId"); stock.Id = reader["Id"] is DBNull ? "" : reader.GetString("Id"); stocks.Add(stock); } reader.Close(); } drug.channelStocks = stocks; drugs.Add(drug); } } } catch (Exception ex) { logger.Info($"GetSelfTakeInfo Exception:{ex.Message}"); } } return drugs; } /// /// 自选取药保存数据 /// /// public bool SaveSelfTakeInfo(List record) { bool iRet = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); MySqlCommand cmd = new MySqlCommand(); cmd.Transaction = transaction; cmd.Connection = con; try { for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; int quantity = it.Quantity - it.TakeQuantity; string strSql = $"UPDATE channel_stock SET quantity={quantity},manu_no='{it.ManuNo}',eff_date='{it.EffDate}' WHERE chsguid='{it.Id}'"; cmd.CommandText = strSql; // 更新数据 库存信息 int iResult = cmd.ExecuteNonQuery(); // 获取更新完库存后的药品库存 string querySql = $@"SELECT quantity,manu_no FROM channel_stock WHERE drawer_type=1 AND MACHINE_ID='{it.MachineId}' and DRUG_ID='{it.DrugId}'"; cmd.CommandText = querySql; MySqlDataReader reader = cmd.ExecuteReader(); List nowChannels = new List(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); stock.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); nowChannels.Add(stock); } reader.Close(); // 保存数据 出/入库记录 int stockQuantity = nowChannels.Sum(it => it.Quantity); int manunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); DateTime? EFFDATE = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; string InvoiceId = "SELF_" + (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; int? operatorUser = HomeWindowViewModel.Operator?.Id; int? reviewerUser = HomeWindowViewModel.Reviewer?.Id; string insertSql = $"INSERT INTO dm_machine_record " + $"SET MACHINE_ID='{it.MachineId}',drawer_no='{it.DrawerNo}',COL_NO='{it.ColNo}',DRUG_ID='{it.DrugId}',MANU_NO='{it.ManuNo}'," + $"EFF_DATE='{EFFDATE}',Operator={operatorUser},reviewer={reviewerUser}," + $"operation_time=NOW(),quantity={it.TakeQuantity},type=2,invoice_id='{InvoiceId}',stock_quantity={stockQuantity}," + $"manunoQuantity={manunoQuantity},supplierDept='{SupplierDept}',receiveDept='{ReceiveDept}'"; cmd.CommandText = insertSql; cmd.Parameters.Clear(); cmd.ExecuteNonQuery(); } transaction.Commit(); iRet = true; } catch (Exception ex) { transaction.Rollback(); logger.Info($"SaveSelfTakeInfo Exception:{ex.Message}"); iRet = false; } } return iRet; } #endregion #region 加药 /// /// 自选加药页面加载数据 /// /// /// /// /// /// /// public List GetSelfAddInfo(string Code, string SearchValue, int pageNum, int pageSize, ref int totalCount) { List drugs = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { totalCount = 0; pageNum = (pageNum - 1) * pageSize; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; string countSql = @$"SELECT Count(1) FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) ) "; if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("DrugName")) countSql += $" AND (drug_name like concat('%{SearchValue}%')) "; if (Code.Equals("PyCode")) countSql += $" AND ( oi.py_code like concat '%{SearchValue}%' ) "; if (Code.Equals("DrugBarcode")) countSql += $" AND drug_barcode like concat '%{SearchValue}%'"; if (Code.Equals("DrugId")) countSql += $" AND drug_id LIKE CONCAT('%{SearchValue}%')"; } cmd.CommandText = countSql; cmd.Connection = con; //执行语句 totalCount = Convert.ToInt32(cmd.ExecuteScalar()); string strSql = @$"SELECT drug_id,py_code,drug_barcode,drug_name,drug_brand_name,drug_spec,dosage,pack_unit,manufactory,max_stock FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) ) "; if (!string.IsNullOrEmpty(Code) && !string.IsNullOrEmpty(SearchValue)) { if (Code.Equals("DrugName")) strSql += $" AND (drug_name like concat('%{SearchValue}%')) "; if (Code.Equals("PyCode")) strSql += $" AND ( oi.py_code like concat '%{SearchValue}%' ) "; if (Code.Equals("DrugBarcode")) strSql += $" AND drug_barcode like concat '%{SearchValue}%'"; if (Code.Equals("DrugId")) strSql += $" AND drug_id LIKE CONCAT('%{SearchValue}%')"; } strSql += $" ORDER BY drug_id ASC LIMIT {pageNum},{pageSize} "; DataSet ds = new DataSet(); MySqlDataAdapter sda = new MySqlDataAdapter(strSql, con); sda.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo drug = new DrugInfo(); List stocks = new List(); drug.DrugId = ds.Tables[0].Rows[i]["drug_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_id"].ToString(); drug.PyCode = ds.Tables[0].Rows[i]["py_code"] is DBNull ? "" : ds.Tables[0].Rows[i]["py_code"].ToString(); drug.DrugBarcode = ds.Tables[0].Rows[i]["drug_barcode"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_barcode"].ToString(); drug.DrugName = ds.Tables[0].Rows[i]["drug_name"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_name"].ToString(); drug.DrugBrandname = ds.Tables[0].Rows[i]["drug_brand_name"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_brand_name"].ToString(); drug.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_spec"].ToString(); drug.Dosage = ds.Tables[0].Rows[i]["dosage"] is DBNull ? "" : ds.Tables[0].Rows[i]["dosage"].ToString(); drug.PackUnit = ds.Tables[0].Rows[i]["pack_unit"] is DBNull ? "" : ds.Tables[0].Rows[i]["pack_unit"].ToString(); drug.Manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); drug.MaxStock = ds.Tables[0].Rows[i]["max_stock"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["max_stock"]); if (!string.IsNullOrEmpty(drug.DrugId)) { string stockSql = @$"SELECT chsguid AS Id,chnguid AS Chnguid,machine_id AS MachineId,row_no AS DrawerNo,col_no AS ColNo, pos_no AS PosNo,drug_id AS DrugId,manu_no AS ManuNo,eff_date AS EffDate,quantity AS Quantity, drawer_type AS DrawerType,board_type AS BoardType,state AS State FROM channel_stock WHERE drawer_type = 1 AND drug_id = '{drug.DrugId}' AND machine_id = '{machine_id}' ORDER BY row_no , col_no "; cmd.CommandText = stockSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.DrawerNo = reader["DrawerNo"] is DBNull ? 0 : reader.GetInt32("DrawerNo"); stock.ColNo = reader["ColNo"] is DBNull ? 0 : reader.GetInt32("ColNo"); stock.ManuNo = reader["ManuNo"] is DBNull ? "" : reader.GetString("ManuNo"); stock.EffDate = reader["EffDate"] is DBNull ? "" : reader.GetString("EffDate"); stock.Quantity = reader["Quantity"] is DBNull ? 0 : reader.GetInt32("Quantity"); stock.MachineId = reader["MachineId"] is DBNull ? "" : reader.GetString("MachineId"); stock.DrugId = reader["DrugId"] is DBNull ? "" : reader.GetString("DrugId"); stock.Id = reader["Id"] is DBNull ? "" : reader.GetString("Id"); stocks.Add(stock); } reader.Close(); } drug.channelStocks = stocks; drugs.Add(drug); } } } catch (Exception ex) { logger.Info($"GetSelfTakeInfo Exception:{ex.Message}"); } } return drugs; } /// /// 保存自选加药数据 /// /// /// public bool SaveSelfAddInfo(List record, string invoiceId) { bool iRet = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); for (int i = 0; i < record.Count; i++) { MySqlTransaction transaction = con.BeginTransaction(); ChannelStock it = record[i]; try { MySqlCommand cmd = new MySqlCommand(); cmd.Transaction = transaction; cmd.Connection = con; int quantity = it.Quantity + it.AddQuantity; // 更新数据 库存信息 string updateSql = $@"UPDATE channel_stock SET QUANTITY={quantity},pos_no=1,MANU_NO='{it.ManuNo}',eff_date='{it.EffDate}' WHERE chsguid='{it.Id}'"; cmd.CommandText = updateSql; int iResult = cmd.ExecuteNonQuery(); // 获取更新完库存后的药品库存 string querySql = $@"SELECT quantity,manu_no FROM channel_stock WHERE drawer_type=1 AND MACHINE_ID='{it.MachineId}' and DRUG_ID='{it.DrugId}'"; cmd.CommandText = querySql; MySqlDataReader reader = cmd.ExecuteReader(); List nowChannels = new List(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); stock.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); nowChannels.Add(stock); } reader.Close(); // 保存数据 出/入库记录 int stockQuantity = nowChannels.Sum(it => it.Quantity); int manunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); DateTime? EFFDATE = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; if (string.IsNullOrEmpty(invoiceId)) { invoiceId = "SELF_" + (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; } int? operatorUser = HomeWindowViewModel.Operator?.Id; int? reviewerUser = HomeWindowViewModel.Reviewer?.Id; string insertSql = $"INSERT INTO dm_machine_record " + $"SET MACHINE_ID='{it.MachineId}',drawer_no='{it.DrawerNo}',COL_NO='{it.ColNo}',DRUG_ID='{it.DrugId}',MANU_NO='{it.ManuNo}'," + $"EFF_DATE='{EFFDATE}',Operator={operatorUser},reviewer={reviewerUser}," + $"operation_time=NOW(),quantity={it.AddQuantity},type=1,invoice_id='{invoiceId}',stock_quantity={stockQuantity}," + $"manunoQuantity={manunoQuantity},supplierDept='{SupplierDept}',receiveDept='{ReceiveDept}'"; cmd.CommandText = insertSql; cmd.Parameters.Clear(); cmd.ExecuteNonQuery(); transaction.Commit(); iRet = true; } catch (Exception ex) { logger.Info($"保存自选加药——异常:{ex.Message}"); transaction.Rollback(); iRet = false; } } } return iRet; } /// /// 抽屉加药页面获取数据 /// /// /// public List GetDrawerAddInfo(int row_no) { List channelStocks = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); string strSql = $@"SELECT CS.chsguid,CS.chnguid,CS.machine_id,CS.row_no,CS.col_no,CS.pos_no,CS.drug_id,CS.manu_no,CS.eff_date,CS.quantity,CS.drawer_type,CS.board_type,CS.state , DI.DRUG_NAME,DI.DRUG_SPEC,DI.DRUG_ID FROM channel_stock CS INNER JOIN drug_info DI ON CS.DRUG_ID=DI.DRUG_ID WHERE ( row_no = {row_no} ) AND ( CS.drug_id IS NOT NULL ) AND (machine_id = '{machine_id}') AND ( drawer_type = 1 ) AND ( quantity > 0 )ORDER BY col_no ASC,eff_date ASC"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); DrugInfo drug = new DrugInfo(); List drugManuNos = new List(); DrugManuNo drugManu = new DrugManuNo(); stock.Id = ds.Tables[0].Rows[i]["chsguid"] is DBNull ? "" : ds.Tables[0].Rows[i]["chsguid"].ToString(); stock.Chnguid = ds.Tables[0].Rows[i]["chnguid"] is DBNull ? "" : ds.Tables[0].Rows[i]["chnguid"].ToString(); stock.DrawerNo = row_no; stock.ColNo = ds.Tables[0].Rows[i]["col_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); stock.ManuNo = ds.Tables[0].Rows[i]["manu_no"] is DBNull ? "" : ds.Tables[0].Rows[i]["manu_no"].ToString(); stock.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? "" : ds.Tables[0].Rows[i]["eff_date"].ToString(); stock.Quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); stock.BoardType = ds.Tables[0].Rows[i]["board_type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); stock.MachineId = ds.Tables[0].Rows[i]["machine_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["machine_id"].ToString(); drug.DrugName = ds.Tables[0].Rows[i]["DRUG_NAME"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); drug.DrugSpec = ds.Tables[0].Rows[i]["DRUG_SPEC"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); drug.DrugId = ds.Tables[0].Rows[i]["DRUG_ID"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); string drugManuNosSql = @$"SELECT dmnguid,DRUG_ID,Manu_No,manu_date,eff_date FROM drug_manu_no WHERE DRUG_ID='{drug.DrugId}' AND use_flag=1 "; cmd.CommandText = drugManuNosSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { DrugManuNo drugManuNo = new DrugManuNo(); drugManuNo.Id = reader["dmnguid"] is DBNull ? "" : reader.GetString("dmnguid"); drugManuNo.DrugId = reader["DRUG_ID"] is DBNull ? "" : reader.GetString("DRUG_ID"); drugManuNo.ManuNo = reader["Manu_No"] is DBNull ? "" : reader.GetString("Manu_No"); drugManuNo.ManuDate = reader["manu_date"] is DBNull ? "" : reader.GetString("manu_date"); drugManuNo.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); drugManuNos.Add(drugManuNo); } reader.Close(); drug.DrugManuNos = drugManuNos; stock.DrugInfo = drug; stock.DrugId = ds.Tables[0].Rows[i]["DRUG_ID"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); drugManu.ManuNo = ds.Tables[0].Rows[i]["manu_no"] is DBNull ? "" : ds.Tables[0].Rows[i]["manu_no"].ToString(); drugManu.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? "" : ds.Tables[0].Rows[i]["eff_date"].ToString(); stock.drugManuNo = drugManu; channelStocks.Add(stock); } } return channelStocks; } } /// /// 保存抽屉加药数据 /// /// public bool SaveDrawerAdd(List record, string PZH) { bool iRet = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.Transaction = transaction; for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; it.ManuNo = it.drugManuNo.ManuNo; it.EffDate = it.drugManuNo.EffDate; int quantity = it.Quantity + it.AddQuantity; string updateSql = $@"UPDATE channel_stock SET QUANTITY={quantity},MANU_NO='{it.ManuNo}',EFF_DATE='{it.EffDate}' WHERE CHSGUID='{it.Id}'"; cmd.CommandText = updateSql; // 更新数据 库存信息 int iResult = cmd.ExecuteNonQuery(); // 获取更新完库存后的药品库存 string querySql = $@"SELECT Quantity,Manu_No FROM channel_stock WHERE DRAWER_TYPE=1 AND MACHINE_ID='{machine_id}' and drug_id='{it.DrugId}' "; cmd.CommandText = querySql; MySqlDataReader reader = cmd.ExecuteReader(); List nowChannels = new List(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["Quantity"] is DBNull ? 0 : reader.GetInt32("Quantity"); stock.ManuNo = reader["Manu_No"] is DBNull ? "" : reader.GetString("Manu_No"); nowChannels.Add(stock); } reader.Close(); //// 保存数据 入库记录 int stockQuantity = nowChannels.Sum(it => it.Quantity); int manunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); DateTime? EFFDATE = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; string InvoiceId = PZH; int? operatorUser = HomeWindowViewModel.Operator?.Id; int? reviewerUser = HomeWindowViewModel.Reviewer?.Id; string insertSql = $"INSERT INTO dm_machine_record " + $"SET MACHINE_ID='{it.MachineId}',drawer_no='{it.DrawerNo}',COL_NO='{it.ColNo}',DRUG_ID='{it.DrugId}',MANU_NO='{it.ManuNo}'," + $"EFF_DATE='{EFFDATE}',Operator={operatorUser},reviewer={reviewerUser}," + $"operation_time=NOW(),quantity={it.AddQuantity},type=1,invoice_id='{InvoiceId}',stock_quantity={stockQuantity}," + $"manunoQuantity={manunoQuantity},supplierDept='{SupplierDept}',receiveDept='{ReceiveDept}'"; cmd.CommandText = insertSql; cmd.Parameters.Clear(); cmd.ExecuteNonQuery(); } transaction.Commit(); iRet = true; } catch (Exception ex) { transaction.Rollback(); logger.Info($"SaveSelfTakeInfo Exception:{ex.Message}"); iRet = false; } } return iRet; } /// /// 调拨入库获取数据 /// /// public List GetInvoiceInfo(string OrderDate, string SearchValue, int PageNum, int PageSize, ref int totalCount) { List invoices = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; totalCount = 0; PageNum = (PageNum - 1) * PageSize; string countSql = $@"SELECT Count(1) FROM (SELECT count(1) as Count, i.InvoiceNo, i.InvoiceDate, sum(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name PharmacyName2 from (SELECT inOutI.drug_id,in_pharmacy_id,out_pharmacy_id, invoice_no as InvoiceNo, DATE_FORMAT(Invoice_Date,'%Y-%m-%d') as InvoiceDate, SUM(if(inOutI.units=di.small_unit,quantity,quantity*convert_ratio)) as quantity FROM in_out_invoice inOuti inner join drug_info di on inOutI.drug_id=di.Drug_ID where status=0 and type!=2 and cancel_flag=0 GROUP BY invoice_no,drug_id) i inner join ( select c.drug_id as drug_id from channel_list c where c.machine_id = '{machine_id}' group by c.drug_id ) di on di.drug_id = i.drug_id left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id where 1=1"; if (OrderDate != null) { countSql += " and i.InvoiceDate = @CreateTime "; } if (!String.IsNullOrEmpty(SearchValue)) { countSql += " and i.InvoiceNo = @InvoiceNo "; } if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"])) { countSql += " and i.in_pharmacy_id = @OutPharmacyId "; } countSql += $" GROUP BY i.InvoiceNo order by i.InvoiceDate) t "; MySqlParameter[] parameters = { new MySqlParameter("CreateTime",OrderDate), new MySqlParameter("InvoiceNo",SearchValue), new MySqlParameter("OutPharmacyId", ConfigurationManager.AppSettings["storage"]) }; cmd.CommandText = countSql; cmd.Parameters.Clear(); cmd.Parameters.AddRange(parameters); //执行语句 totalCount = Convert.ToInt32(cmd.ExecuteScalar()); var sb = new StringBuilder(); sb.Append("SELECT Count,InvoiceNo,InvoiceDate,quantity,PharmacyName1,PharmacyName2 FROM (SELECT count(1) as Count, i.InvoiceNo, i.InvoiceDate, sum(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name PharmacyName2 from "); sb.Append(" (SELECT inOutI.drug_id,in_pharmacy_id,out_pharmacy_id, invoice_no as InvoiceNo, DATE_FORMAT(Invoice_Date,'%Y-%m-%d') as InvoiceDate, SUM(if(inOutI.units=di.small_unit,quantity,quantity*convert_ratio)) as quantity "); sb.Append(" FROM in_out_invoice inOuti inner join drug_info di on inOutI.drug_id=di.Drug_ID where status=0 and type!=2 and cancel_flag=0 GROUP BY invoice_no,drug_id) i "); sb.Append($" inner join ( select c.drug_id as drug_id from channel_list c where c.machine_id = '{machine_id}' group by c.drug_id ) di on di.drug_id = i.drug_id"); sb.Append(" left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id"); sb.Append(" left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id where 1=1"); if (OrderDate != null) { sb.Append(" and i.InvoiceDate = @CreateTime "); } if (!String.IsNullOrEmpty(SearchValue)) { sb.Append(" and i.InvoiceNo = @InvoiceNo "); } if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"])) { sb.Append(" and i.in_pharmacy_id = @OutPharmacyId "); } //sb.Append(" group by i.invoice_no"); sb.Append($" GROUP BY i.InvoiceNo order by i.InvoiceDate) t LIMIT {PageNum},{PageSize} "); cmd.CommandText = sb.ToString(); MySqlParameter[] mySqlParameters = { new MySqlParameter("CreateTime",OrderDate), new MySqlParameter("InvoiceNo",SearchValue), new MySqlParameter("OutPharmacyId", ConfigurationManager.AppSettings["storage"]) }; cmd.Parameters.Clear(); cmd.Parameters.AddRange(mySqlParameters); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Invoice invoice = new Invoice(); invoice.InvoiceNo = reader["InvoiceNo"] is DBNull ? "" : reader.GetString("InvoiceNo"); invoice.Count = reader["Count"] is DBNull ? 0 : reader.GetInt32("Count"); invoice.InvoiceDate = reader["InvoiceDate"] is DBNull ? "" : reader.GetString("InvoiceDate"); invoice.PharmacyName1 = reader["PharmacyName1"] is DBNull ? "" : reader.GetString("PharmacyName1"); invoice.PharmacyName2 = reader["PharmacyName2"] is DBNull ? "" : reader.GetString("PharmacyName2"); invoice.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); invoices.Add(invoice); } reader.Close(); } catch (Exception ex) { logger.Info($"获取调拨数据异常——{ex.Message}"); } } return invoices; } /// /// 调拨单——先查询有几种药 /// /// public List GetInvoiceByInvoiceNo(string INVOICE_NO) { List invoices = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { //先查询有几种药 string strSql = $@"SELECT sum(Quantity) AS SumQuantity, COUNT(ID) AS CountNum,INVOICE_NO AS InvoiceNo,drug_id AS DrugId,QUANTITY AS quantity,drug_manu_no AS drugManuNo FROM IN_OUT_INVOICE WHERE INVOICE_NO={INVOICE_NO} GROUP BY INVOICE_NO,DRUG_ID"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = strSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { InOutInvoice inOut = new InOutInvoice(); inOut.DrugId = reader["DrugId"] is DBNull ? "" : reader.GetString("DrugId"); inOut.InvoiceNo = reader["InvoiceNo"] is DBNull ? "" : reader.GetString("InvoiceNo"); inOut.quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); invoices.Add(inOut); } reader.Close(); } catch (Exception ex) { logger.Info($"根据调拨单{INVOICE_NO}获取数据异常——{ex.Message}"); } } return invoices; } /// /// 调拨入库获取药品绑定信息 /// /// public List GetChannelList(string drugId) { List channelLists = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; string sql = $@"SELECT cl.chnguid,cl.machine_id,cl.row_no,cl.col_no,cl.pos_no,cl.drug_id,cl.drawer_type,cl.board_type,cl.state,DR.drug_name,DR.drug_spec,DR.manufactory FROM channel_list cl INNER JOIN drug_info DR ON cl.drug_id=DR.drug_id WHERE (( cl.drug_id = '{drugId}' ) AND ( cl.machine_id ='{machine_id}')) "; DataSet ds = new DataSet(); MySqlDataAdapter sda = new MySqlDataAdapter(sql, con); sda.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelList channelList = new ChannelList(); DrugInfo DR = new DrugInfo(); channelList.Id = ds.Tables[0].Rows[i]["chnguid"] is DBNull ? "" : ds.Tables[0].Rows[i]["chnguid"].ToString(); channelList.MachineId = ds.Tables[0].Rows[i]["machine_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["machine_id"].ToString(); channelList.DrawerNo = ds.Tables[0].Rows[i]["row_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); channelList.ColNo = ds.Tables[0].Rows[i]["col_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); channelList.PosNo = ds.Tables[0].Rows[i]["pos_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); channelList.DrugId = ds.Tables[0].Rows[i]["drug_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_id"].ToString(); channelList.DrawerType = ds.Tables[0].Rows[i]["drawer_type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); channelList.BoardType = ds.Tables[0].Rows[i]["board_type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); channelList.State = ds.Tables[0].Rows[i]["state"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["state"]); DR.DrugId = ds.Tables[0].Rows[i]["drug_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_id"].ToString(); DR.DrugName = ds.Tables[0].Rows[i]["drug_name"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_name"].ToString(); DR.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_spec"].ToString(); DR.Manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); channelList.Drug = DR; List drugManuNos = new List(); //string querySql = $@"SELECT dmnguid,drug_id,manu_no,manu_date,eff_date from drug_manu_no WHERE DRUG_ID='{DR.DrugId}'"; //cmd.CommandText = querySql; //MySqlDataReader reader = cmd.ExecuteReader(); //while (reader.Read()) //{ // DrugManuNo drugManuNo = new DrugManuNo(); // drugManuNo.Id = reader["dmnguid"] is DBNull ? "" : reader.GetString("dmnguid"); // drugManuNo.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); // drugManuNo.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); // drugManuNo.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); // drugManuNos.Add(drugManuNo); //} //reader.Close(); DR.DrugManuNos = drugManuNos; channelLists.Add(channelList); } } } catch (Exception ex) { logger.Info($"GetChannelList异常——{ex.Message}"); } } return channelLists; } /// /// 调拨入库 查询每种药有多少个批次 /// /// public List GetInvoiceManu(string invoiceNo, string drugId) { List inOutInvoices = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string sql = $@"SELECT inOutI.id,inOutI.in_pharmacy_id,inOutI.out_pharmacy_id,inOutI.storage,inOutI.invoice_no,inOutI.invoice_date,inOutI.drug_id,inOutI.drug_spec, if(inOuti.units=di.small_unit,quantity,quantity*convert_ratio) as quantity,inOutI.drug_manu_no,inOutI.supplier,inOutI.operator,inOutI.drug_eff_date FROM in_out_invoice inOutI inner join drug_info di on inOutI.drug_id=di.Drug_ID WHERE ((((( inOutI.invoice_no = '{invoiceNo}' ) AND ( inOutI.drug_id = '{drugId}' )) AND ( inOutI.status = 0 )) AND ( inOutI.type <> 2 )) AND ( inOutI.cancel_flag = 0 ))"; DataSet ds = new DataSet(); MySqlDataAdapter sda = new MySqlDataAdapter(sql, con); sda.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { InOutInvoice inOut = new InOutInvoice(); inOut.Id = Convert.ToInt32(ds.Tables[0].Rows[i]["id"]); inOut.InPharmacyId = ds.Tables[0].Rows[i]["in_pharmacy_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["in_pharmacy_id"].ToString(); inOut.OutPharmacyId = ds.Tables[0].Rows[i]["out_pharmacy_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["out_pharmacy_id"].ToString(); inOut.storage = ds.Tables[0].Rows[i]["storage"] is DBNull ? "" : ds.Tables[0].Rows[i]["storage"].ToString(); inOut.InvoiceNo = ds.Tables[0].Rows[i]["invoice_no"].ToString(); inOut.InvoiceDate = ds.Tables[0].Rows[i]["invoice_date"].ToString(); inOut.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); inOut.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); inOut.DrugManuNo = ds.Tables[0].Rows[i]["drug_manu_no"].ToString(); inOut.Supplier = ds.Tables[0].Rows[i]["supplier"] is DBNull ? "" : ds.Tables[0].Rows[i]["supplier"].ToString(); inOut.Operator = ds.Tables[0].Rows[i]["operator"] is DBNull ? "" : ds.Tables[0].Rows[i]["operator"].ToString(); inOut.DrugEffDate = ds.Tables[0].Rows[i]["drug_eff_date"].ToString(); inOut.quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); inOutInvoices.Add(inOut); } } } catch (Exception ex) { logger.Info($"GetInvoiceManu异常——{ex.Message}"); } } return inOutInvoices; } /// ///调拨入库 查询是否有库存 /// /// /// /// public List GetInvoiceStock(string drugId, string manuNo) { List channelStocks = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT chsguid as id,chnguid,machine_id,row_no,board_type,drawer_type,col_no,drug_id,Manu_No,eff_date,Quantity FROM channel_stock where drug_id='{drugId}' and Manu_No='{manuNo}'"; DataSet ds = new DataSet(); MySqlDataAdapter sqlDataAdapter = new MySqlDataAdapter(strSql, con); sqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); stock.Id = ds.Tables[0].Rows[i]["id"].ToString(); stock.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); stock.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); stock.BoardType = Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); stock.DrawerType = Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); stock.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); stock.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); stock.ManuNo = ds.Tables[0].Rows[i]["Manu_No"].ToString(); stock.EffDate = ds.Tables[0].Rows[i]["eff_date"].ToString(); stock.Chnguid = ds.Tables[0].Rows[i]["chnguid"].ToString(); stock.Quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["Quantity"]); channelStocks.Add(stock); } } } catch (Exception ex) { throw; } } return channelStocks; } /// ///根据药品id及批次获取效期 /// /// /// /// public DrugManuNo GetManuNoList(string drugId, string manaNo) { DrugManuNo drugManuNo = null; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT dmnguid,drug_id,Manu_No,eff_date from drug_manu_no WHERE drug_id='{drugId}' and manu_no='{manaNo}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = strSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { drugManuNo = new DrugManuNo(); drugManuNo.Id = reader["dmnguid"] is DBNull ? "" : reader.GetString("dmnguid"); drugManuNo.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); drugManuNo.ManuNo = reader["Manu_No"] is DBNull ? "" : reader.GetString("Manu_No"); drugManuNo.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); } reader.Close(); } catch (Exception ex) { logger.Info($"根据药品id{drugId}及批次{manaNo}获取效期异常——{ex.Message}"); } } return drugManuNo; } /// /// 保存——调拨入库 /// /// public bool SaveInvoiceIn(List record, Invoice? SelectedInvoice) { bool bResult = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { logger.Info("保存——调拨入库"); string InvoiceNo = SelectedInvoice.InvoiceNo; string strSql = $@"UPDATE in_out_invoice SET STATUS=1 WHERE invoice_no='{InvoiceNo}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = strSql; cmd.Transaction = transaction; int iResult = cmd.ExecuteNonQuery(); for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; int Quantity = it.Quantity + it.AddQuantity; if (it.Id != null) { string updateSql = @$"UPDATE channel_stock SET Quantity='{Quantity}',Manu_No='{it.ManuNo}',eff_date='{it.EffDate}' WHERE chsguid='{it.Id}'"; cmd.CommandText = updateSql; iResult = cmd.ExecuteNonQuery(); ; if (iResult <= 0) { logger.Info($"channel_stock未更新数据{updateSql}"); } else { logger.Info($"channel_stock更新数据{updateSql}"); } } else { //如果批号重复则不让添加 string checkRepeatSql = $@"SELECT COUNT(1) FROM CHANNEL_STOCK WHERE ROW_NO='{it.DrawerNo}' AND COL_NO='{it.ColNo}' AND MANU_NO='{it.ManuNo}' AND MACHINE_ID ='{machine_id}'"; cmd.CommandText = checkRepeatSql; iResult = Convert.ToInt32(cmd.ExecuteScalar()); if (iResult > 0) { logger.Info($"批号重复:{it.DrawerNo}-{it.ColNo}-{it.ManuNo}"); continue; } //查询现有库位中是否有库存为0的记录,如果有直接update string querySql = $@"SELECT chsguid FROM CHANNEL_STOCK WHERE ROW_NO='{it.DrawerNo}' AND COL_NO='{it.ColNo}' AND MANU_NO='{it.ManuNo}' AND MACHINE_ID ='{machine_id}' AND QUANTITY<=0 LIMIT 1"; cmd.CommandText = querySql; string id = Convert.ToString(cmd.ExecuteScalar()); if (!string.IsNullOrEmpty(id)) { string uSql = $@"UPDATE CHANNEL_STOCK SET QUANTITY='{Quantity}',MANU_NO='{it.ManuNo}',EFF_DATE='{it.EffDate}' WHERE chsguid='{id}'"; cmd.CommandText = uSql; iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"SaveInvoiceIn未更新数据{uSql}"); } else { logger.Info($"SaveInvoiceIn更新数据{uSql}"); } } else { // 更新数据 库存信息 string insertSql = $@"INSERT INTO CHANNEL_STOCK(chsguid,ChnGuid, Quantity,Manu_No,eff_date,drawer_type,Row_no,Col_no,Drug_ID,board_type,Machine_id) VALUES('{Guid.NewGuid().ToString()}','{it.Chnguid}','{it.AddQuantity}','{it.ManuNo}', '{it.EffDate}','{it.DrawerType}','{it.DrawerNo}','{it.ColNo}','{it.DrugId}','{it.BoardType}','{machine_id}') "; cmd.CommandText = insertSql; iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"SaveInvoiceIn未新增数据——{insertSql}"); } else { logger.Info($"SaveInvoiceIn新增数据——{insertSql}"); } } } // 获取更新完库存后的药品库存 List nowChannels = new List(); string getStockSql = $@"SELECT Quantity,Manu_No FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND DRUG_ID='{it.DrugId}' AND drawer_type=1"; cmd.CommandText = getStockSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Quantity = reader["Quantity"] is DBNull ? 0 : reader.GetInt32("Quantity"); stock.ManuNo = reader["Manu_No"] is DBNull ? "" : reader.GetString("Manu_No"); nowChannels.Add(stock); } reader.Close(); //DateTime? EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer?.Id; int StockQuantity = nowChannels.Sum(it => it.Quantity); int ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); string SupplierDept = SelectedInvoice.PharmacyName1 ?? ConfigurationManager.AppSettings["supplierDept"].ToString(); string ReceiveDept = SelectedInvoice.PharmacyName2 ?? ConfigurationManager.AppSettings["receiveDept"].ToString(); string iSql = $@"INSERT INTO dm_machine_record (Machine_id,drawer_no,Col_no,Drug_ID,Manu_No,eff_date,Operator,reviewer,operation_time,Quantity,type,invoice_id,stock_quantity,manunoQuantity,supplierDept,receiveDept) values('{machine_id}','{it.DrawerNo}','{it.ColNo}','{it.DrugId}','{it.ManuNo}','{it.EffDate}',{Operator},{Reviewer},'{DateTime.Now}',{it.AddQuantity},1,'{InvoiceNo}', '{StockQuantity}','{ManunoQuantity}','{SupplierDept}','{ReceiveDept}')"; cmd.CommandText = iSql; iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"SaveInvoiceIn-dm_machine_record未新增数据——{iSql}"); } else { logger.Info($"SaveInvoiceIn-dm_machine_record新增数据——{iSql}"); } } bResult = true; transaction.Commit(); //根据ChannelLsts中的库位,删除该库位库存为0的记录 string delSql = $@"DELETE FROM channel_stock WHERE MACHINE_ID='{machine_id}' AND QUANTITY<=0"; cmd.CommandText = delSql; iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"SaveInvoiceIn-删除未执行任何数据——{delSql}"); } else { logger.Info($"SaveInvoiceIn-删除执行sql——{delSql}"); } } catch (Exception ex) { logger.Info($"SaveInvoiceIn异常——{ex.Message}"); transaction.Rollback(); bResult = false; } } return bResult; } /// /// 根据抽屉号、库位号查询库存信息 /// /// /// /// public List GetChannelStockListForInvoice(int rowNo, int colNo) { List channel = new List(); //SqlSugarHelper.Db.Queryable() // .Where(cs => cs.MachineId == singleChannels[i].MachineId) // .Where(cs => cs.DrawerNo == singleChannels[i].DrawerNo) // .Where(cs => cs.ColNo == singleChannels[i].ColNo) // //.Where(cs=>cs.Quantity>0) // .OrderBy(cs => cs.EffDate) // .ToList(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); string sql = $"SELECT ROW_NO,COL_NO,eff_date,quantity,manu_no FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND ROW_NO={rowNo} AND COL_NO={colNo} AND QUANTITY>0 ORDER BY EFF_DATE"; MySqlCommand cmd = new MySqlCommand(sql, con); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock cs = new ChannelStock(); cs.DrawerNo = reader["row_no"] is DBNull ? 0 : reader.GetInt32("row_no"); cs.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); cs.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); cs.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); cs.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); channel.Add(cs); } reader.Close(); } return channel; } ///多批次抽屉加药 public List GetAddDrugInfo(int rowNo) { List? ChannelLsts = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT CL.chnguid,CL.machine_id,CL.row_no,CL.col_no,CL.pos_no,CL.drug_id,CL.drawer_type,CL.board_type,CL.state,DI.drug_name,DI.drug_spec,DI.manufactory FROM channel_list CL INNER JOIN drug_info DI ON CL.DRUG_ID=DI.DRUG_ID WHERE ( CL.row_no = {rowNo} ) AND ( CL.drawer_type = 1 ) AND (CL.machine_id = '{machine_id}') AND ( CL.drug_id IS NOT NULL ) ORDER BY CL.col_no ASC "; List drugManuNos = new List(); MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { List channelStocks = new List(); ChannelList channelList = new ChannelList(); DrugInfo di = new DrugInfo(); channelList.Id = ds.Tables[0].Rows[i]["chnguid"].ToString(); channelList.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); channelList.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); channelList.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); channelList.PosNo = Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); channelList.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); channelList.DrawerType = Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); channelList.BoardType = Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); channelList.State = Convert.ToInt32(ds.Tables[0].Rows[i]["State"]); di.DrugName = ds.Tables[0].Rows[i]["drug_name"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["manufactory"].ToString(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); channelList.Drug = di; string channelStoclSql = $@"SELECT CS.chsguid AS Id,CS.chnguid AS Chnguid,CS.machine_id AS MachineId,CS.row_no AS DrawerNo,CS.col_no AS ColNo,CS.pos_no AS PosNo, CS.drug_id AS DrugId,CS.manu_no AS ManuNo,CS.eff_date AS EffDate,CS.quantity AS Quantity,CS.drawer_type AS DrawerType,CS.board_type AS BoardType, CS.state AS State,DI.drug_id AS DIDRUGID,DI.drug_name AS DRUGNAME,DI.drug_spec AS DRUGSPEC,DI.dose AS DOSE,DI.manufactory AS manufactory from channel_stock as CS INNER JOIN drug_info DI ON CS.drug_id=DI.drug_id WHERE CS.chnguid = '{channelList.Id}' "; mySqlDataAdapter = new MySqlDataAdapter(channelStoclSql, con); DataSet stockDS = new DataSet(); mySqlDataAdapter.Fill(stockDS); if (stockDS != null && stockDS.Tables[0].Rows.Count > 0) { ChannelStock stock = null; for (int j = 0; j < stockDS.Tables[0].Rows.Count; j++) { stock = new ChannelStock(); DrugInfo drug = new DrugInfo(); DrugManuNo drugManuNo = new DrugManuNo(); List listDrugmanuno = new List(); stock.Id = stockDS.Tables[0].Rows[j]["Id"].ToString(); stock.Chnguid = stockDS.Tables[0].Rows[j]["Chnguid"].ToString(); stock.MachineId = stockDS.Tables[0].Rows[j]["MachineId"].ToString(); stock.DrawerNo = Convert.ToInt32(stockDS.Tables[0].Rows[j]["DrawerNo"]); stock.ColNo = Convert.ToInt32(stockDS.Tables[0].Rows[j]["ColNo"]); stock.PosNo = stockDS.Tables[0].Rows[j]["PosNo"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["PosNo"]); stock.DrugId = stockDS.Tables[0].Rows[j]["DrugId"].ToString(); stock.ManuNo = stockDS.Tables[0].Rows[j]["ManuNo"].ToString(); stock.EffDate = stockDS.Tables[0].Rows[j]["EffDate"].ToString(); stock.Quantity = Convert.ToInt32(stockDS.Tables[0].Rows[j]["Quantity"]); stock.DrawerType = Convert.ToInt32(stockDS.Tables[0].Rows[j]["DrawerType"]); stock.BoardType = Convert.ToInt32(stockDS.Tables[0].Rows[j]["BoardType"]); stock.State = Convert.ToInt32(stockDS.Tables[0].Rows[j]["State"] is DBNull ? 0 : stockDS.Tables[0].Rows[j]["State"]); stock.ChannelLst = channelList; drug.DrugId = stockDS.Tables[0].Rows[j]["DrugId"].ToString(); drug.DrugName = stockDS.Tables[0].Rows[j]["DRUGNAME"].ToString(); drug.DrugSpec = stockDS.Tables[0].Rows[j]["DRUGSPEC"].ToString(); drug.Dosage = stockDS.Tables[0].Rows[j]["DOSE"].ToString(); drug.Manufactory = stockDS.Tables[0].Rows[j]["manufactory"].ToString(); string manuSql = $@"SELECT dmnguid AS Id,drug_id AS DrugId,manu_no AS ManuNo,manu_date AS ManuDate,eff_date AS EffDate FROM drug_manu_no WHERE drug_id = '{stockDS.Tables[0].Rows[j]["DrugId"].ToString()}'"; mySqlDataAdapter = new MySqlDataAdapter(manuSql, con); DataSet manuDS = new DataSet(); mySqlDataAdapter.Fill(manuDS); if (manuDS != null && manuDS.Tables[0].Rows.Count > 0) { for (int k = 0; k < manuDS.Tables[0].Rows.Count; k++) { DrugManuNo drugManu = new DrugManuNo(); drugManu.Id = manuDS.Tables[0].Rows[k]["Id"].ToString(); drugManu.DrugId = manuDS.Tables[0].Rows[k]["DrugId"].ToString(); drugManu.ManuNo = manuDS.Tables[0].Rows[k]["ManuNo"].ToString(); drugManu.EffDate = manuDS.Tables[0].Rows[k]["EffDate"].ToString(); listDrugmanuno.Add(drugManu); } } drug.DrugManuNos = listDrugmanuno; stock.DrugInfo = drug; drugManuNo.EffDate = stockDS.Tables[0].Rows[j]["EffDate"].ToString(); stock.drugManuNo = drugManuNo; channelStocks.Add(stock); } channelList.Drug = stock == null ? null : stock.DrugInfo; //channelList.drugManuNo = channelStocks == null ? null : channelStocks[0].drugManuNo; channelList.channelStocks = channelStocks; } else { ChannelStock CS = new ChannelStock(); CS.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); CS.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); CS.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); CS.DrugInfo = di; CS.ChannelLst = channelList; CS.DrawerType = channelList.DrawerType; CS.BoardType = channelList.BoardType; if (channelList.channelStocks == null) { channelList.channelStocks = new List(); channelList.channelStocks.Add(CS); } else { channelList.channelStocks.Add(CS); } //绑定了药品channel_list但是没有绑批次channel_stock string searchSql = $@"SELECT dmnguid AS Id,drug_id AS DrugId,manu_no AS ManuNo,manu_date AS ManuDate,eff_date AS EffDate FROM drug_manu_no where drug_id='{ds.Tables[0].Rows[i]["drug_id"].ToString()}'"; mySqlDataAdapter = new MySqlDataAdapter(searchSql, con); DataSet searchStockDS = new DataSet(); mySqlDataAdapter.Fill(searchStockDS); List listDrugmanuno = new List(); if (searchStockDS != null && searchStockDS.Tables[0].Rows.Count > 0) { for (int m = 0; m < searchStockDS.Tables[0].Rows.Count; m++) { DrugManuNo drugManu = new DrugManuNo(); drugManu.Id = searchStockDS.Tables[0].Rows[m]["Id"].ToString(); drugManu.DrugId = searchStockDS.Tables[0].Rows[m]["DrugId"].ToString(); drugManu.ManuNo = searchStockDS.Tables[0].Rows[m]["ManuNo"].ToString(); drugManu.EffDate = searchStockDS.Tables[0].Rows[m]["EffDate"].ToString(); listDrugmanuno.Add(drugManu); } } di.DrugManuNos = listDrugmanuno; CS.drugManuNo = listDrugmanuno[0]; channelList.drugManuNo = listDrugmanuno[0]; } ChannelLsts.Add(channelList); } } } catch (Exception ex) { throw; } } return ChannelLsts; } //多批次抽屉加药保存 public List AddDrugSave(List record, string PZH, ref bool flag) { List stockRepeats = new List(); flag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; int iResult = 0; for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; it.ManuNo = it.drugManuNo.ManuNo; it.EffDate = it.drugManuNo.EffDate; if (it.Id != null) { string updateSql = $@"UPDATE channel_stock SET QUANTITY={it.Quantity + it.AddQuantity},manu_no='{it.ManuNo}',eff_date='{it.EffDate}',drug_id='{it.DrugId}' WHERE chsguid='{it.Id}'"; cmd.CommandText = updateSql; iResult = cmd.ExecuteNonQuery(); } else { //如果批号重复则不让添加 string searchSql = $@"Select count(1) from channel_stock where row_no={it.DrawerType} and manu_no='{it.ManuNo}' and machine_id='{machine_id}'"; cmd.CommandText = searchSql; iResult = Convert.ToInt32(cmd.ExecuteScalar()); if (iResult > 0) { stockRepeats.Add(it); logger.Info($"批号重复不让添加{it.DrawerType}-{it.ManuNo}-{machine_id}"); continue; } string chnguid = it.Chnguid == null ? it.ChannelLst.Id : it.Chnguid; //更新数据 库存信息 string insertSql = $@"INSERT INTO channel_stock(QUANTITY,CHNGUID,MANU_NO,EFF_DATE,ROW_NO,COL_NO,DRUG_ID,DRAWER_TYPE,BOARD_TYPE,CHSGUID,MACHINE_ID) VALUES({it.AddQuantity},'{chnguid}','{it.ManuNo}','{it.EffDate}',{it.DrawerNo},{it.ColNo},'{it.DrugId}','{it.DrawerType}','{it.BoardType}','{Guid.NewGuid().ToString()}','{machine_id}')"; cmd.CommandText = insertSql; iResult = cmd.ExecuteNonQuery(); } // 获取更新完库存后的药品库存 string newStockSql = $@"SELECT QUANTITY,MANU_NO FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND DRUG_ID='{it.DrugId}' AND DRAWER_TYPE=1"; List nowChannels = new List(); MySqlDataAdapter sda = new MySqlDataAdapter(newStockSql, con); DataSet ds = new DataSet(); sda.Fill(ds); if (ds != null && ds.Tables[0] != null) { for (int k = 0; k < ds.Tables[0].Rows.Count; k++) { ChannelStock cs = new ChannelStock(); cs.Quantity = Convert.ToInt32(ds.Tables[0].Rows[k]["QUANTITY"]); cs.ManuNo = ds.Tables[0].Rows[k]["MANU_NO"].ToString(); nowChannels.Add(cs); } } //DateTime? effDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; DateTime? effDate = !String.IsNullOrEmpty(it.EffDate) ? Convert.ToDateTime(it.EffDate) : null; int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer?.Id; int StockQuantity = nowChannels.Sum(it => it.Quantity); int ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); // 保存数据 入库记录 string insertRecordSql = $@"INSERT INTO dm_machine_record(MACHINE_ID,DRAWER_NO,COL_NO,DRUG_ID,MANU_NO,EFF_DATE,operator,reviewer,operation_time,quantity,TYPE,invoice_id,stock_quantity,manunoQuantity) VALUES('{machine_id}',{it.DrawerNo},{it.ColNo},'{it.DrugId}','{it.ManuNo}', '{effDate}','{Operator}','{Reviewer}','{DateTime.Now}',{it.AddQuantity},1,'{PZH}',{StockQuantity},{ManunoQuantity})"; cmd.CommandText = insertRecordSql; iResult = cmd.ExecuteNonQuery(); flag = true; } } catch (Exception ex) { logger.Info($"多批次抽屉加药保存异常:{ex.ToString()}"); flag = false; } } return stockRepeats; } #endregion #region 还药 /// /// 归还药品——根据处方还药 /// /// public List ReturnDrugInfo(string searchCode, string searchValue, string orderDate, int PageNum, int PageSize, ref int totalCount) { List orderList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@" SELECT COUNT(1) FROM (SELECT oi.order_id,oi.Order_No,oi.Patient_id,oi.P_name,oi.sex,oi.age,oi.id_number,oi.Order_date,oi.charge_date,oi.recv_date,oi.dept_code,oi.dept_name FROM order_info oi Inner JOIN order_detail od ON (oi.order_no =od.order_no ) Inner JOIN (SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type, state FROM channel_stock WHERE (drawer_type = 1 ) AND (machine_id = '{machine_id}') GROUP BY drug_id )t ON (od.drug_id =t.drug_id ) WHERE (oi.dm_status = 1 ) AND (oi.his_disp_flag = 1 ) "; if (!string.IsNullOrEmpty(orderDate)) { strSql += $" AND (DATE_FORMAT(oi.order_date, '%Y-%m-%d') = '{orderDate}' )"; } switch (searchCode) { case "OrderNo": strSql += $" and oi.order_no='{searchValue}' "; break; case "PatientId": strSql += $" and patient_id='{searchValue}'"; break; } if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"])) { strSql += $" AND oi.pharmacy='{ConfigurationManager.AppSettings["storage"].ToString()}'"; } strSql += " AND (oi.cancel_flag = 1 ) GROUP BY oi.order_date ) CountTable "; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.CommandText = strSql; totalCount = Convert.ToInt32(cmd.ExecuteScalar()); PageNum = (PageNum - 1) * PageSize; string searchSql = $@"SELECT oi.order_id,oi.Order_No,oi.Patient_id,oi.P_name,oi.sex,oi.age,oi.id_number,oi.Order_date,oi.charge_date,oi.recv_date,oi.dept_code,oi.dept_name FROM order_info oi Inner JOIN order_detail od ON (oi.order_no =od.order_no ) Inner JOIN (SELECT chsguid,chnguid,machine_id,row_no,col_no, pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE (drawer_type = 1 ) AND (machine_id = '{machine_id}') GROUP BY drug_id )t ON (od.drug_id =t.drug_id ) WHERE (oi.dm_status = 1 ) AND (oi.his_disp_flag = 1 ) AND (oi.cancel_flag = 1 )"; if (!string.IsNullOrEmpty(orderDate)) { searchSql += $" AND (DATE_FORMAT(oi.order_date, '%Y-%m-%d') = '{orderDate}' )"; } switch (searchCode) { case "OrderNo": searchSql += $" and oi.order_no='{searchValue}' "; break; case "PatientId": searchSql += $" and patient_id='{searchValue}'"; break; } if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"])) { searchSql += $" AND oi.pharmacy='{ConfigurationManager.AppSettings["storage"].ToString()}'"; } searchSql += $" GROUP BY oi.order_date LIMIT {PageNum},{PageSize} "; cmd.CommandText = searchSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { OrderInfo order = new OrderInfo(); order.OrderId = reader.GetInt32("order_id"); order.OrderNo = reader["Order_No"] is DBNull ? "" : reader.GetString("Order_No"); order.PatientId = reader["Patient_id"] is DBNull ? "" : reader.GetString("Patient_id"); order.PName = reader["P_name"] is DBNull ? "" : reader.GetString("P_name"); order.Sex = reader["sex"] is DBNull ? "" : reader.GetString("sex"); order.Age = reader["age"] is DBNull ? "" : reader.GetString("age"); order.IdNumber = reader["id_number"] is DBNull ? "" : reader.GetString("id_number"); order.OrderDate = reader["Order_date"] is DBNull ? DateTime.Now : reader.GetDateTime("Order_date"); order.ChargeDate = reader["charge_date"] is DBNull ? DateTime.Now : reader.GetDateTime("charge_date"); order.RecvDate = reader["recv_date"] is DBNull ? DateTime.Now : reader.GetDateTime("recv_date"); order.DeptName = reader["dept_name"] is DBNull ? "" : reader.GetString("Order_date"); orderList.Add(order); } reader.Close(); } catch (Exception ex) { logger.Info($"按处方归还药品异常——{ex.Message}"); } } return orderList; } public List GetReturnDrugDetail(string orderNo) { List orderDetailsList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT od.id,od.patient_id,od.order_no,od.charge_date,od.drug_id,od.quantity,od.order_unit,od.unit_convercoef,od.set_manu_no, od.set_eff_date,od.use_discrip,od.use_frequ,od.use_once,od.use_by,od.use_self,od.use_dosage,di.Drug_name FROM order_detail od Inner JOIN drug_info di on od.Drug_ID=di.Drug_ID Inner JOIN (SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE ( drawer_type = 1 ) AND (machine_id = '{machine_id}') GROUP BY drug_id ) t ON ( od.drug_id = t.drug_id ) WHERE ( od.order_no = '{orderNo}' ) "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { OrderDetail od = new OrderDetail(); od.SetEffDate = ds.Tables[0].Rows[i]["set_eff_date"].ToString(); od.SetManuNo = ds.Tables[0].Rows[i]["set_manu_no"].ToString(); od.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); od.Quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); DrugInfo drugInfo = new DrugInfo(); drugInfo.DrugName = ds.Tables[0].Rows[i]["Drug_name"].ToString(); od.DrugInfo = drugInfo; orderDetailsList.Add(od); } } MySqlCommand cmd = new MySqlCommand(); } catch (Exception ex) { logger.Info($"归还药品获取明细异常——{ex.Message}"); } } return orderDetailsList; } /// /// 获取还药库位信息——根据处方还药 /// /// /// public List GetChannelStocksForReturn(string drugId, string setEffDate, string setManuNo) { List channelStockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string stockSql = $@"SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE ( drawer_type = 1 ) AND (machine_id = '{machine_id}') AND ( drug_id = '{drugId}' )"; if (!string.IsNullOrEmpty(setEffDate)) { stockSql += " AND EFF_DATE='{setEffDate}'"; } if (!string.IsNullOrEmpty(setManuNo)) { stockSql += " AND MANU_NO='{setManuNo}'"; } stockSql += "ORDER BY eff_date ASC "; MySqlCommand cmd = new MySqlCommand(); cmd.CommandType = CommandType.Text; cmd.Connection = con; cmd.CommandText = stockSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { ChannelStock stock = new ChannelStock(); stock.Id = reader["chsguid"] is DBNull ? "" : reader.GetString("chsguid"); stock.Chnguid = reader["chnguid"] is DBNull ? "" : reader.GetString("chnguid"); stock.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); stock.DrawerNo = reader["row_no"] is DBNull ? 0 : reader.GetInt32("row_no"); stock.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); stock.PosNo = reader["pos_no"] is DBNull ? 0 : reader.GetInt32("pos_no"); stock.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); stock.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); stock.EffDate = reader["eff_date"] is DBNull ? "" : reader.GetString("eff_date"); stock.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); stock.DrawerType = reader["drawer_type"] is DBNull ? 0 : reader.GetInt32("drawer_type"); stock.BoardType = reader["board_type"] is DBNull ? 0 : reader.GetInt32("board_type"); stock.State = reader["state"] is DBNull ? 0 : reader.GetInt32("state"); channelStockList.Add(stock); } reader.Close(); } catch (Exception ex) { logger.Info($"GetChannelStocks异常——{ex.Message}"); } } return channelStockList; } //保存归还药品——根据处方还药 public bool ReturnDrugSave(List record, string orderNo) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { string updatSql = $@"UPDATE ORDER_INFO SET dm_status=2 WHERE ORDER_NO='{orderNo}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Transaction = transaction; cmd.CommandType = CommandType.Text; cmd.Connection = con; cmd.CommandText = updatSql; int iResult = cmd.ExecuteNonQuery(); for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; int quantity = it.Quantity + it.ReturnQuantity; string stockupdatSql = $@"UPDATE channel_stock SET quantity={quantity},manu_no='{it.ManuNo}',eff_date='{it.EffDate}' where chsguid='{it.Id}'"; cmd.CommandText = stockupdatSql; iResult = cmd.ExecuteNonQuery(); List nowChannels = new List(); string searchSql = $@"SELECT drug_id,manu_no,quantity FROM channel_stock WHERE drawer_type=1 AND MACHINE_ID='{machine_id}' AND DRUG_ID='{it.DrugId}'"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(searchSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int j = 0; j < ds.Tables[0].Rows.Count; j++) { ChannelStock stock = new ChannelStock(); stock.DrugId = ds.Tables[0].Rows[j]["drug_id"].ToString(); stock.ManuNo = ds.Tables[0].Rows[j]["manu_no"].ToString(); stock.Quantity = Convert.ToInt32(ds.Tables[0].Rows[j]["quantity"]); nowChannels.Add(stock); } } DateTime? effDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer?.Id; int stockQuantity = nowChannels.Sum(it => it.Quantity); int manunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); string insertSql = $@"INSERT INTO dm_machine_record SET MACHINE_ID='{it.MachineId}', ROW_NO='{it.DrawerNo}',COL_NO='{it.ColNo}',DRUG_ID='{it.DrugInfo}',manu_no='{it.ManuNo}',eff_date='{effDate}',operator={Operator},reviewer={Reviewer},operation_time='{DateTime.Now}', quantity={it.ReturnQuantity},type=31,invoice_id='{orderNo}',stock_quantity={stockQuantity},manunoQuantity={manunoQuantity}"; cmd.CommandText = insertSql; cmd.Parameters.Clear(); cmd.ExecuteNonQuery(); } transaction.Commit(); bFlag = true; } catch (Exception ex) { logger.Info($"ReturnDrugSave异常——{ex.Message}"); transaction.Rollback(); bFlag = false; } } return bFlag; } /// /// 根据抽屉号、库位号查询库存数据(用于更新近 效期、批次) /// /// /// /// public List GetStockManuEffDate(int rowNo, int colNo) { List stockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT drug_id,manu_no,row_no,col_no,chsguid,chnguid FROM channel_stock WHERE MACHINE_ID='{machine_id}' AND ROW_NO='{rowNo}' AND COL_NO='{colNo}' order by eff_date"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); stock.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); stock.ManuNo = ds.Tables[0].Rows[i]["manu_no"].ToString(); stock.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); stock.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); stock.Id = ds.Tables[0].Rows[i]["chsguid"].ToString(); stock.Chnguid = ds.Tables[0].Rows[i]["chnguid"].ToString(); stockList.Add(stock); } } } catch (Exception ex) { logger.Info($"GetStockManuEffDate异常——{ex.Message}"); } } return stockList; } /// /// 归还药品加载数据——根据药品还药 /// /// public List ReturnDrugByDrug(string searchCode, string searchValue, int PageNum, int PageSize, ref int totalCount) { List machineRecordList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { MySqlCommand cmd = new MySqlCommand(); cmd.CommandType = CommandType.Text; cmd.Connection = con; string countSql = $@"SELECT count(1) FROM dm_machine_record mr inner join drug_info di on mr.drug_id=di.drug_id inner join user_list ul on mr.operator=ul.id WHERE ( mr.type = 2 ) AND ( mr.status < 2 ) AND (mr.machine_id = '{machine_id}') "; if (!string.IsNullOrEmpty(searchCode) && !string.IsNullOrEmpty(searchValue)) { switch (searchCode) { case "DrugName": countSql += $@" AND di.drug_name='{searchValue}'"; break; case "PyCode": countSql += $@" AND di.py_code='{searchValue}'"; break; case "DrugBarcode": countSql += $@" AND di.drug_barcode='{searchValue}'"; break; case "DrugId": countSql += $@" AND mr.drug_id='{searchValue}'"; break; } } cmd.CommandText = countSql; totalCount = Convert.ToInt32(cmd.ExecuteScalar()); PageNum = (PageNum - 1) * PageSize; string stockSql = $@"SELECT mr.id,mr.machine_id,mr.drug_id,mr.quantity,mr.stock_quantity,mr.check_quantity,mr.manu_no,mr.operator,mr.reviewer,mr.operation_time, mr.eff_date,mr.type,mr.invoice_id,mr.col_no,mr.drawer_no,mr.department_id,mr.status,mr.return_quantity1,mr.return_quantity2,mr.get_id,mr.is_destroy, mr.manunoQuantity,mr.supplierDept,mr.receiveDept,ul.user_name,ul.user_id,di.drug_name,di.drug_spec FROM dm_machine_record mr inner join drug_info di on mr.drug_id=di.drug_id inner join user_list ul on mr.operator=ul.id WHERE ( mr.type = 2 ) AND ( mr.status < 2 ) AND (mr.machine_id = '{machine_id}') "; if (!string.IsNullOrEmpty(searchCode) && !string.IsNullOrEmpty(searchValue)) { switch (searchCode) { case "DrugName": stockSql += $@" AND di.drug_name='{searchValue}'"; break; case "PyCode": stockSql += $@" AND di.py_code='{searchValue}'"; break; case "DrugBarcode": stockSql += $@" AND di.drug_barcode='{searchValue}'"; break; case "DrugId": stockSql += $@" AND mr.drug_id='{searchValue}'"; break; } } stockSql += $" ORDER BY mr.operation_time ASC LIMIT {PageNum},{PageSize} "; cmd.CommandText = stockSql; MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { UserList user = new UserList(); user.Id = reader["operator"] is DBNull ? 0 : reader.GetInt32("operator"); user.UserName = reader["user_id"] is DBNull ? "" : reader.GetString("user_id"); user.Nickname = reader["user_name"] is DBNull ? "" : reader.GetString("user_name"); DrugInfo drug = new DrugInfo(); drug.DrugName = reader["drug_name"] is DBNull ? "" : reader.GetString("drug_name"); drug.DrugSpec = reader["drug_spec"] is DBNull ? "" : reader.GetString("drug_spec"); drug.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); MachineRecord machineRecord = new MachineRecord(); machineRecord.User = user; machineRecord.DrugInfo = drug; machineRecord.Id = reader["id"] is DBNull ? 0 : reader.GetInt32("id"); machineRecord.MachineId = reader["machine_id"] is DBNull ? "" : reader.GetString("machine_id"); machineRecord.DrugId = reader["drug_id"] is DBNull ? "" : reader.GetString("drug_id"); machineRecord.Quantity = reader["quantity"] is DBNull ? 0 : reader.GetInt32("quantity"); machineRecord.StockQuantity = reader["stock_quantity"] is DBNull ? 0 : reader.GetInt32("stock_quantity"); machineRecord.CheckQuantity = reader["check_quantity"] is DBNull ? 0 : reader.GetInt32("check_quantity"); machineRecord.ManuNo = reader["manu_no"] is DBNull ? "" : reader.GetString("manu_no"); machineRecord.Operator = reader["operator"] is DBNull ? 0 : reader.GetInt32("operator"); machineRecord.Reviewer = reader["reviewer"] is DBNull ? 0 : reader.GetInt32("reviewer"); machineRecord.OperationTime = reader["operation_time"] is DBNull ? DateTime.Now.AddYears(-100) : reader.GetDateTime("operation_time"); machineRecord.EffDate = reader["eff_date"] is DBNull ? null : reader.GetDateTime("eff_date"); machineRecord.InvoiceId = reader["invoice_id"] is DBNull ? "" : reader.GetString("invoice_id"); machineRecord.ColNo = reader["col_no"] is DBNull ? 0 : reader.GetInt32("col_no"); machineRecord.DrawerNo = reader["drawer_no"] is DBNull ? 0 : reader.GetInt32("drawer_no"); machineRecord.DepartmentId = reader["department_id"] is DBNull ? "" : reader.GetString("department_id"); machineRecord.Status = reader["status"] is DBNull ? 0 : reader.GetInt32("status"); machineRecord.ReturnQuantity1 = reader["return_quantity1"] is DBNull ? 0 : reader.GetInt32("return_quantity1"); machineRecord.ReturnQuantity2 = reader["return_quantity2"] is DBNull ? 0 : reader.GetInt32("return_quantity2"); machineRecord.GetId = reader["get_id"] is DBNull ? 0 : reader.GetInt32("get_id"); machineRecord.IsDestroy = reader["is_destroy"] is DBNull ? 0 : reader.GetInt32("is_destroy"); machineRecord.ManunoQuantity = reader["manunoQuantity"] is DBNull ? 0 : reader.GetInt32("manunoQuantity"); machineRecord.SupplierDept = reader["supplierDept"] is DBNull ? "" : reader.GetString("supplierDept"); machineRecord.ReceiveDept = reader["receiveDept"] is DBNull ? "" : reader.GetString("receiveDept"); machineRecordList.Add(machineRecord); } reader.Close(); } catch (Exception ex) { logger.Info($"GetChannelStocks异常——{ex.Message}"); } } return machineRecordList; } public List ReturnDrugByDrugDialog(string drugId, string manuNo) { List channelStockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date,quantity,drawer_type,board_type,state FROM channel_stock WHERE drug_id = '{drugId}' AND machine_id = '{machine_id}' AND manu_no = '{manuNo}' ORDER BY row_no ASC,col_no ASC "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock cs = new ChannelStock(); cs.Id = ds.Tables[0].Rows[i]["chsguid"] is DBNull ? "" : ds.Tables[0].Rows[i]["chsguid"].ToString(); cs.Chnguid = ds.Tables[0].Rows[i]["chnguid"] is DBNull ? "" : ds.Tables[0].Rows[i]["chnguid"].ToString(); cs.MachineId = ds.Tables[0].Rows[i]["machine_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["machine_id"].ToString(); cs.DrawerNo = ds.Tables[0].Rows[i]["row_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); cs.ColNo = ds.Tables[0].Rows[i]["col_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); cs.PosNo = ds.Tables[0].Rows[i]["pos_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); cs.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); cs.ManuNo = ds.Tables[0].Rows[i]["manu_no"].ToString(); cs.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? "" : ds.Tables[0].Rows[i]["eff_date"].ToString(); cs.Quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); cs.DrawerType = ds.Tables[0].Rows[i]["drawer_type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); cs.BoardType = ds.Tables[0].Rows[i]["board_type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); cs.State = ds.Tables[0].Rows[i]["state"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["state"]); channelStockList.Add(cs); } } } catch (Exception ex) { logger.Info($"ReturnDrugByDrugDialog——{ex.Message}"); } } return channelStockList; } /// /// 保存归还药品——根据药品还药 /// /// /// /// /// public bool ReturnDrugByDrugSave(int returnQuantity, string invoice_id, ChannelStock channelStock, MachineRecord machineRecord) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { int quantity = channelStock.Quantity + returnQuantity; string updatSql = $@"UPDATE channel_stock SET quantity='{quantity}' WHERE chsguid='{channelStock.Id}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Transaction = transaction; cmd.CommandType = CommandType.Text; cmd.Connection = con; cmd.CommandText = updatSql; int iResult = cmd.ExecuteNonQuery(); string querySql = $@"SELECT chsguid,chnguid,machine_id,row_no,col_no,pos_no,drug_id,manu_no,eff_date, quantity,drawer_type,board_type,state FROM channel_stock WHERE (machine_id = '{machine_id}') AND (drug_id = '{channelStock.DrugId}') AND ( drawer_type = 1 ) "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(querySql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); List nowChannels = new List(); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock cs = new ChannelStock(); cs.Id = ds.Tables[0].Rows[i]["chsguid"].ToString(); cs.Chnguid = ds.Tables[0].Rows[i]["chnguid"].ToString(); cs.DrawerNo = ds.Tables[0].Rows[i]["row_no"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); cs.ColNo = ds.Tables[0].Rows[i]["col_no"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); cs.PosNo = ds.Tables[0].Rows[i]["pos_no"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); cs.DrugId = ds.Tables[0].Rows[i]["drug_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["drug_id"].ToString(); cs.ManuNo = ds.Tables[0].Rows[i]["manu_no"] is DBNull ? "" : ds.Tables[0].Rows[i]["manu_no"].ToString(); ; cs.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? "" : ds.Tables[0].Rows[i]["eff_date"].ToString(); ; cs.Quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); cs.DrawerType = ds.Tables[0].Rows[i]["drawer_type"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); ; cs.BoardType = ds.Tables[0].Rows[i]["board_type"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); ; cs.State = ds.Tables[0].Rows[i]["state"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["state"]); nowChannels.Add(cs); } } int status = (machineRecord.CanReturnQuantity - returnQuantity) == 0 ? 2 : 1; string upMachineSql = $@"UPDATE dm_machine_record SET status='{status}',return_quantity1='{machineRecord.ReturnQuantity1 + returnQuantity}' WHERE id='{machineRecord.Id}'"; cmd.CommandText = upMachineSql; iResult = cmd.ExecuteNonQuery(); DateTime? EffDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; string insertSql = $@"INSERT INTO dm_machine_record (machine_id,drug_id,quantity,stock_quantity,manu_no,operator,reviewer,operation_time,eff_date, type,invoice_id,col_no,drawer_no,get_id,manunoQuantity) VALUES ('{machine_id}','{channelStock.DrugId}',{returnQuantity},'{nowChannels.Sum(it => it.Quantity)}','{channelStock.ManuNo}', {HomeWindowViewModel.Operator?.Id},{HomeWindowViewModel.Reviewer?.Id},'{DateTime.Now}','{EffDate}', 31,'{invoice_id}',{channelStock.ColNo},{channelStock.DrawerNo},'{machineRecord.Id}', '{nowChannels.FindAll(it2 => it2.ManuNo == channelStock.ManuNo).Sum(it => it.Quantity)}')"; cmd.CommandText = insertSql; iResult = cmd.ExecuteNonQuery(); transaction.Commit(); bFlag = true; } catch (Exception ex) { logger.Info($"ReturnDrugSave异常——{ex.Message}"); transaction.Rollback(); bFlag = false; } } return bFlag; } ///归还空瓶 public List ReturnEmptyInfo() { List stockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT (SELECT IFNULL(SUM(IFNULL((( mr.quantity - mr.return_quantity1 ) - mr.return_quantity2 ),0)),0) FROM dm_machine_record mr WHERE ( mr.status <> 2 ) AND ( mr.type = 2 ) AND ( mr.drug_id = cs.drug_id ) limit 0,1) AS CanReturnQuantity , di.drug_id AS DiDrugId , di.drug_name AS DiDrugName , di.drug_spec AS DiDrugSpec , di.manufactory AS DiManufactory , di.pack_unit AS DiPackUnit , cs.quantity AS Quantity ,cs.chsguid AS Id ,cs.chnguid AS Chnguid ,cs.machine_id AS MachineId ,cs.row_no AS DrawerNo , cs.col_no AS ColNo ,cs.pos_no AS PosNo ,cs.drug_id AS DrugId ,cs.manu_no AS ManuNo ,cs.eff_date AS EffDate ,cs.drawer_type AS DrawerType , cs.board_type AS BoardType ,cs.state AS State FROM channel_stock cs Left JOIN drug_info di ON ( cs.drug_id = CAST(di.drug_id AS CHAR)) WHERE ( cs.drawer_type <> 1 )ORDER BY cs.row_no ASC,cs.col_no ASC "; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); stock.CanReturnQuantity = Convert.ToInt32(ds.Tables[0].Rows[i]["CanReturnQuantity"]); DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["DiDrugId"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["DiDrugName"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["DiDrugSpec"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["DiManufactory"].ToString(); di.PackUnit = ds.Tables[0].Rows[i]["DiPackUnit"].ToString(); stock.DrugInfo = di; stock.Quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["Quantity"]); stock.Id = ds.Tables[0].Rows[i]["Id"].ToString(); stock.Chnguid = ds.Tables[0].Rows[i]["Chnguid"].ToString(); stock.MachineId = ds.Tables[0].Rows[i]["MachineId"].ToString(); stock.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["DrawerNo"]); stock.BoardType = Convert.ToInt32(ds.Tables[0].Rows[i]["BoardType"]); stock.State = Convert.ToInt32(ds.Tables[0].Rows[i]["State"]); stockList.Add(stock); } } } catch (Exception ex) { logger.Info($"ReturnEmptyInfo异常——{ex.Message}"); } } return stockList; } /// /// 还空瓶弹窗加载数据 /// /// /// public List ReturnEmptyDetails(string drugId) { List recordList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT id,machine_id,drug_id,quantity,stock_quantity,check_quantity,manu_no,operator,reviewer,operation_time, eff_date,type,invoice_id,col_no,drawer_no,department_id,status,return_quantity1,return_quantity2,get_id,is_destroy,manunoQuantity, supplierDept,receiveDept FROM dm_machine_record DR INNER JOIN UserList UL ON DR. WHERE MACHINE_ID='{machine_id}' AND TYPE=2 AND STATUS<>2 AND DRUG_ID='{drugId}' ORDER BY operation_time,id"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { MachineRecord record = new MachineRecord(); record.Id = Convert.ToInt32(ds.Tables[0].Rows[i]["id"]); record.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); record.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); record.Quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); record.StockQuantity = Convert.ToInt32(ds.Tables[0].Rows[i]["stock_quantity"]); record.CheckQuantity = Convert.ToInt32(ds.Tables[0].Rows[i]["check_quantity"]); record.ManuNo = ds.Tables[0].Rows[i]["manu_no"].ToString(); record.Operator = Convert.ToInt32(ds.Tables[0].Rows[i]["operator"]); record.Reviewer = Convert.ToInt32(ds.Tables[0].Rows[i]["reviewer"] is DBNull ? 0 : ds.Tables[0].Rows[i]["reviewer"]); record.OperationTime = Convert.ToDateTime(ds.Tables[0].Rows[i]["operation_time"]); record.EffDate = Convert.ToDateTime(ds.Tables[0].Rows[i]["eff_date"]); record.Type = Convert.ToInt32(ds.Tables[0].Rows[i]["type"]); record.InvoiceId = ds.Tables[0].Rows[i]["invoice_id"].ToString(); record.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); record.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_no"]); record.DepartmentId = ds.Tables[0].Rows[i]["department_id"].ToString(); record.Status = Convert.ToInt32(ds.Tables[0].Rows[i]["status"]); record.ReturnQuantity1 = Convert.ToInt32(ds.Tables[0].Rows[i]["return_quantity1"]); record.ReturnQuantity2 = Convert.ToInt32(ds.Tables[0].Rows[i]["return_quantity2"]); record.GetId = Convert.ToInt32(ds.Tables[0].Rows[i]["get_id"]); record.IsDestroy = Convert.ToInt32(ds.Tables[0].Rows[i]["is_destroy"]); record.ManunoQuantity = Convert.ToInt32(ds.Tables[0].Rows[i]["manunoQuantity"]); record.SupplierDept = ds.Tables[0].Rows[i]["supplierDept"] is DBNull ? "" : ds.Tables[0].Rows[i]["supplierDept"].ToString(); record.ReceiveDept = ds.Tables[0].Rows[i]["receiveDept"] is DBNull ? "" : ds.Tables[0].Rows[i]["receiveDept"].ToString(); recordList.Add(record); } } } catch (Exception ex) { logger.Info($"ReturnEmptyDetails——{ex.Message}"); } } return recordList; } //保存归还空瓶 public bool ReturnEmptySave(int Quantity, string id, List records, string drug_id, ChannelStock channelStock, int ReturnQuantity) { bool bFlag = false; List nowChannels = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { string InvoiceId = "RETURN_" + (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; string updateSql = $@"UPDATE CHANNEL_STOCK SET QUANTITY='{Quantity}' WHERE ID='{id}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.Transaction = transaction; cmd.CommandText = updateSql; int iResult = cmd.ExecuteNonQuery(); string querySql = $@"SELECT drug_id,manu_no,quantity FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND DRUG_ID='{drug_id}' AND drawer_type=1"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(querySql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); stock.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); stock.ManuNo = ds.Tables[0].Rows[i]["manu_no"].ToString(); stock.Quantity = Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); nowChannels.Add(stock); } } for (int j = 0; j < records.Count; j++) { MachineRecord _MachineRecord = records[j]; string updateRecordSql = $@"UPDATE dm_machine_record SET return_quantity2={_MachineRecord.Quantity - _MachineRecord.ReturnQuantity1},STATUS=2 WHERE ID='{_MachineRecord.Id}'"; cmd.CommandText = updateRecordSql; cmd.ExecuteNonQuery(); DateTime? effDate = !String.IsNullOrEmpty(channelStock.EffDate) ? DateTime.ParseExact(channelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer?.Id; int StockQuantity = nowChannels.Sum(it => it.Quantity); int ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == channelStock.ManuNo).Sum(it => it.Quantity); string insertSql = $@"INSERT INTO dm_machine_record(MACHINE_ID,ROW_NO,COL_NO,DRUG_ID,MANU_NO,EFF_DATE,operator,reviewer,operation_time,quantity, TYPE,invoice_id,get_id,stock_quantity,manunoQuantity) VALUES('{machine_id}','{channelStock.DrawerNo}','{channelStock.ColNo}','{channelStock.DrugId}','{_MachineRecord.ManuNo}', '{effDate}','{Operator}','{Reviewer}','{DateTime.Now}','{ReturnQuantity}',32,{InvoiceId},{_MachineRecord.Id},{StockQuantity},{ManunoQuantity})"; cmd.CommandText = insertSql; cmd.ExecuteNonQuery(); } transaction.Commit(); bFlag = true; } catch (Exception ex) { transaction.Rollback(); logger.Info($"ReturnEmptySave异常——{ex.Message}"); bFlag = false; } } return bFlag; } #endregion #region //标签绑定 public List BinddingDetailInfo() { List drugInfoList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string str = $@"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock, CONCAT(drug_name,' ',drug_spec)as drug_name_spec FROM drug_info d order by drug_name,drug_id"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(str, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["py_code"].ToString(); di.DrugBarcode = ds.Tables[0].Rows[i]["drug_barcode"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["drug_name"].ToString(); di.DrugBrandname = ds.Tables[0].Rows[i]["drug_brand_name"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); di.Dosage = ds.Tables[0].Rows[i]["dosage"].ToString(); di.PackUnit = ds.Tables[0].Rows[i]["pack_unit"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["manufactory"].ToString(); //di.MaxStock = ds.Tables[0].Rows[i]["max_stock"]; di.drug_name_spec = ds.Tables[0].Rows[i]["drug_name_spec"].ToString(); drugInfoList.Add(di); } } } catch (Exception ex) { logger.Info($"ReturnEmptyInfo异常——{ex.Message}"); } } return drugInfoList; } /// /// 根据查询绑定标签 /// /// public List BinddingDetailInfoBySearch(string searchValue = null) { List drugInfoList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string str = $@"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock, CONCAT(drug_name,' ',drug_spec)as drug_name_spec FROM drug_info d "; if (!string.IsNullOrEmpty(searchValue)) { str += $" WHERE Drug_name LIKE '%{searchValue}%' OR py_code LIKE '%{searchValue}%' OR drug_id LIKE '%{searchValue}%'"; } str += " order by drug_name,drug_id"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(str, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["py_code"].ToString(); di.DrugBarcode = ds.Tables[0].Rows[i]["drug_barcode"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["drug_name"].ToString(); di.DrugBrandname = ds.Tables[0].Rows[i]["drug_brand_name"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); di.Dosage = ds.Tables[0].Rows[i]["dosage"].ToString(); di.PackUnit = ds.Tables[0].Rows[i]["pack_unit"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["manufactory"].ToString(); //di.MaxStock = ds.Tables[0].Rows[i]["max_stock"]; di.drug_name_spec = ds.Tables[0].Rows[i]["drug_name_spec"].ToString(); drugInfoList.Add(di); } } } catch (Exception ex) { logger.Info($"ReturnEmptyInfo异常——{ex.Message}"); } } return drugInfoList; } /// /// /// /// /// /// /// /// public List GetChannelsByDrawerNo(int row_no, int PageNum, int PageSize, ref int totalCount) { List channelLists = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countSql = $@"SELECT COUNT(1) FROM channel_list CL LEFT JOIN DRUG_INFO DI ON CL.DRUG_ID=DI.DRUG_ID WHERE CL.MACHINE_ID='{machine_id}' "; if (row_no > 0) { countSql += $" AND ROW_NO={row_no} "; } countSql += " ORDER BY CL.ROW_NO,CL.COL_NO"; MySqlCommand cmd = new MySqlCommand(countSql, con); totalCount = Convert.ToInt32(cmd.ExecuteScalar()); PageNum = (PageNum - 1) * PageSize; string strSql = $@"SELECT CL.chnguid,CL.machine_id,CL.row_no,CL.col_no,CL.pos_no,CL.drug_id,CL.drawer_type, CL.board_type,CL.state,DI.DRUG_NAME,DI.py_code,DI.drug_spec,DI.manufactory FROM channel_list CL LEFT JOIN DRUG_INFO DI ON CL.DRUG_ID=DI.DRUG_ID WHERE CL.MACHINE_ID='{machine_id}'"; if (row_no > 0) { strSql += $" ROW_NO={row_no}"; } strSql += $" ORDER BY CL.ROW_NO,CL.COL_NO LIMIT {PageNum},{PageSize}"; MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); mySqlDataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelList clist = new ChannelList(); clist.Id = ds.Tables[0].Rows[i]["chnguid"].ToString(); clist.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); clist.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); clist.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); clist.PosNo = ds.Tables[0].Rows[i]["pos_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); clist.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); clist.DrawerType = Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); clist.BoardType = Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); clist.State = ds.Tables[0].Rows[i]["state"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["state"]); DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["py_code"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["manufactory"].ToString(); clist.Drug = di; string csSql = $@"SELECT chsguid AS Id,chnguid AS Chnguid,machine_id AS MachineId,row_no AS DrawerNo,col_no AS ColNo,pos_no AS PosNo, drug_id AS DrugId,manu_no AS ManuNo,eff_date AS EffDate,quantity AS Quantity,drawer_type AS DrawerType,board_type AS BoardType,state AS State FROM channel_stock WHERE chnguid='{ds.Tables[0].Rows[i]["chnguid"].ToString()}'"; List csList = new List(); MySqlDataAdapter mySqlDataAdapter2 = new MySqlDataAdapter(csSql, con); DataSet ds2 = new DataSet(); mySqlDataAdapter2.Fill(ds2); if (ds2 != null && ds2.Tables[0] != null && ds2.Tables[0].Rows.Count > 0) { for (int j = 0; j < ds2.Tables[0].Rows.Count; j++) { ChannelStock cs = new ChannelStock(); cs.Id = ds2.Tables[0].Rows[j]["Id"].ToString(); cs.Chnguid = ds2.Tables[0].Rows[j]["Chnguid"].ToString(); cs.MachineId = ds2.Tables[0].Rows[j]["MachineId"].ToString(); cs.DrawerNo = Convert.ToInt32(ds2.Tables[0].Rows[j]["DrawerNo"]); cs.ColNo = Convert.ToInt32(ds2.Tables[0].Rows[j]["ColNo"]); cs.PosNo = ds2.Tables[0].Rows[j]["PosNo"] is DBNull ? 0 : Convert.ToInt32(ds2.Tables[0].Rows[j]["PosNo"]); cs.DrugId = ds2.Tables[0].Rows[j]["DrugId"].ToString(); cs.ManuNo = ds2.Tables[0].Rows[j]["ManuNo"].ToString(); cs.EffDate = ds2.Tables[0].Rows[j]["EffDate"].ToString(); cs.Quantity = ds2.Tables[0].Rows[j]["Quantity"] is DBNull ? 0 : Convert.ToInt32(ds2.Tables[0].Rows[j]["Quantity"]); cs.DrawerType = ds2.Tables[0].Rows[j]["DrawerType"] is DBNull ? 0 : Convert.ToInt32(ds2.Tables[0].Rows[j]["DrawerType"]); cs.BoardType = ds2.Tables[0].Rows[j]["BoardType"] is DBNull ? 0 : Convert.ToInt32(ds2.Tables[0].Rows[j]["BoardType"]); cs.State = ds2.Tables[0].Rows[j]["State"] is DBNull ? 0 : Convert.ToInt32(ds2.Tables[0].Rows[j]["State"]); csList.Add(cs); } } clist.channelStocks = csList; channelLists.Add(clist); } } } catch (Exception ex) { logger.Info($"GetChannelsByDrawerNo异常——{ex.Message}"); } } return channelLists; } /// /// 回收库位查询 /// /// public int BindQuery(string drugId) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string querySql = $@"SELECT count(1) FROM CHANNEL_LIST WHERE MACHINE_ID='{machine_id}' AND DRUG_ID='{drugId}' AND drawer_type<>1"; MySqlCommand cmd = new MySqlCommand(querySql, con); iResult = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"BindQuery异常——{ex.Message}"); } } return iResult; } public int BindQueryByDrugIdDrawerNo(string drugId, int drawerNo) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string querySql = $@"SELECT count(1) FROM CHANNEL_LIST WHERE MACHINE_ID='{machine_id}' AND DRUG_ID='{drugId}' AND drawer_type=1 AND ROW_NO={drawerNo}"; MySqlCommand cmd = new MySqlCommand(querySql, con); iResult = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"BindQuery异常——{ex.Message}"); } } return iResult; } /// /// 移出绑定 /// /// public bool BindDrugRemvoe(string chnguid) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { string strSql = $@"UPDATE CHANNEL_LIST SET DRUG_ID=NULL WHERE chnguid='{chnguid}'"; MySqlCommand cmd = new MySqlCommand(); cmd.Transaction = transaction; cmd.Connection = con; cmd.CommandText = strSql; cmd.ExecuteNonQuery(); string updateStockSql = $@"UPDATE CHANNEL_STOCK SET DRUG_ID=NULL,MANU_NO=NULL,EFF_DATE=NULL WHERE CHNGUID='{chnguid}'"; cmd.CommandText = updateStockSql; cmd.ExecuteNonQuery(); transaction.Commit(); bFlag = true; logger.Info($"解绑药品完成CHNGUID:{chnguid}"); } catch (Exception ex) { logger.Info($"BindDrugRemvoe异常——{ex.Message}"); transaction.Rollback(); } } return bFlag; } public int GetChannelStocksByChnguid(string chnguid) { int iRestult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT count(1) FROM CHANNEL_STOCK WHERE MACHINE_ID='{machine_id}' AND CHNGUID='{chnguid}' AND QUANTITY>0"; MySqlCommand cmd = new MySqlCommand(strSql, con); iRestult = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"GetChannelStocksByChnguid异常——{ex.Message}"); } } return iRestult; } public bool updateChannelList(string chnguid, string drugId) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string insertSql = $@"UPDATE CHANNEL_LIST SET DRUG_ID='{drugId}',pos_no=0 where chnguid='{chnguid}'"; MySqlCommand cmd = new MySqlCommand(insertSql, con); int iResult = cmd.ExecuteNonQuery(); if (iResult > 0) { bFlag = true; } } catch (Exception ex) { logger.Info($"updateChannelList异常——{ex.Message}"); } } return bFlag; } #endregion #region 库存管理 /// /// 库存列表加载数据 /// /// /// /// /// /// /// public List StockListInfo(string searchCode, string searchValue, int pageNum, int pageSize, ref int totalCount) { List drugList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string sql = $@"SELECT Count(1) FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) ) "; if (!string.IsNullOrEmpty(searchValue)) { switch (searchCode) { case "DrugId": sql += $" AND (drug_id like concat('%{searchValue}%')) "; break; case "DrugName": sql += $" AND (drug_name like concat('%{searchValue}%'))"; break; case "PyCode": sql += $" AND (py_code LIKE CONCAT('%{searchValue}%')"; break; case "DrugBarcode": sql += $" AND (drug_barcode LIKE CONCAT('%{searchValue}%')"; ; break; } } MySqlCommand cmd = new MySqlCommand(sql, con); totalCount = Convert.ToInt32(cmd.ExecuteScalar()); pageNum = (pageNum - 1) * pageSize; string strSql = $@"SELECT drug_id,py_code,drug_barcode,drug_name,drug_brand_name,drug_spec,dosage,pack_unit,manufactory,max_stock FROM drug_info di WHERE ( EXISTS (SELECT 1 FROM channel_stock cs WHERE ((cs.machine_id = '{machine_id}') AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) )"; if (!string.IsNullOrEmpty(searchValue)) { switch (searchCode) { case "DrugId": strSql += $" AND (drug_id like concat('%{searchValue}%')) "; break; case "DrugName": strSql += $" AND (drug_name like concat('%{searchValue}%'))"; break; case "PyCode": strSql += $" AND (py_code LIKE CONCAT('%{searchValue}%')"; break; case "DrugBarcode": strSql += $" AND (drug_barcode LIKE CONCAT('%{searchValue}%')"; ; break; } } strSql += $" ORDER BY drug_name ASC LIMIT {pageNum},{pageSize}"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["py_code"].ToString(); di.DrugBarcode = ds.Tables[0].Rows[i]["drug_barcode"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["drug_name"].ToString(); di.DrugBrandname = ds.Tables[0].Rows[i]["drug_brand_name"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); di.Dosage = ds.Tables[0].Rows[i]["dosage"].ToString(); di.PackUnit = ds.Tables[0].Rows[i]["pack_unit"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["manufactory"].ToString(); di.MaxStock = Convert.ToInt32(ds.Tables[0].Rows[i]["max_stock"] is DBNull ? 0 : ds.Tables[0].Rows[i]["max_stock"]); List stockList = new List(); string stockSql = $@"SELECT chsguid AS Id,chnguid AS Chnguid,machine_id AS MachineId,row_no AS DrawerNo,col_no AS ColNo,pos_no AS PosNo, drug_id AS DrugId,manu_no AS ManuNo,eff_date AS EffDate,quantity AS Quantity,drawer_type AS DrawerType,board_type AS BoardType,state AS State FROM CHANNEL_STOCK WHERE DRUG_ID='{di.DrugId}' AND ( drawer_type = 1 ) AND ((machine_id = '{machine_id}') AND ( drug_id IS NOT NULL )) ORDER BY row_no , col_no "; MySqlDataAdapter stockAdapter = new MySqlDataAdapter(stockSql, con); DataSet stockDS = new DataSet(); stockAdapter.Fill(stockDS); if (stockDS != null && stockDS.Tables[0] != null && stockDS.Tables[0].Rows.Count > 0) { for (int j = 0; j < stockDS.Tables[0].Rows.Count; j++) { ChannelStock stock = new ChannelStock(); stock.Id = stockDS.Tables[0].Rows[j]["Id"].ToString(); stock.Chnguid = stockDS.Tables[0].Rows[j]["Chnguid"].ToString(); stock.MachineId = stockDS.Tables[0].Rows[j]["MachineId"].ToString(); stock.DrawerNo = stockDS.Tables[0].Rows[j]["DrawerNo"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["DrawerNo"]); stock.ColNo = stockDS.Tables[0].Rows[j]["ColNo"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["ColNo"]); stock.PosNo = stockDS.Tables[0].Rows[j]["PosNo"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["PosNo"]); stock.DrugId = stockDS.Tables[0].Rows[j]["DrugId"].ToString(); stock.ManuNo = stockDS.Tables[0].Rows[j]["ManuNo"].ToString(); stock.EffDate = stockDS.Tables[0].Rows[j]["EffDate"].ToString(); stock.Quantity = stockDS.Tables[0].Rows[j]["Quantity"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["Quantity"]); stock.DrawerType = stockDS.Tables[0].Rows[j]["DrawerType"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["DrawerType"]); stock.BoardType = stockDS.Tables[0].Rows[j]["BoardType"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["BoardType"]); stock.State = stockDS.Tables[0].Rows[j]["State"] is DBNull ? -1 : Convert.ToInt32(stockDS.Tables[0].Rows[j]["State"]); stockList.Add(stock); } } di.channelStocks = stockList; drugList.Add(di); } } // string sql2 = $@"SELECT drug_id,py_code,drug_barcode,drug_name,drug_brand_name,drug_spec,dosage,pack_unit,manufactory,max_stock //FROM drug_info di WHERE (drug_name like concat('%',@MethodConst0,'%')) AND ( EXISTS (SELECT 1 FROM channel_stock cs //WHERE ((cs.machine_id = IFNULL( @Const2 ,@MethodConst3)) AND( cs.drug_id IS NOT NULL )) AND drug_id=di.drug_id ) ) //ORDER BY drug_id ASC LIMIT 0,3"; // string sql3 = $@"SELECT chsguid AS Id,chnguid AS Chnguid,machine_id AS MachineId,row_no AS DrawerNo,col_no AS ColNo,pos_no AS PosNo, // drug_id AS DrugId,manu_no AS ManuNo,eff_date AS EffDate,quantity AS Quantity,drawer_type AS DrawerType,board_type AS BoardType,state AS State // FROM channel_stock WHERE drug_id IN ('11492','12613','12614') AND ( drawer_type = 1 ) AND ((machine_id = '{machine_id}') // AND( drug_id IS NOT NULL )) ORDER BY row_no , col_no "; } catch (Exception ex) { logger.Info($"StockListInfo异常——{ex.Message}"); } } return drugList; } /// /// 库存盘点加载数据 /// /// public List CheckStockInfo(string searchValue) { List stockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string sql = $@"SELECT cs.chsguid,cs.chnguid,cs.machine_id,cs.row_no,cs.col_no,cs.pos_no,cs.drug_id,cs.manu_no, cs.eff_date,cs.quantity,cs.drawer_type,cs.board_type,cs.state,DI.DRUG_NAME,DI.DRUG_SPEC,DI.DOSAGE,DI.MANUFACTORY,DI.PY_CODE FROM channel_stock cs Inner JOIN channel_list cl ON (( cs.chnguid = cl.chnguid ) AND ( cs.drug_id = cl.drug_id )) INNER JOIN DRUG_INFO DI ON cs.drug_id=DI.drug_id WHERE ( cs.drawer_type = 1 ) AND ( cs.drug_id IS NOT NULL ) AND (cs.machine_id = '{machine_id}') "; if (!string.IsNullOrEmpty(searchValue)) { sql += $" AND DI.DRUG_NAME='{searchValue}'"; } sql += " ORDER BY cs.row_no ASC,cs.col_no ASC"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStock stock = new ChannelStock(); stock.Id = ds.Tables[0].Rows[i]["chsguid"].ToString(); stock.Chnguid = ds.Tables[0].Rows[i]["chnguid"].ToString(); stock.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); stock.DrawerNo = Convert.ToInt32(ds.Tables[0].Rows[i]["row_no"]); stock.ColNo = Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); stock.PosNo = ds.Tables[0].Rows[i]["pos_no"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["pos_no"]); stock.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); stock.ManuNo = ds.Tables[0].Rows[i]["manu_no"] is DBNull ? "" : ds.Tables[0].Rows[i]["manu_no"].ToString(); stock.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? "" : ds.Tables[0].Rows[i]["eff_date"].ToString(); stock.Quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); stock.DrawerType = ds.Tables[0].Rows[i]["drawer_type"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_type"]); stock.BoardType = ds.Tables[0].Rows[i]["board_type"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["board_type"]); stock.State = ds.Tables[0].Rows[i]["state"] is DBNull ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["state"]); DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["DRUG_SPEC"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); di.Dosage = ds.Tables[0].Rows[i]["DOSAGE"] is DBNull ? "" : ds.Tables[0].Rows[i]["DOSAGE"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["MANUFACTORY"] is DBNull ? "" : ds.Tables[0].Rows[i]["MANUFACTORY"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["PY_CODE"] is DBNull ? "" : ds.Tables[0].Rows[i]["PY_CODE"].ToString(); stock.DrugInfo = di; stockList.Add(stock); } } } catch (Exception ex) { logger.Info($"CheckStockInfo异常——{ex.Message}"); } } return stockList; } /// /// 库存盘点保存 /// /// /// public bool CheckStockSave(List record) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { MySqlCommand cmd = new MySqlCommand(); for (int i = 0; i < record.Count; i++) { ChannelStock it = record[i]; string insertSql = $@"UPDATE CHANNEL_STOCK SET QUANTITY={it.CheckQuantity},MANU_NO='{it.ManuNo}',EFF_DATE='{it.EffDate}' WHERE CHSGUID='{it.Id}'"; cmd.CommandText = insertSql; cmd.Connection = con; cmd.Transaction = transaction; cmd.ExecuteNonQuery(); List nowChannels = GetChannelStocks(it.DrugId); DateTime? effdate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null; int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer == null ? -1 : HomeWindowViewModel.Reviewer.Id; int Quantity = it.CheckQuantity - it.Quantity; string InvoiceId = "CHECK_" + (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; int StockQuantity = nowChannels.Sum(it => it.Quantity); int CheckQuantity = it.CheckQuantity; int ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity); //盘点时不记录盘点库存为0且盘点后库存仍为0的记录(该批次可能不再用了) if (!it.Quantity.Equals(0) || !it.CheckQuantity.Equals(0)) { string recordSql = $@"INSERT INTO dm_machine_record(MACHINE_ID,drawer_no,COL_NO,DRUG_ID,MANU_NO,EFF_DATE,OPERATOR,REVIEWER,operation_time,QUANTITY,TYPE,invoice_id,stock_quantity,check_quantity,manunoQuantity) VALUES('{it.MachineId}',{it.DrawerNo},{it.ColNo},'{it.DrugId}','{it.ManuNo}','{effdate}',{Operator},{Reviewer},'{DateTime.Now}', {Quantity},4,'{InvoiceId}',{StockQuantity},{CheckQuantity},{ManunoQuantity})"; cmd.CommandText = recordSql; cmd.ExecuteNonQuery(); logger.Info($"库存盘点->库位【{it.DrawerNo}-{it.ColNo}】药品【{it.DrugInfo.DrugName}】盘点前库存【{it.Quantity}】,更改后【{it.CheckQuantity}】"); } } List checkRecordStockList = GetCheckRecordStocks(); logger.Info("已完成-查询channel_stock关联drug_info表信息查询"); List insertList = new List(); if (checkRecordStockList != null && checkRecordStockList.Count > 0) { for (int i = 0; i < checkRecordStockList.Count; i++) { if (!(insertList.Where(it => it.drugId == checkRecordStockList[i].drugId && it.manuNo == checkRecordStockList[i].manuNo).Count() > 0)) { insertList.Add(checkRecordStockList[i]); } } for (int j = 0; j < insertList.Count; j++) { //盘点时不记录盘点库存为0且盘点后库存仍为0的记录(该批次可能不再用了) if (!insertList[j].quantity.Equals(0)) { CheckRecordStock cStock = insertList[j]; int manuQuantiy = checkRecordStockList.Where(it => it.drugId == cStock.drugId && it.manuNo == cStock.manuNo).Sum(it => it.quantity); int quantity = checkRecordStockList.Where(it => it.drugId == cStock.drugId).Sum(it => it.quantity); string operatorUser = HomeWindowViewModel.Operator?.Id.ToString(); string reviewerUser = HomeWindowViewModel.Reviewer?.Id.ToString(); // 保存数据 盘点后药品总库存及批次库存数 string insertCheckRecordStockSql = $@"INSERT INTO check_stock(row_no,COL_NO,QUANTITY,MANU_NO,EFF_DATE,DRUG_NAME,DRUG_SPEC,PACK_UNIT,MANUFACTORY,MAX_STOCK, DRUG_ID,MACHINE_ID,MANUqUANTITY,OPTDATE,OPERATOR,REVIEWER) VALUES({cStock.rowNo},{cStock.colNo},{quantity},'{cStock.manuNo}','{cStock.effDate}','{cStock.drugName}','{cStock.manufactory}','{cStock.drugSpec}','{cStock.packUnit}', {cStock.maxStock},'{cStock.drugId}','{cStock.MachineId}',{manuQuantiy},'{DateTime.Now.ToString()}','{operatorUser}','{reviewerUser}')"; cmd.CommandText = insertCheckRecordStockSql; int iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"CheckStockSave未插入数据{insertCheckRecordStockSql}"); } } } } logger.Info("已完成-保存数据 盘点后药品总库存及批次库存数"); bFlag = true; transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); logger.Info($"CheckStockSave异常——{ex.Message}"); } } return bFlag; } public List GetCheckRecordStocks() { List stockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT cl.row_no AS rowNo,cl.col_no AS colNo,cl.quantity AS quantity,cl.manu_no AS manuNo,cl.eff_date AS effDate, di.drug_name AS drugName,di.drug_spec AS drugSpec,di.pack_unit AS packUnit,di.manufactory AS manufactory,di.max_stock maxStock, cl.drug_id AS drugId,cl.machine_id AS MachineId FROM channel_stock cl INNER JOIN drug_info di ON di.drug_id = cl.drug_id WHERE cl.machine_id = '{machine_id}' AND cl.drawer_type = 1 ORDER BY cl.drug_id"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CheckRecordStock recordStock = new CheckRecordStock(); recordStock.rowNo = Convert.ToInt32(ds.Tables[0].Rows[i]["rowNo"]); recordStock.colNo = Convert.ToInt32(ds.Tables[0].Rows[i]["colNo"]); recordStock.quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); recordStock.manuNo = ds.Tables[0].Rows[i]["manuNo"] is DBNull ? "" : ds.Tables[0].Rows[i]["manuNo"].ToString(); recordStock.effDate = ds.Tables[0].Rows[i]["effDate"] is DBNull ? "" : ds.Tables[0].Rows[i]["effDate"].ToString(); recordStock.drugName = ds.Tables[0].Rows[i]["drugName"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugName"].ToString(); recordStock.drugSpec = ds.Tables[0].Rows[i]["drugSpec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugSpec"].ToString(); recordStock.packUnit = ds.Tables[0].Rows[i]["packUnit"] is DBNull ? "" : ds.Tables[0].Rows[i]["packUnit"].ToString(); recordStock.manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); recordStock.maxStock = ds.Tables[0].Rows[i]["maxStock"].ToString() == "" ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["maxStock"]); recordStock.drugId = ds.Tables[0].Rows[i]["drugId"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugId"].ToString(); recordStock.MachineId = ds.Tables[0].Rows[i]["MachineId"] is DBNull ? "" : ds.Tables[0].Rows[i]["MachineId"].ToString(); stockList.Add(recordStock); } } logger.Info("已完成-查询channel_stock关联drug_info表信息查询"); } catch (Exception ex) { logger.Info($"GetCheckRecordStocks异常——{ex.Message}"); } } return stockList; } /// /// 盘点记录加载数据 /// /// /// /// /// /// /// public List CheckRecordInfo(DateTime? startDate, DateTime? endDate, int pageNum, int pageSize, ref int totalcount) { List checkRecordList = new List(); pageNum = (pageNum - 1) * pageSize; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countSql = $@"SELECT count(1) FROM check_stock C LEFT JOIN user_list U ON C.operator=U.ID LEFT JOIN user_list R ON C.reviewer=R.ID WHERE 1=1 "; if (startDate != null) { countSql += $" AND C.optDate>'{startDate}' "; } if (endDate != null) { countSql += $" AND C.optDate<'{endDate}' "; } countSql += $" GROUP BY C.optdate ORDER BY C.OPTDATE DESC limit {pageNum},{pageSize} "; MySqlCommand cmd = new MySqlCommand(countSql, con); totalcount = Convert.ToInt32(cmd.ExecuteScalar()); string strSql = @"SELECT optDate AS optdate,U.User_name AS operatorUser,R.User_name AS reviewerUser,Drug_spec AS drugSpec,Manufactory AS manufactory,Quantity FROM check_stock C LEFT JOIN user_list U ON C.operator=U.ID LEFT JOIN user_list R ON C.reviewer=R.ID WHERE 1=1 "; if (startDate != null) { strSql += $" AND C.optDate>'{startDate}' "; } if (endDate != null) { strSql += $" AND C.optDate<'{endDate}' "; } strSql += $" GROUP BY C.optdate ORDER BY C.OPTDATE DESC limit {pageNum},{pageSize} "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CheckRecordStock stock = new CheckRecordStock(); stock.optdate = ds.Tables[0].Rows[i]["optdate"].ToString(); stock.operatorUser = ds.Tables[0].Rows[i]["operatorUser"] is DBNull ? "" : ds.Tables[0].Rows[i]["operatorUser"].ToString(); stock.reviewerUser = ds.Tables[0].Rows[i]["reviewerUser"] is DBNull ? "" : ds.Tables[0].Rows[i]["reviewerUser"].ToString(); stock.drugSpec = ds.Tables[0].Rows[i]["drugSpec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugSpec"].ToString(); stock.manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); stock.quantity = ds.Tables[0].Rows[i]["Quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["Quantity"]); checkRecordList.Add(stock); } } } catch (Exception ex) { logger.Info($"CheckRecordInfo异常——{ex.Message}"); } } return checkRecordList; } /// /// 盘点详情加载数据 /// /// /// public List CheckRecordDetailInfo(string optDate) { List cRecordStockList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT CKS.ID,CKS.ROW_NO,CKS.COL_NO,CKS.QUANTITY,CKS.MANU_NO,CKS.EFF_DATE,CKS.DRUG_NAME,CKS.DRUG_SPEC,CKS.PACK_UNIT,CKS.MANUFACTORY,CKS.MAX_STOCK,CKS.DRUG_ID,CKS.MACHINE_ID, CKS.MANUQUANTITY,CKS.OPTDATE,CKS.OPERATOR,CKS.REVIEWER, DI.PY_CODE,DI.DRUG_BARCODE,DI.DRUG_BRAND_NAME,DI.DRUG_SPEC,DI.MANUFACTORY FROM check_stock CKS INNER JOIN DRUG_INFO DI ON CKS.DRUG_ID=DI.DRUG_ID WHERE optdate='{optDate}' ORDER BY CKS.DRUG_ID"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { CheckRecordStock chkRStock = new CheckRecordStock(); chkRStock.ID = Convert.ToInt32(ds.Tables[0].Rows[i]["ID"]); chkRStock.rowNo = Convert.ToInt32(ds.Tables[0].Rows[i]["ROW_NO"]); chkRStock.colNo = Convert.ToInt32(ds.Tables[0].Rows[i]["COL_NO"]); chkRStock.quantity = ds.Tables[0].Rows[i]["QUANTITY"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["QUANTITY"]); chkRStock.manuNo = ds.Tables[0].Rows[i]["MANU_NO"] is DBNull ? "" : ds.Tables[0].Rows[i]["MANU_NO"].ToString(); chkRStock.effDate = ds.Tables[0].Rows[i]["EFF_DATE"] is DBNull ? "" : ds.Tables[0].Rows[i]["EFF_DATE"].ToString(); chkRStock.drugName = ds.Tables[0].Rows[i]["DRUG_NAME"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); chkRStock.drugSpec = ds.Tables[0].Rows[i]["DRUG_SPEC"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); chkRStock.packUnit = ds.Tables[0].Rows[i]["PACK_UNIT"] is DBNull ? "" : ds.Tables[0].Rows[i]["PACK_UNIT"].ToString(); chkRStock.manufactory = ds.Tables[0].Rows[i]["MANUFACTORY"] is DBNull ? "" : ds.Tables[0].Rows[i]["MANUFACTORY"].ToString(); chkRStock.maxStock = ds.Tables[0].Rows[i]["MAX_STOCK"].ToString() == "" ? -1 : Convert.ToInt32(ds.Tables[0].Rows[i]["MAX_STOCK"].ToString()); chkRStock.drugId = ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); chkRStock.MachineId = ds.Tables[0].Rows[i]["MACHINE_ID"].ToString(); chkRStock.ManuQuantity = ds.Tables[0].Rows[i]["MANUQUANTITY"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["MANUQUANTITY"]); chkRStock.optdate = ds.Tables[0].Rows[i]["OPTDATE"] is DBNull ? "" : ds.Tables[0].Rows[i]["OPTDATE"].ToString(); chkRStock.operatorUser = ds.Tables[0].Rows[i]["OPERATOR"] is DBNull ? "" : ds.Tables[0].Rows[i]["OPERATOR"].ToString(); chkRStock.reviewerUser = ds.Tables[0].Rows[i]["REVIEWER"] is DBNull ? "" : ds.Tables[0].Rows[i]["REVIEWER"].ToString(); DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["PY_CODE"].ToString(); di.DrugBarcode = ds.Tables[0].Rows[i]["DRUG_BARCODE"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_BARCODE"].ToString(); di.DrugBrandname = ds.Tables[0].Rows[i]["DRUG_BRAND_NAME"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_BRAND_NAME"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["DRUG_SPEC"] is DBNull ? "" : ds.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["MANUFACTORY"] is DBNull ? "" : ds.Tables[0].Rows[i]["MANUFACTORY"].ToString(); chkRStock.DrugInfo = di; cRecordStockList.Add(chkRStock); } } } catch (Exception ex) { logger.Info($"CheckRecordDetailInfo异常——{ex.Message}"); } } return cRecordStockList; } /// /// 药品列表 /// /// /// /// /// /// /// public List DrugListInfo(string searchCode, string searchValue, int pageNum, int pageSize, ref int totalcount) { List diList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countSql = $@"SELECT COUNT(1) FROM drug_info WHERE 1=1 "; switch (searchCode) { case "DrugId": countSql += $" AND (drug_id like concat('%{searchValue}%')) "; break; case "DrugName": countSql += $" AND (drug_name like concat('%{searchValue}%')) "; break; case "PyCode": countSql += $" AND (py_code like concat('%{searchValue}%')) "; break; case "DrugBarcode": countSql += $" AND (drug_barcode like concat('%{searchValue}%')) "; break; } MySqlCommand cmd = new MySqlCommand(countSql, con); totalcount = Convert.ToInt32(cmd.ExecuteScalar()); pageNum = (pageNum - 1) * pageSize; string strSql = $@"SELECT DRUG_ID,DRUG_NAME,DRUG_BRAND_NAME,DRUG_SPEC,DOSAGE,PY_CODE,DRUG_BARCODE, PACK_UNIT,max_stock FROM drug_info WHERE 1=1 "; switch (searchCode) { case "DrugId": strSql += $" AND (drug_id like concat('%{searchValue}%')) "; break; case "DrugName": strSql += $" AND (drug_name like concat('%{searchValue}%')) "; break; case "PyCode": strSql += $" AND (py_code like concat('%{searchValue}%')) "; break; case "DrugBarcode": strSql += $" AND (drug_barcode like concat('%{searchValue}%')) "; break; } strSql += $" LIMIT {pageNum},{pageSize}"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); if (dataSet != null && dataSet.Tables[0] != null && dataSet.Tables[0].Rows.Count > 0) { for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { DrugInfo di = new DrugInfo(); di.DrugId = dataSet.Tables[0].Rows[i]["DRUG_ID"].ToString(); di.DrugName = dataSet.Tables[0].Rows[i]["DRUG_NAME"].ToString(); di.DrugBrandname = dataSet.Tables[0].Rows[i]["DRUG_BRAND_NAME"] is DBNull ? "" : dataSet.Tables[0].Rows[i]["DRUG_BRAND_NAME"].ToString(); di.DrugSpec = dataSet.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); di.Dosage = dataSet.Tables[0].Rows[i]["DOSAGE"] is DBNull ? "" : dataSet.Tables[0].Rows[i]["DOSAGE"].ToString(); di.PyCode = dataSet.Tables[0].Rows[i]["PY_CODE"] is DBNull ? "" : dataSet.Tables[0].Rows[i]["PY_CODE"].ToString(); di.DrugBarcode = dataSet.Tables[0].Rows[i]["DRUG_BARCODE"] is DBNull ? "" : dataSet.Tables[0].Rows[i]["DRUG_BARCODE"].ToString(); di.PackUnit = dataSet.Tables[0].Rows[i]["PACK_UNIT"] is DBNull ? "" : dataSet.Tables[0].Rows[i]["PACK_UNIT"].ToString(); di.MaxStock = dataSet.Tables[0].Rows[i]["max_stock"] is DBNull ? 0 : Convert.ToInt32(dataSet.Tables[0].Rows[i]["max_stock"]); diList.Add(di); } } } catch (Exception ex) { logger.Info($"DrugListInfo异常——{ex.Message}"); } } return diList; } /// /// 修改药品信息 /// /// /// public bool DrugListEdit(DrugInfo drug) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE DRUG_INFO SET DRUG_NAME='{drug.DrugName}',MANUFACTORY='{drug.Manufactory}',PY_CODE='{drug.PyCode}',pack_unit='{drug.PackUnit}', max_stock='{drug.MaxStock}',drug_spec='{drug.DrugSpec}' where drug_id='{drug.DrugId}'"; MySqlCommand cmd = new MySqlCommand(strSql, con); int iResult = cmd.ExecuteNonQuery(); if (iResult > 0) { bFlag = true; } else { logger.Info($"DrugListEdit修改失败——{strSql}"); } } catch (Exception ex) { logger.Info($"DrugListEdit异常——{ex.Message}"); } } return bFlag; } /// /// 根据药品ID,批号,效期查询药品数据 /// /// /// /// /// public int GetDrugManuNoByDrugIdManuNo(string drugId, string manuNo, string effDate) { int iCount = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSQl = @"SELECT count(1) FROM drug_manu_no WHERE DRUG_ID='{drugId}' AND MANU_NO='{manuNo}' and eff_date='{effDate}'"; MySqlCommand cmd = new MySqlCommand(strSQl, con); iCount = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"GetDrugManuNoByDrugIdManuNo异常——{ex.Message}"); } } return iCount; } /// /// 药品列表 新增批次 /// /// /// public int DrugListInsert(DrugManuNo drugManuNo) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"INSERT INTO drug_manu_no(dmnguid,DRUG_ID,MANU_NO,MANU_DATE,EFF_DATE) VALUES('{drugManuNo.Id}','{drugManuNo.DrugId}','{drugManuNo.ManuNo}''{drugManuNo.ManuDate}''{drugManuNo.EffDate}')"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"DrugListInsert未执行数据{strSql}"); } } catch (Exception ex) { logger.Info($"DrugListInsert异常——{ex.Message}"); } } return iResult; } /// /// 药品列表中修改药品批次效期 /// /// /// public int DrugListUpdate(DrugManuNo SelectedManuno) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE drug_manu_no SET MANU_NO='{SelectedManuno.ManuNo}',EFF_DATE='{SelectedManuno.EffDate}' WHERE DRUG_ID='{SelectedManuno.Id}'"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"DrugListUpdate更新失败——{strSql}"); } } catch (Exception ex) { logger.Info($"DrugListUpdate异常——{ex.Message}"); } } return iResult; } /// /// 药品列表中根据药品id查询药品批次 /// /// /// public List DrugListQueryManuNo(string drugId) { List drugManuNoList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $"SELECT DMNGUID,DRUG_ID,MANU_NO,MANU_DATE,EFF_DATE FROM DRUG_MANU_NO WHERE DRUG_ID='{drugId}'"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugManuNo manuNo = new DrugManuNo(); manuNo.Id = ds.Tables[0].Rows[i]["DMNGUID"].ToString(); manuNo.DrugId = ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); manuNo.ManuNo = ds.Tables[0].Rows[i]["MANU_NO"].ToString(); manuNo.ManuDate = ds.Tables[0].Rows[i]["MANU_DATE"].ToString(); manuNo.EffDate = ds.Tables[0].Rows[i]["EFF_DATE"].ToString(); drugManuNoList.Add(manuNo); } } } catch (Exception ex) { logger.Info($"DrugListQueryManuNo异常——{ex.Message}"); } } return drugManuNoList; } /// /// 药品列表页面添加药品 /// /// /// public int DrugListInsertDrug(DrugInfo drug) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"INSERT INTO DRUG_INFO(DRUG_ID,DRUG_NAME,DRUG_BRAND_NAME,DRUG_SPEC,DOSAGE,PY_CODE,DRUG_BARCODE, PACK_UNIT,max_stock) VALUES('{drug.DrugId}','{drug.DrugName}','{drug.DrugBrandname}','{drug.DrugSpec}','{drug.Dosage}','{drug.PyCode}','{drug.DrugBarcode}','{drug.PackUnit}','{drug.MaxStock}')"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"DrugListInsertDrug新增失败{strSql}"); } } catch (Exception ex) { logger.Info($"DrugListInsertDrug异常——{ex.Message}"); } } return iResult; } /// /// 交接班页面数据加载 /// /// /// /// /// /// /// public List ChangeShiftsInfo(DateTime? startDate, DateTime? endDate, int pageNum, int pageSize, ref int totalCount) { List shiftsList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countStr = $@"SELECT count(1) from hkc_changeshifts c LEFT JOIN user_list u on c.fromoperator=u.user_id LEFT JOIN user_list u2 on c.fromrviewer=u2.user_id LEFT JOIN user_list u3 on c.tooperator=u3.user_id left join user_list u4 on c.toreviewer=u4.user_id where c.machine_id='{machine_id}' "; if (startDate != null) { countStr += $" and c.optdate>='{startDate}' "; } if (endDate != null) { countStr += $" and c.optdate<='{endDate}' "; } //countStr += " group by c.id"; MySqlCommand cmd = new MySqlCommand(countStr, con); totalCount = Convert.ToInt32(cmd.ExecuteScalar()); pageNum = (pageNum - 1) * pageSize; string sqlStr = $@"SELECT c.id,c.OptDate,u.User_Name as fromoperator,u2.User_Name as fromrviewer,u3.User_Name as tooperator,u4.User_Name as toreviewer, c.todate,c.State from hkc_changeshifts c LEFT JOIN user_list u on c.fromoperator=u.user_id LEFT JOIN user_list u2 on c.fromrviewer=u2.user_id LEFT JOIN user_list u3 on c.tooperator=u3.user_id left join user_list u4 on c.toreviewer=u4.user_id where c.machine_id='{machine_id}' "; if (startDate != null) { sqlStr += $" and c.optdate>='{startDate}' "; } if (endDate != null) { sqlStr += $" and c.optdate<='{endDate}' "; } sqlStr += $" group by c.id limit {pageNum},{pageSize}"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sqlStr, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { HkcChangeShifts shifts = new HkcChangeShifts(); shifts.Id = Convert.ToInt32(ds.Tables[0].Rows[i]["id"]); shifts.OptDate = ds.Tables[0].Rows[i]["OptDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[i]["OptDate"]); shifts.FromOperator = ds.Tables[0].Rows[i]["fromoperator"].ToString(); shifts.FromRviewer = ds.Tables[0].Rows[i]["fromrviewer"] is DBNull ? "" : ds.Tables[0].Rows[i]["fromrviewer"].ToString(); shifts.ToOperator = ds.Tables[0].Rows[i]["tooperator"] is DBNull ? "" : ds.Tables[0].Rows[i]["tooperator"].ToString(); shifts.ToReviewer = ds.Tables[0].Rows[i]["toreviewer"] is DBNull ? "" : ds.Tables[0].Rows[i]["toreviewer"].ToString(); shifts.ToDate = ds.Tables[0].Rows[i]["todate"] is null ? null : Convert.ToDateTime(ds.Tables[0].Rows[i]["todate"]); shifts.State = ds.Tables[0].Rows[i]["State"] is DBNull ? "" : ds.Tables[0].Rows[i]["State"].ToString(); shiftsList.Add(shifts); } } } catch (Exception ex) { logger.Info($"ChangeShiftsInfo异常——{ex.Message}"); } } return shiftsList; } /// /// 交接班弹窗-//查询发药人及审核人 /// /// public HkcChangeShifts ChangeShiftsDialogInfo() { HkcChangeShifts shifts = new HkcChangeShifts(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { //SqlSugarHelper.Db.Queryable().Single(change => change.State == "0"); string strSql = @"SELECT id,optDate,FromOperator,FromRviewer,ToOperator,ToReviewer,ToDate,State,optState,machine_id FROM hkc_changeshifts WHERE State=0"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0].Rows.Count > 0) { shifts.Id = Convert.ToInt32(ds.Tables[0].Rows[0]["id"]); shifts.OptDate = ds.Tables[0].Rows[0]["optDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[0]["optDate"]); shifts.FromOperator = ds.Tables[0].Rows[0]["FromOperator"].ToString(); shifts.FromRviewer = ds.Tables[0].Rows[0]["FromRviewer"] is DBNull ? "" : ds.Tables[0].Rows[0]["FromRviewer"].ToString(); shifts.ToOperator = ds.Tables[0].Rows[0]["ToOperator"] is DBNull ? "" : ds.Tables[0].Rows[0]["ToOperator"].ToString(); shifts.ToReviewer = ds.Tables[0].Rows[0]["ToReviewer"] is DBNull ? "" : ds.Tables[0].Rows[0]["ToReviewer"].ToString(); shifts.ToDate = ds.Tables[0].Rows[0]["ToDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[0]["ToDate"]); shifts.State = ds.Tables[0].Rows[0]["State"].ToString(); shifts.OptState = ds.Tables[0].Rows[0]["optState"].ToString(); shifts.Machineid = ds.Tables[0].Rows[0]["machine_id"].ToString(); } } catch (Exception ex) { logger.Info($"ChangeShiftsDialogInfo异常——{ex.Message}"); } } return shifts; } /// /// 交接班 根据当前登录操作人/审核人 查询信息 /// /// /// public UserList ChangeShiftsDialogUser(string userId) { UserList user = null; if (!string.IsNullOrEmpty(userId)) { using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { MySqlCommand cmd = new MySqlCommand(); string strSql = $"SELECT ID,USER_ID,USER_NAME FROM USER_LIST WHERE MACHINE_ID='{machine_id}' AND USER_ID='{userId}'"; try { MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { user = new UserList(); user.Id = Convert.ToInt32(ds.Tables[0].Rows[0]["ID"]); user.UserName = ds.Tables[0].Rows[0]["USER_ID"].ToString(); user.Nickname = ds.Tables[0].Rows[0]["USER_NAME"].ToString(); } } catch (Exception ex) { logger.Info($""); } } catch (Exception ex) { logger.Info($"ChangeShiftsDialogUser异常——{ex.Message}"); } } } return user; } /// /// 指纹验证登录,根据ID获取数据 /// /// /// public UserList GetUserInfo(int id) { UserList user = new UserList(); RoleDm role = new RoleDm(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT U.ID,U.USER_ID,U.USER_NAME,U.MACHINE_ROLE_ID,R.ID AS RID,R.ROLE_NAME,R.PERMISSIONS FROM USER_LIST U LEFT JOIN ROLE R ON U.MACHINE_ROLE_ID=R.ID AND U.MACHINE_ID=R.MACHINE_ID WHERE U.MACHINE_ID='{machine_id}' AND U.ID={id}"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { user.Id = id; user.UserName = ds.Tables[0].Rows[0]["USER_ID"].ToString(); user.Nickname = ds.Tables[0].Rows[0]["USER_NAME"].ToString(); user.RoleId = ds.Tables[0].Rows[0]["MACHINE_ROLE_ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["MACHINE_ROLE_ID"]); role.Id = ds.Tables[0].Rows[0]["RID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["RID"]); role.RoleName = ds.Tables[0].Rows[0]["ROLE_NAME"].ToString(); List premissionList = new List(); premissionList = JsonConvert.DeserializeObject>(ds.Tables[0].Rows[0]["PERMISSIONS"].ToString()); role.Permissions = premissionList; user.Role = role; } } catch (Exception ex) { logger.Info($"GetUserInfo异常——{ex.Message}"); } } return user; } /// /// 根据用户名获取用户信息 /// /// /// public UserList GetUserInfoByName(string userName) { UserList user = new UserList(); RoleDm role = new RoleDm(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT U.ID,U.USER_ID,U.USER_NAME,U.MACHINE_ROLE_ID,R.ID,R.ROLE_NAME,R.PERMISSIONS,PASS_WORD FROM USER_LIST U LEFT JOIN ROLE R ON U.MACHINE_ROLE_ID=R.ID AND U.MACHINE_ID=R.MACHINE_ID WHERE U.MACHINE_ID='{machine_id}' AND U.USER_ID='{userName}'"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { user.Id = ds.Tables[0].Rows[0]["ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["ID"]); user.UserName = ds.Tables[0].Rows[0]["USER_ID"].ToString(); user.Nickname = ds.Tables[0].Rows[0]["USER_NAME"].ToString(); user.RoleId = ds.Tables[0].Rows[0]["MACHINE_ROLE_ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["MACHINE_ROLE_ID"]); user.PassWord = ds.Tables[0].Rows[0]["PASS_WORD"].ToString(); role.Id = ds.Tables[0].Rows[0]["ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["ID"]); role.RoleName = ds.Tables[0].Rows[0]["ROLE_NAME"].ToString(); List premissionList = new List(); premissionList = JsonConvert.DeserializeObject>(ds.Tables[0].Rows[0]["PERMISSIONS"].ToString()); role.Permissions = premissionList; user.Role = role; } } catch (Exception ex) { logger.Info($"GetUserInfo异常——{ex.Message}"); } } return user; } /// /// 交接班保存数据 /// /// public bool ChangeShiftsSave(string optUser, string reviewerUser, string jieOperator, string jieReviewer) { bool bFlag = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { string strSql = $@"SELECT ID,optDate,FromOperator,FromRviewer,ToOperator,ToReviewer,ToDate,State,optDate,machine_id FROM hkc_changeshifts WHERE State=0 "; if (!string.IsNullOrEmpty(optUser)) { strSql += $" AND FromOperator='{optUser}' "; } if (!string.IsNullOrEmpty(reviewerUser)) { strSql += $" AND FromRviewer='{reviewerUser}'"; } strSql += " ORDER BY optState DESC"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = con; cmd.Transaction = transaction; List listHkcChangeShifts = new List(); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { HkcChangeShifts hkcChangeShifts = new HkcChangeShifts(); hkcChangeShifts.Id = ds.Tables[0].Rows[0]["ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[0]["ID"]); hkcChangeShifts.OptDate = ds.Tables[0].Rows[0]["optDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[0]["optDate"]); hkcChangeShifts.FromOperator = ds.Tables[0].Rows[0]["FromOperator"] is DBNull ? "" : ds.Tables[0].Rows[0]["FromOperator"].ToString(); hkcChangeShifts.FromRviewer = ds.Tables[0].Rows[0]["FromRviewer"] is DBNull ? "" : ds.Tables[0].Rows[0]["FromRviewer"].ToString(); hkcChangeShifts.ToOperator = ds.Tables[0].Rows[0]["ToOperator"] is DBNull ? "" : ds.Tables[0].Rows[0]["ToOperator"].ToString(); hkcChangeShifts.ToReviewer = ds.Tables[0].Rows[0]["ToReviewer"] is DBNull ? "" : ds.Tables[0].Rows[0]["ToReviewer"].ToString(); hkcChangeShifts.ToDate = ds.Tables[0].Rows[0]["ToDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[0]["ToDate"]); hkcChangeShifts.State = ds.Tables[0].Rows[0]["State"] is DBNull ? "" : ds.Tables[0].Rows[0]["State"].ToString(); hkcChangeShifts.OptDate = ds.Tables[0].Rows[0]["optDate"] is DBNull ? null : Convert.ToDateTime(ds.Tables[0].Rows[0]["optDate"]); listHkcChangeShifts.Add(hkcChangeShifts); } } if (listHkcChangeShifts != null && listHkcChangeShifts.Count > 0) { //存在则修改,不存在则插入一条 string updateSql = $@"UPDATE hkc_changeshifts SET ToOperator='{jieOperator}',ToReviewer='{jieReviewer}', State=1,ToDate='{DateTime.Now}' WHERE ID={listHkcChangeShifts[0].Id}"; cmd.CommandText = updateSql; cmd.Connection = con; int iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"ChangeShiftsSave无更新数据{updateSql}"); } } else { string insertSql = $@"INSERT INTO hkc_changeshifts(FromOperator,FromRviewer,ToOperator,ToReviewer,State,optState,optDate,machine_id) VALUES('{optUser}','{reviewerUser}','{jieOperator}','{jieReviewer}',1,0,'{DateTime.Now}','{machine_id}')"; cmd.CommandText = insertSql; int iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"ChangeShiftsSave无插入数据{insertSql}"); } } string iSql = $@"INSERT INTO hkc_changeshifts(FromOperator,FromRviewer,State,optState,optdate,toDate,machine_id) VALUES('{jieOperator}','{jieReviewer}',0,0,'{DateTime.Now}','{DateTime.Now}','{machine_id}')"; cmd.CommandText = iSql; int iRet = cmd.ExecuteNonQuery(); if (iRet <= 0) { logger.Info($"ChangeShiftsSave无插入数据{iSql}"); } //插入交接班报表数据信息 string querySql = $@"SELECT drug.drug_name,drug.DRUG_SPEC,c.manu_no,d.useNum,d.getNum,sum(quantity) as surplus, (SELECT d2.manunoquantity FROM dm_machine_record d2 WHERE d2.drug_id = c.drug_id and d2.manu_no=c.manu_no AND d2.operation_time < '{listHkcChangeShifts[0].OptDate}' ORDER BY d2.operation_time 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 >= '{listHkcChangeShifts[0].OptDate}' and d1.operation_time <='{DateTime.Now}' and d1.machine_id='{machine_id}' 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='{machine_id}' 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.manunoquantity FROM dm_machine_record d2 WHERE d2.drug_id = d.drug_id and d2.manu_no=d.manu_no AND d2.operation_time < '{listHkcChangeShifts[0].OptDate}' ORDER BY d2.operation_time 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 >= '{listHkcChangeShifts[0].OptDate}' and d1.operation_time <='{DateTime.Now}' and d1.machine_id='{machine_id}' 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='{machine_id}' GROUP BY d.Drug_ID ,d.manu_no "; MySqlDataAdapter dataAdapterQuery = new MySqlDataAdapter(querySql, con); DataSet dsQuery = new DataSet(); dataAdapterQuery.Fill(dsQuery); List shiftsReports = new List(); if (dsQuery != null && dsQuery.Tables[0] != null && dsQuery.Tables[0].Rows.Count > 0) { for (int i = 0; i < dsQuery.Tables[0].Rows.Count; i++) { ShiftsReport shiftsReport = new ShiftsReport(); shiftsReport.DrugName = dsQuery.Tables[0].Rows[i]["drug_name"].ToString(); shiftsReport.DrugSpec = dsQuery.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); shiftsReport.ManuNo = dsQuery.Tables[0].Rows[i]["manu_no"].ToString(); shiftsReport.UseNum = dsQuery.Tables[0].Rows[i]["useNum"] is DBNull ? null : Convert.ToInt32(dsQuery.Tables[0].Rows[i]["useNum"]); shiftsReport.GetNum = dsQuery.Tables[0].Rows[i]["getNum"] is DBNull ? null : Convert.ToInt32(dsQuery.Tables[0].Rows[i]["getNum"]); shiftsReport.Surplus = dsQuery.Tables[0].Rows[i]["surplus"] is DBNull ? null : Convert.ToInt32(dsQuery.Tables[0].Rows[i]["surplus"]); shiftsReport.BeforeNum = dsQuery.Tables[0].Rows[i]["beforeNum"] is DBNull ? null : Convert.ToInt32(dsQuery.Tables[0].Rows[i]["beforeNum"]); shiftsReports.Add(shiftsReport); } } if (shiftsReports != null && shiftsReports.Count > 0) { for (int i = 0; i < shiftsReports.Count; i++) { string isSql = @$"INSERT INTO hkc_shiftsreport(opt_Date,drug_name,drug_spec,beforeNum,getNum,useNum,manu_no,surplus,FromOperator,FromReviewer,ToOperator,ToReviewer,machineId) VALUES('{DateTime.Now}','{shiftsReports[i].DrugName}','{shiftsReports[i].DrugSpec}',{shiftsReports[i].BeforeNum ?? 0},{shiftsReports[i].GetNum ?? 0}, {shiftsReports[i].UseNum ?? 0},'{shiftsReports[i].ManuNo}',{shiftsReports[i].Surplus ?? 0},'{optUser}','{reviewerUser}','{jieOperator}','{jieReviewer}','{machine_id}')"; cmd.CommandText = isSql; int iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"ChangeShiftsSave插入失败——{isSql}"); } } } bFlag = true; transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); logger.Info($"ChangeShiftsSave异常——{ex.Message}"); } } return bFlag; } /// /// 账册页面获取数据 /// /// public List AccountListDrugInfos() { List drugList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT DRUG_ID,DRUG_NAME,DRUG_SPEC,DOSAGE,MANUFACTORY_ID,MANUFACTORY,PY_CODE,BIG_UNIT,SMALL_UNIT,CONVERT_RATIO,DRUG_TYPE,pack_unit FROM DRUG_INFO ORDER BY drug_id "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DrugInfo di = new DrugInfo(); di.DrugId = ds.Tables[0].Rows[i]["DRUG_ID"].ToString(); di.DrugName = ds.Tables[0].Rows[i]["DRUG_NAME"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["DRUG_SPEC"].ToString(); di.Dosage = ds.Tables[0].Rows[i]["DOSAGE"] is DBNull ? "" : ds.Tables[0].Rows[i]["DOSAGE"].ToString(); di.Manufactory = ds.Tables[0].Rows[i]["MANUFACTORY"] is DBNull ? "" : ds.Tables[0].Rows[i]["MANUFACTORY"].ToString(); di.PyCode = ds.Tables[0].Rows[i]["PY_CODE"] is DBNull ? "" : ds.Tables[0].Rows[i]["PY_CODE"].ToString(); di.PackUnit = ds.Tables[0].Rows[i]["pack_unit"] is DBNull ? "" : ds.Tables[0].Rows[i]["pack_unit"].ToString(); string manuNoSql = $@"SELECT dmnguid,drug_id,manu_no,eff_Date FROM drug_manu_no WHERE DRUG_ID='{ds.Tables[0].Rows[i]["DRUG_ID"].ToString()}'"; MySqlDataAdapter dataAdapterManu = new MySqlDataAdapter(manuNoSql, con); DataSet dsManu = new DataSet(); dataAdapterManu.Fill(dsManu); List manuNoList = new List(); if (dsManu != null && dsManu.Tables[0] != null && dsManu.Tables[0].Rows.Count > 0) { for (int j = 0; j < dsManu.Tables[0].Rows.Count; j++) { DrugManuNo manuNo = new DrugManuNo(); manuNo.Id = dsManu.Tables[0].Rows[j]["dmnguid"].ToString(); manuNo.DrugId = dsManu.Tables[0].Rows[j]["drug_id"].ToString(); manuNo.ManuNo = dsManu.Tables[0].Rows[j]["manu_no"].ToString(); manuNo.EffDate = dsManu.Tables[0].Rows[j]["eff_Date"].ToString(); manuNoList.Add(manuNo); } } di.DrugManuNos = manuNoList; drugList.Add(di); } } } catch (Exception ex) { logger.Info($"AccountListInfo异常——{ex.Message}"); } } return drugList; } /// /// 获取账册信息 /// /// /// /// /// /// public List ReportAccountBook(DateTime? startDate, DateTime? endDate, int type, string drug_id = "") { List accountList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); string SQL = $@"SELECT TYPE, stockQuantity,inQuantity,outQuantity,operationTime,invoiceId,drugName,drugId,drugSpec,packUnit,dosage,manufactory,manuNo,effDate, operatorName,reviewerName,supplierDept,receiveDept FROM (SELECT mr.type,mr.stock_quantity AS stockQuantity, IF(mr.type IN (1, 31), mr.quantity, IF(mr.type = 4 AND mr.quantity > 0, mr.quantity, IF(mr.type = 5,mr.return_quantity1,0))) AS inQuantity, IF(mr.type = 2, mr.quantity, IF(mr.type = 4 AND mr.quantity < 0, (0 - mr.quantity), IF(mr.type = 5,mr.return_quantity2,0))) AS outQuantity, DATE_FORMAT(mr.operation_time,'%m/%d') AS operationTime,IF(mr.type=1||mr.type=5,mr.invoice_id,NULL) AS invoiceId, di.drug_name AS drugName, di.drug_id AS drugId, di.drug_spec AS drugSpec, di.pack_unit AS packUnit, di.dosage AS dosage, di.manufactory AS manufactory, mr.manu_no AS manuNo, DATE_FORMAT(mr.eff_date,'%y/%m/%d') AS effDate, u1.user_name AS operatorName, u2.user_name AS reviewerName,mr.supplierDept,mr.receiveDept FROM dm_machine_record mr LEFT JOIN drug_info di ON mr.drug_id = di.drug_id LEFT JOIN user_list u1 ON mr.operator = u1.id LEFT JOIN user_list u2 ON mr.reviewer = u2.id WHERE mr.machine_id = '{machine_id}' AND mr.operation_time > '{p_startDate}' AND mr.operation_time < '{p_endDate}' and IF(mr.type = 4 AND mr.quantity = 0, 99999, mr.quantity) <>99999 "; if (!string.IsNullOrEmpty(drug_id)) { SQL += " AND mr.drug_id='" + drug_id + "' "; } SQL += " ORDER BY mr.drug_id, mr.operation_time, mr.id) AS T"; if (type > 0) { if (type == 1) { SQL += " WHERE inQuantity>0 "; } if (type == 2) { SQL += " WHERE outQuantity>0 "; } if (type == 5) { SQL += " WHERE type=5 "; } } MySqlDataAdapter dataAdapter = new MySqlDataAdapter(SQL, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { AccountModel accountModel = new AccountModel(); accountModel.StockQuantity = ds.Tables[0].Rows[i]["stockQuantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["stockQuantity"]); accountModel.InQuantity = ds.Tables[0].Rows[i]["inQuantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["inQuantity"]); accountModel.OutQuantity = ds.Tables[0].Rows[i]["outQuantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["outQuantity"]); accountModel.OperationTime = ds.Tables[0].Rows[i]["operationTime"] is DBNull ? "" : ds.Tables[0].Rows[i]["operationTime"].ToString(); accountModel.InvoiceId = ds.Tables[0].Rows[i]["invoiceId"] is DBNull ? "" : ds.Tables[0].Rows[i]["invoiceId"].ToString(); accountModel.DrugName = ds.Tables[0].Rows[i]["drugName"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugName"].ToString(); accountModel.DrugId = ds.Tables[0].Rows[i]["drugId"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugId"].ToString(); accountModel.DrugSpec = ds.Tables[0].Rows[i]["drugSpec"] is DBNull ? "" : ds.Tables[0].Rows[i]["drugSpec"].ToString(); accountModel.PackUnit = ds.Tables[0].Rows[i]["packUnit"] is DBNull ? "" : ds.Tables[0].Rows[i]["packUnit"].ToString(); accountModel.Dosage = ds.Tables[0].Rows[i]["dosage"] is DBNull ? "" : ds.Tables[0].Rows[i]["dosage"].ToString(); accountModel.Manufactory = ds.Tables[0].Rows[i]["manufactory"] is DBNull ? "" : ds.Tables[0].Rows[i]["manufactory"].ToString(); accountModel.ManuNo = ds.Tables[0].Rows[i]["manuNo"] is DBNull ? "" : ds.Tables[0].Rows[i]["manuNo"].ToString(); accountModel.EffDate = ds.Tables[0].Rows[i]["effDate"] is DBNull ? "" : ds.Tables[0].Rows[i]["effDate"].ToString(); accountModel.OperatorName = ds.Tables[0].Rows[i]["operatorName"] is DBNull ? "" : ds.Tables[0].Rows[i]["operatorName"].ToString(); accountModel.ReviewerName = ds.Tables[0].Rows[i]["reviewerName"] is DBNull ? "" : ds.Tables[0].Rows[i]["reviewerName"].ToString(); accountModel.SupplierDept = ds.Tables[0].Rows[i]["supplierDept"] is DBNull ? "" : ds.Tables[0].Rows[i]["supplierDept"].ToString(); accountModel.ReceiveDept = ds.Tables[0].Rows[i]["receiveDept"] is DBNull ? "" : ds.Tables[0].Rows[i]["receiveDept"].ToString(); accountList.Add(accountModel); } } } catch (Exception ex) { logger.Info($"ReportAccountBook异常——{ex.Message}"); } } return accountList; } /// /// 账册-生成账册中查询需要生成账册的内容 /// /// public List GetAll() { List countList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string SQL = $@"SELECT CS.drug_id as DrugId,CS.manu_no as ManuNo,sum(quantity) as Quantity,CS.eff_date as EffDate,DI.drug_name as DrugName, DI.drug_spec as DrugSpec,DI.dosage as Dosage,DI.manufactory as ManuFactory,DI.small_unit as SmallUnit,DI.pack_unit as PackUnit, CS.machine_id as MachineId FROM channel_stock CS INNER JOIN drug_info DI ON CS.drug_id=DI.drug_id where CS.machine_id='{machine_id}' AND quantity>0 GROUP BY CS.drug_id";//,CS.manu_no "; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(SQL, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { ChannelStockCount count = new ChannelStockCount(); count.DrugId = ds.Tables[0].Rows[i]["DrugId"].ToString(); count.ManuNo = ds.Tables[0].Rows[i]["ManuNo"].ToString(); count.Quantity = ds.Tables[0].Rows[i]["Quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["Quantity"]); count.EffDate = ds.Tables[0].Rows[i]["EffDate"] is DBNull ? "" : ds.Tables[0].Rows[i]["EffDate"].ToString(); count.DrugName = ds.Tables[0].Rows[i]["DrugName"] is DBNull ? "" : ds.Tables[0].Rows[i]["DrugName"].ToString(); count.DrugSpec = ds.Tables[0].Rows[i]["DrugSpec"] is DBNull ? "" : ds.Tables[0].Rows[i]["DrugSpec"].ToString(); count.Dosage = ds.Tables[0].Rows[i]["Dosage"] is DBNull ? "" : ds.Tables[0].Rows[i]["Dosage"].ToString(); count.ManuFactory = ds.Tables[0].Rows[i]["ManuFactory"].ToString(); count.SmallUnit = ds.Tables[0].Rows[i]["SmallUnit"] is DBNull ? "" : ds.Tables[0].Rows[i]["SmallUnit"].ToString(); count.PackUnit = ds.Tables[0].Rows[i]["PackUnit"] is DBNull ? "" : ds.Tables[0].Rows[i]["PackUnit"].ToString(); count.MachineId = ds.Tables[0].Rows[i]["MachineId"].ToString(); countList.Add(count); } } } catch (Exception ex) { logger.Info($"GetAll异常{ex.Message}"); } } return countList; } //账册页面 删除已生成的日结存记录 public int DeleteAccount() { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string delSql = $@"DELETE FROM dm_machine_record WHERE type=5 and DATE_FORMAT(operation_time,'%Y-%m-%d')='{DateTime.Now.ToString("yyyy-MM-dd")}' and machine_id='{machine_id}'"; MySqlCommand cmd = new MySqlCommand(delSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"DeleteAccount未执行任何数据删除{delSql}"); } } catch (Exception ex) { logger.Info($"DeleteAccount异常——{ex.Message}"); } } return iResult; } /// /// 账册页面 获取药品总库存 /// /// /// public int GetChannelStocksTotalQuantity(string DrugId) { int channelStockQuantity = 0;// SqlSugarHelper.Db.Queryable().Where(cs => cs.DrugId.Equals(channelStockList[i].DrugId)).Sum(it => it.Quantity); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT SUM(QUANTITY) FROM CHANNEL_STOCK WHERE DRUG_ID='{DrugId}'"; MySqlCommand cmd = new MySqlCommand(strSql, con); channelStockQuantity = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"GetChannelStocksTotalQuantity异常{ex.Message}"); } } return channelStockQuantity; } /// /// 账册页面保存记录 /// /// public int AccountSavaRecord(string drugId, int inQuantity, int outQuantity, int totalQuantity) { int iRestult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { int? Operator = HomeWindowViewModel.Operator?.Id; int? Reviewer = HomeWindowViewModel.Reviewer?.Id; DateTime OperationTime = DateTime.Now; string strSql = $@"INSERT INTO dm_machine_record(machine_id,drawer_no,col_no,drug_id,operator,reviewer,operation_time,quantity,type,invoice_id,return_quantity1,return_quantity2,stock_quantity,manunoQuantity,supplierDept,receiveDept) VALUES('{machine_id}',{0},{0},'{drugId}',{Operator},{Reviewer},'{OperationTime}',{0},{5},'日结存',{inQuantity},{outQuantity},{totalQuantity},{0},'{string.Empty}','{string.Empty}')"; MySqlCommand cmd = new MySqlCommand(strSql, con); iRestult = cmd.ExecuteNonQuery(); if (iRestult <= 0) { logger.Info($"AccountSavaRecord没有插入数据{strSql}"); } } catch (Exception ex) { logger.Info($"AccountSavaRecord——异常{ex.Message}"); } } return iRestult; } #endregion #region 系统设置 public List UserManagerInfo(string searchValue, int pageNum, int pageSize, ref int totalCount) { List userListList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countSql = @"SELECT COUNT(1) FROM user_list WHERE MACHINE_ID='{machine_id}' "; if (!string.IsNullOrEmpty(searchValue)) { countSql += $" AND USER_NAME='{searchValue}'"; } MySqlCommand cmd = new MySqlCommand(countSql, con); totalCount = Convert.ToInt32(cmd.ExecuteScalar()); pageNum = (pageNum - 1) * pageSize; string strSql = $@"SELECT ID,USER_ID,USER_NAME,MACHINE_ID,MACHINE_ROLE_ID FROM user_list WHERE MACHINE_ID='{machine_id}' "; if (!string.IsNullOrEmpty(searchValue)) { strSql += $" AND USER_NAME='{searchValue}' LIMIT {pageNum},{pageSize}"; } MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { UserList user = new UserList(); user.Id = ds.Tables[0].Rows[i]["ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["ID"]); user.UserName = ds.Tables[0].Rows[i]["USER_ID"].ToString(); user.Nickname = ds.Tables[0].Rows[i]["USER_NAME"].ToString(); user.MachineId = ds.Tables[0].Rows[i]["MACHINE_ID"].ToString(); user.RoleId = ds.Tables[0].Rows[i]["MACHINE_ROLE_ID"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["MACHINE_ROLE_ID"]); userListList.Add(user); } } } catch (Exception ex) { logger.Info($"UserManagerInfo异常——{ex.Message}"); } } return userListList; } /// /// 修改用户页面获取角色 /// /// public List EditUserRoleInfo(string SearchValue = null) { List roleDmList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT ID,ROLE_NAME,PERMISSIONS,MACHINE_ID FROM ROLE WHERE MACHINE_ID='{machine_id}'"; if (!string.IsNullOrEmpty(SearchValue)) { strSql += $" AND ROLE_NAME LIKE '%{SearchValue}%'"; } MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { RoleDm roleDm = new RoleDm(); roleDm.Id = ds.Tables[0].Rows[i]["ID"] is DBNull ? null : Convert.ToInt32(ds.Tables[0].Rows[i]["ID"]); roleDm.RoleName = ds.Tables[0].Rows[i]["ROLE_NAME"].ToString(); roleDm.Permissions = JsonConvert.DeserializeObject>(ds.Tables[0].Rows[i]["PERMISSIONS"].ToString()); roleDm.MachineId = ds.Tables[0].Rows[i]["MACHINE_ID"].ToString(); roleDmList.Add(roleDm); } } } catch (Exception ex) { logger.Info($"EditUserRoleInfo异常——{ex.Message}"); } } return roleDmList; } /// /// 修改用户 /// /// public int EditUserSaveOnlyPassWord(int id, string passWord) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE USER_LIST SET PASS_WORD='{passWord}' WHERE ID={id}"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"EditUserSaveOnlyPassWord无修改{strSql}"); } } catch (Exception ex) { logger.Info($"EditUserSaveOnlyPassWord异常——{ex.Message}"); } } return iResult; } public int EditUserSaveNoPassWord(UserList user) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE USER_LIST SET USER_ID='{user.UserName}',USER_NAME='{user.Nickname}', user_barcode='{user.UserBarcode}',MACHINE_ROLE_ID='{user.RoleId}' WHERE ID={user.Id}"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"EditUserSaveNoPassWord无修改{strSql}"); } } catch (Exception ex) { logger.Info($"EditUserSaveNoPassWord异常——{ex.Message}"); } } return iResult; } public int EditUserSaveAll(UserList user) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE USER_LIST SET USER_ID='{user.UserName}',USER_NAME='{user.Nickname}', user_barcode='{user.UserBarcode}',MACHINE_ROLE_ID='{user.RoleId}',PASS_WORD='{user.PassWord}' WHERE ID='{user.Id}'"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"EditUserSaveNoPassWord无修改{strSql}"); } } catch (Exception ex) { logger.Info($"EditUserSaveNoPassWord异常——{ex.Message}"); } } return iResult; } // 用户管理 新增加用户 public int EditUserSaveInsertUser(UserList user) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"INSERT INTO USER_LIST(USER_ID,USER_NAME,PASS_WORD,USER_BARCODE,MACHINE_ROLE_ID,MACHINE_ID) VALUES('{user.UserName}','{user.Nickname}','{user.PassWord}','{user.UserBarcode}','{user.RoleId}','{user.MachineId}')"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"EditUserSaveInsertUser无修改{strSql}"); } } catch (Exception ex) { logger.Info($"EditUserSaveInsertUser异常——{ex.Message}"); } } return iResult; } //角色管理--根据角色名称查询记录数 public int RoleManagerGeRole(string roleName) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"SELECT ID,ROLE_NAME FROM ROLE WHERE ROLE_NAME LIKE '{roleName}'"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception ex) { logger.Info($"RoleManagerGeRole异常——{ex.Message}"); } } return iResult; } /// /// 角色管理——新增角色 /// /// /// public int RoleManagerInsert(RoleDm role) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string permissions = JsonConvert.SerializeObject(role.Permissions); string strSql = $@"INSERT INTO ROLE(ROLE_NAME,CREATETIME,PERMISSIONS,MACHINE_ID) VALUES('{role.RoleName}','{DateTime.Now}','{permissions}','{role.MachineId}')"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"RoleManagerInsert未新数据{strSql}"); } } catch (Exception ex) { logger.Info($"RoleManagerInsert异常——{ex.Message}"); } } return iResult; } /// /// 角色管理——修改角色 /// /// /// public int RoleManagerUpdateRole(int? roleId, string permissions) { int iResult = 0; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string strSql = $@"UPDATE ROLE SET PERMISSIONS='{permissions}' WHERE ID={roleId}"; MySqlCommand cmd = new MySqlCommand(strSql, con); iResult = cmd.ExecuteNonQuery(); if (iResult <= 0) { logger.Info($"RoleManagerUpdateRole未修改数据{strSql}"); } } catch (Exception ex) { logger.Info($"RoleManagerUpdateRole异常——{ex.Message}"); } } return iResult; } #endregion #region 设备记录页面 public List MachineRecordInfo(int type, DateTime? startDate, DateTime? endDate, string drugId, int pageNum, int pageSize, ref int totalCount) { List machineRecordList = new List(); using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); try { string countSql = $"SELECT COUNT(1) FROM DM_MACHINE_RECORD mr INNER JOIN DRUG_INFO di ON mr.drug_id=di.drug_id LEFT JOIN USER_LIST U ON mr.Operator=U.id WHERE mr.MACHINE_ID='{machine_id}'"; if (type == 3) { countSql += $" AND mr.Type in(31,32)"; } else { countSql += $" AND mr.type={type}"; } if (startDate != null) { countSql += $" and operation_time>'{startDate}'"; } if (endDate != null) { countSql += $" and operation_time<'{endDate}'"; } if (!string.IsNullOrEmpty(drugId)) { countSql += $" and drug_id='{drugId}'"; } MySqlCommand cmd = new MySqlCommand(countSql, con); totalCount = Convert.ToInt32(cmd.ExecuteScalar()); pageNum = (pageNum - 1) * pageSize; string strSql = $@"SELECT mr.id,mr.machine_id,mr.drug_id,mr.quantity,mr.manu_no,mr.operator,mr.reviewer,mr.operation_time,mr.eff_Date,mr.type,mr.invoice_id,mr.col_no,mr.drawer_no,mr.status, mr.return_quantity1,mr.return_quantity2,mr.get_id,mr.is_destroy,mr.stock_quantity,mr.Check_Quantity,mr.manunoQuantity,mr.supplierDept,mr.receiveDept,di.drug_name,di.drug_spec,U.USER_NAME FROM dm_machine_record mr INNER JOIN DRUG_INFO di ON mr.drug_id=di.drug_id LEFT JOIN USER_LIST U ON mr.Operator=U.id WHERE mr.MACHINE_ID='{machine_id}'"; if (type == 3) { strSql += $" AND mr.Type in(31,32)"; } else { strSql += $" AND mr.type={type}"; } if (startDate != null) { strSql += $" and operation_time>'{startDate}'"; } if (endDate != null) { strSql += $" and operation_time<'{endDate}'"; } if (!string.IsNullOrEmpty(drugId)) { strSql += $" and drug_id='{drugId}'"; } strSql += $" limit {pageNum},{pageSize}"; MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strSql, con); DataSet ds = new DataSet(); dataAdapter.Fill(ds); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { MachineRecord record = new MachineRecord(); record.Id = ds.Tables[0].Rows[i]["id"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["id"]); record.MachineId = ds.Tables[0].Rows[i]["machine_id"].ToString(); record.DrugId = ds.Tables[0].Rows[i]["drug_id"].ToString(); record.Quantity = ds.Tables[0].Rows[i]["quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["quantity"]); record.StockQuantity = ds.Tables[0].Rows[i]["stock_quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["stock_quantity"]); record.CheckQuantity = ds.Tables[0].Rows[i]["check_quantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["check_quantity"]); record.ManuNo = ds.Tables[0].Rows[i]["manu_no"].ToString(); record.Operator = ds.Tables[0].Rows[i]["operator"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["operator"]); record.Reviewer = ds.Tables[0].Rows[i]["reviewer"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["reviewer"]); record.OperationTime = ds.Tables[0].Rows[i]["operation_time"] is DBNull ? DateTime.Now : Convert.ToDateTime(ds.Tables[0].Rows[i]["operation_time"]); record.EffDate = ds.Tables[0].Rows[i]["eff_date"] is DBNull ? DateTime.Now : Convert.ToDateTime(ds.Tables[0].Rows[i]["eff_date"]); record.Type = ds.Tables[0].Rows[i]["type"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["type"]); record.InvoiceId = ds.Tables[0].Rows[i]["invoice_id"].ToString(); record.ColNo = ds.Tables[0].Rows[i]["col_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["col_no"]); record.DrawerNo = ds.Tables[0].Rows[i]["drawer_no"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["drawer_no"]); //record.DepartmentId = ds.Tables[0].Rows[i]["department_id"] is DBNull ? "" : ds.Tables[0].Rows[i]["department_id"].ToString(); record.Status = ds.Tables[0].Rows[i]["status"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["status"]); record.ReturnQuantity1 = ds.Tables[0].Rows[i]["return_quantity1"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["return_quantity1"]); record.ReturnQuantity2 = ds.Tables[0].Rows[i]["return_quantity2"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["return_quantity2"]); record.GetId = ds.Tables[0].Rows[i]["get_id"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["get_id"]); record.IsDestroy = ds.Tables[0].Rows[i]["is_destroy"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["is_destroy"]); record.ManunoQuantity = ds.Tables[0].Rows[i]["manunoQuantity"] is DBNull ? 0 : Convert.ToInt32(ds.Tables[0].Rows[i]["manunoQuantity"]); record.SupplierDept = ds.Tables[0].Rows[i]["supplierDept"].ToString(); record.ReceiveDept = ds.Tables[0].Rows[i]["receiveDept"].ToString(); DrugInfo di = new DrugInfo(); di.DrugName = ds.Tables[0].Rows[i]["drug_name"].ToString(); di.DrugSpec = ds.Tables[0].Rows[i]["drug_spec"].ToString(); record.DrugInfo = di; UserList user = new UserList(); user.Nickname = ds.Tables[0].Rows[i]["USER_NAME"].ToString(); record.User = user; machineRecordList.Add(record); } } } catch (Exception ex) { logger.Info($"MachineRecordInfo异常{ex.Message}"); } } return machineRecordList; } /// /// 记录页面——更新凭证号 /// /// /// /// public bool MachineRecordSave(List records) { bool bFalg = false; using (MySqlConnection con = new MySqlConnection(connStr)) { con.Open(); MySqlTransaction transaction = con.BeginTransaction(); try { for (int i = 0; i < records.Count; i++) { string updateSql = $@"UPDATE DM_MACHINE_RECORD SET invoice_id='{records[i].InvoiceId}' WHERE ID={records[i].Id}"; MySqlCommand cmd = new MySqlCommand(updateSql, con); int iResult = cmd.ExecuteNonQuery(); cmd.Transaction = transaction; if (iResult <= 0) { logger.Info($"MachineRecordInfo未更新数据{updateSql}"); } else { bFalg = true; } } } catch (Exception ex) { logger.Info($"MachineRecordSave异常——{ex.Message}"); } } return bFalg; } #endregion } }