HuNan_NOSqlSugar/DM_Weight/Services/SqlHelperService.cs

4970 lines
284 KiB
C#
Raw Normal View History

2024-07-06 10:01:30 +08:00
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<List<PremissionDm>>(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<List<PremissionDm>>(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;
}
/// <summary>
/// 处方取药
/// </summary>
/// <param name="OrderDate"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public List<OrderInfo> GetOrderInfos(string Code, string SearchValue, string OrderDate, int pageNum, int pageSize, ref int totalCount)
{
List<OrderInfo> orderInfos = new List<OrderInfo>();
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;
}
}
/// <summary>
/// 根据处方号获取处方详情
/// </summary>
/// <param name="orderNo"></param>
/// <returns></returns>
public List<OrderDetail> GetOrderDetails(string orderNo, int orderId)
{
List<OrderDetail> orderDetails = new List<OrderDetail>();
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;
}
/// <summary>
/// 获取药品对应库存信息
/// </summary>
/// <returns></returns>
public List<ChannelStock> GetChannelStocks(string drugId)
{
List<ChannelStock> channelStocks = new List<ChannelStock>();
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;
}
/// <summary>
/// 完成处方取药
/// </summary>
/// <returns></returns>
public bool SaveOrderTakeInfo(string orderNo, string orderDeptName, List<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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;
}
/// <summary>
/// 根据抽屉号、库位号查询库存信息
/// </summary>
/// <param name="rowNo"></param>
/// <param name="colNo"></param>
/// <returns></returns>
public List<ChannelStock> GetChannelStockList(int rowNo, int colNo)
{
List<ChannelStock> channel = new List<ChannelStock>();
//SqlSugarHelper.Db.Queryable<ChannelStock>()
// .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
/// <summary>
/// 通过抽屉号获取库存信息
/// </summary>
/// <returns></returns>
public List<ChannelStock> GetChannelStockByDrawer(int row_no)
{
List<ChannelStock> channelStocks = new List<ChannelStock>();
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;
}
}
/// <summary>
/// 抽屉取药保存数据
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
public bool SaveDrawerTakeDrug(List<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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
/// <summary>
/// 自选取药页面加载数据
/// </summary>
/// <returns></returns>
public List<DrugInfo> GetSelfTakeInfo(string Code, string SearchValue, int pageNum, int pageSize, ref int totalCount)
{
List<DrugInfo> drugs = new List<DrugInfo>();
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<ChannelStock> stocks = new List<ChannelStock>();
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;
}
/// <summary>
/// 自选取药保存数据
/// </summary>
/// <returns></returns>
public bool SaveSelfTakeInfo(List<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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
/// <summary>
/// 自选加药页面加载数据
/// </summary>
/// <param name="Code"></param>
/// <param name="SearchValue"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="totalCount"></param>
/// <returns></returns>
public List<DrugInfo> GetSelfAddInfo(string Code, string SearchValue, int pageNum, int pageSize, ref int totalCount)
{
List<DrugInfo> drugs = new List<DrugInfo>();
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<ChannelStock> stocks = new List<ChannelStock>();
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;
}
/// <summary>
/// 保存自选加药数据
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
public bool SaveSelfAddInfo(List<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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;
}
/// <summary>
/// 抽屉加药页面获取数据
/// </summary>
/// <param name="row_no"></param>
/// <returns></returns>
public List<ChannelStock> GetDrawerAddInfo(int row_no)
{
List<ChannelStock> channelStocks = new List<ChannelStock>();
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<DrugManuNo> drugManuNos = new List<DrugManuNo>();
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;
}
}
/// <summary>
/// 保存抽屉加药数据
/// </summary>
/// <returns></returns>
public bool SaveDrawerAdd(List<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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;
}
/// <summary>
/// 调拨入库获取数据
/// </summary>
/// <returns></returns>
public List<Invoice> GetInvoiceInfo(string OrderDate, string SearchValue, int PageNum, int PageSize, ref int totalCount)
{
List<Invoice> invoices = new List<Invoice>();
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 drug_id,in_pharmacy_id,out_pharmacy_id, invoice_no as InvoiceNo, DATE_FORMAT(Invoice_Date,'%Y-%m-%d') as InvoiceDate, SUM(quantity) as quantity
FROM in_out_invoice 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 drug_id,in_pharmacy_id,out_pharmacy_id, invoice_no as InvoiceNo, DATE_FORMAT(Invoice_Date,'%Y-%m-%d') as InvoiceDate, SUM(quantity) as quantity ");
sb.Append(" FROM in_out_invoice 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;
}
/// <summary>
/// 调拨单——先查询有几种药
/// </summary>
/// <returns></returns>
public List<InOutInvoice> GetInvoiceByInvoiceNo(string INVOICE_NO)
{
List<InOutInvoice> invoices = new List<InOutInvoice>();
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;
}
/// <summary>
/// 调拨入库获取药品绑定信息
/// </summary>
/// <returns></returns>
public List<ChannelList> GetChannelList(string drugId)
{
List<ChannelList> channelLists = new List<ChannelList>();
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<DrugManuNo> drugManuNos = new List<DrugManuNo>();
//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;
}
/// <summary>
/// 调拨入库 查询每种药有多少个批次
/// </summary>
/// <returns></returns>
public List<InOutInvoice> GetInvoiceManu(string invoiceNo, string drugId)
{
List<InOutInvoice> inOutInvoices = new List<InOutInvoice>();
using (MySqlConnection con = new MySqlConnection(connStr))
{
con.Open();
try
{
string sql = $@"SELECT id,in_pharmacy_id,out_pharmacy_id,storage,invoice_no,invoice_date,drug_id,drug_spec,
quantity,drug_manu_no,supplier,operator,drug_eff_date FROM in_out_invoice WHERE ((((( invoice_no = '{invoiceNo}' )
AND ( drug_id = '{drugId}' )) AND ( status = 0 )) AND ( type <> 2 )) AND ( 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;
}
/// <summary>
///调拨入库 查询是否有库存
/// </summary>
/// <param name="drugId"></param>
/// <param name="manuNo"></param>
/// <returns></returns>
public List<ChannelStock> GetInvoiceStock(string drugId, string manuNo)
{
List<ChannelStock> channelStocks = new List<ChannelStock>();
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;
}
/// <summary>
///根据药品id及批次获取效期
/// </summary>
/// <param name="drugId"></param>
/// <param name="manaNo"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 保存——调拨入库
/// </summary>
/// <returns></returns>
public bool SaveInvoiceIn(List<ChannelStock> record, Invoice? SelectedInvoice)
{
bool bResult = false;
using (MySqlConnection con = new MySqlConnection(connStr))
{
con.Open();
MySqlTransaction transaction = con.BeginTransaction();
try
{
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
{
//如果批号重复则不让添加
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
{
// 更新数据 库存信息
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}");
}
}
}
// 获取更新完库存后的药品库存
List<ChannelStock> nowChannels = new List<ChannelStock>();
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}");
}
//根据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}");
}
}
bResult = true;
transaction.Commit();
}
catch (Exception ex)
{
logger.Info($"SaveInvoiceIn异常——{ex.Message}");
transaction.Rollback();
bResult = false;
}
}
return bResult;
}
/// <summary>
/// 根据抽屉号、库位号查询库存信息
/// </summary>
/// <param name="rowNo"></param>
/// <param name="colNo"></param>
/// <returns></returns>
public List<ChannelStock> GetChannelStockListForInvoice(int rowNo, int colNo)
{
List<ChannelStock> channel = new List<ChannelStock>();
//SqlSugarHelper.Db.Queryable<ChannelStock>()
// .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<ChannelList> GetAddDrugInfo(int rowNo)
{
List<ChannelList>? ChannelLsts = new List<ChannelList>();
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<DrugManuNo> drugManuNos = new List<DrugManuNo>();
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<ChannelStock> channelStocks = new List<ChannelStock>();
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<DrugManuNo> listDrugmanuno = new List<DrugManuNo>();
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<ChannelStock>();
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<DrugManuNo> listDrugmanuno = new List<DrugManuNo>();
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<ChannelStock> AddDrugSave(List<ChannelStock> record, string PZH, ref bool flag)
{
List<ChannelStock> stockRepeats = new List<ChannelStock>();
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<ChannelStock> nowChannels = new List<ChannelStock>();
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
/// <summary>
/// 归还药品——根据处方还药
/// </summary>
/// <returns></returns>
public List<OrderInfo> ReturnDrugInfo(string searchCode, string searchValue, string orderDate, int PageNum, int PageSize, ref int totalCount)
{
List<OrderInfo> orderList = new List<OrderInfo>();
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<OrderDetail> GetReturnDrugDetail(string orderNo)
{
List<OrderDetail> orderDetailsList = new List<OrderDetail>();
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;
}
/// <summary>
/// 获取还药库位信息——根据处方还药
/// </summary>
/// <param name="drugId"></param>
/// <returns></returns>
public List<ChannelStock> GetChannelStocksForReturn(string drugId, string setEffDate, string setManuNo)
{
List<ChannelStock> channelStockList = new List<ChannelStock>();
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<ChannelStock> 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<ChannelStock> nowChannels = new List<ChannelStock>();
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;
}
/// <summary>
/// 根据抽屉号、库位号查询库存数据(用于更新近 效期、批次)
/// </summary>
/// <param name="rowNo"></param>
/// <param name="colNo"></param>
/// <returns></returns>
public List<ChannelStock> GetStockManuEffDate(int rowNo, int colNo)
{
List<ChannelStock> stockList = new List<ChannelStock>();
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;
}
/// <summary>
/// 归还药品加载数据——根据药品还药
/// </summary>
/// <returns></returns>
public List<MachineRecord> ReturnDrugByDrug(string searchCode, string searchValue, int PageNum, int PageSize, ref int totalCount)
{
List<MachineRecord> machineRecordList = new List<MachineRecord>();
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<ChannelStock> ReturnDrugByDrugDialog(string drugId, string manuNo)
{
List<ChannelStock> channelStockList = new List<ChannelStock>();
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;
}
/// <summary>
/// 保存归还药品——根据药品还药
/// </summary>
/// <param name="drugId"></param>
/// <param name="setEffDate"></param>
/// <param name="setManuNo"></param>
/// <returns></returns>
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<ChannelStock> nowChannels = new List<ChannelStock>();
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<ChannelStock> ReturnEmptyInfo()
{
List<ChannelStock> stockList = new List<ChannelStock>();
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;
}
/// <summary>
/// 还空瓶弹窗加载数据
/// </summary>
/// <param name="drugId"></param>
/// <returns></returns>
public List<MachineRecord> ReturnEmptyDetails(string drugId)
{
List<MachineRecord> recordList = new List<MachineRecord>();
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<MachineRecord> records, string drug_id, ChannelStock channelStock, int ReturnQuantity)
{
bool bFlag = false;
List<ChannelStock> nowChannels = new List<ChannelStock>();
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<DrugInfo> BinddingDetailInfo()
{
List<DrugInfo> drugInfoList = new List<DrugInfo>();
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;
}
/// <summary>
/// 根据查询绑定标签
/// </summary>
/// <returns></returns>
public List<DrugInfo> BinddingDetailInfoBySearch(string searchValue = null)
{
List<DrugInfo> drugInfoList = new List<DrugInfo>();
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;
}
/// <summary>
///
/// </summary>
/// <param name="row_no"></param>
/// <param name="PageNum"></param>
/// <param name="PageSize"></param>
/// <param name="totalCount"></param>
/// <returns></returns>
public List<ChannelList> GetChannelsByDrawerNo(int row_no, int PageNum, int PageSize, ref int totalCount)
{
List<ChannelList> channelLists = new List<ChannelList>();
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<ChannelStock> csList = new List<ChannelStock>();
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;
}
/// <summary>
/// 回收库位查询
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 移出绑定
/// </summary>
/// <returns></returns>
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;
}
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
/// <summary>
/// 库存列表加载数据
/// </summary>
/// <param name="searchCode"></param>
/// <param name="searchValue"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="totalCount"></param>
/// <returns></returns>
public List<DrugInfo> StockListInfo(string searchCode, string searchValue, int pageNum, int pageSize, ref int totalCount)
{
List<DrugInfo> drugList = new List<DrugInfo>();
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<ChannelStock> stockList = new List<ChannelStock>();
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;
}
/// <summary>
/// 库存盘点加载数据
/// </summary>
/// <returns></returns>
public List<ChannelStock> CheckStockInfo(string searchValue)
{
List<ChannelStock> stockList = new List<ChannelStock>();
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;
}
/// <summary>
/// 库存盘点保存
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
public bool CheckStockSave(List<ChannelStock> 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<ChannelStock> 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<CheckRecordStock> checkRecordStockList = GetCheckRecordStocks();
logger.Info("已完成-查询channel_stock关联drug_info表信息查询");
List<CheckRecordStock> insertList = new List<CheckRecordStock>();
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},{manuQuantiy},'{cStock.manuNo}','{cStock.effDate}','{cStock.drugName}','{cStock.manufactory}','{cStock.drugSpec}','{cStock.packUnit}',
{cStock.maxStock},'{cStock.drugId}','{cStock.MachineId}',{quantity},'{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<CheckRecordStock> GetCheckRecordStocks()
{
List<CheckRecordStock> stockList = new List<CheckRecordStock>();
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;
}
/// <summary>
/// 盘点记录加载数据
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="totalcount"></param>
/// <returns></returns>
public List<CheckRecordStock> CheckRecordInfo(DateTime? startDate, DateTime? endDate, int pageNum, int pageSize, ref int totalcount)
{
List<CheckRecordStock> checkRecordList = new List<CheckRecordStock>();
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;
}
/// <summary>
/// 盘点详情加载数据
/// </summary>
/// <param name="optDate"></param>
/// <returns></returns>
public List<CheckRecordStock> CheckRecordDetailInfo(string optDate)
{
List<CheckRecordStock> cRecordStockList = new List<CheckRecordStock>();
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}'";
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;
}
/// <summary>
/// 药品列表
/// </summary>
/// <param name="searchCode"></param>
/// <param name="searchValue"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="totalcount"></param>
/// <returns></returns>
public List<DrugInfo> DrugListInfo(string searchCode, string searchValue, int pageNum, int pageSize, ref int totalcount)
{
List<DrugInfo> diList = new List<DrugInfo>();
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;
}
/// <summary>
/// 修改药品信息
/// </summary>
/// <param name="drug"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据药品ID批号效期查询药品数据
/// </summary>
/// <param name="drugId"></param>
/// <param name="manuNo"></param>
/// <param name="effDate"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 药品列表 新增批次
/// </summary>
/// <param name="drugManuNo"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 药品列表中修改药品批次效期
/// </summary>
/// <param name="SelectedManuno"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 药品列表中根据药品id查询药品批次
/// </summary>
/// <param name="drugId"></param>
/// <returns></returns>
public List<DrugManuNo> DrugListQueryManuNo(string drugId)
{
List<DrugManuNo> drugManuNoList = new List<DrugManuNo>();
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;
}
/// <summary>
/// 药品列表页面添加药品
/// </summary>
/// <param name="drug"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 交接班页面数据加载
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <param name="pageNum"></param>
/// <param name="pageSize"></param>
/// <param name="totalCount"></param>
/// <returns></returns>
public List<HkcChangeShifts> ChangeShiftsInfo(DateTime? startDate, DateTime? endDate, int pageNum, int pageSize, ref int totalCount)
{
List<HkcChangeShifts> shiftsList = new List<HkcChangeShifts>();
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;
}
/// <summary>
/// 交接班弹窗-//查询发药人及审核人
/// </summary>
/// <returns></returns>
public HkcChangeShifts ChangeShiftsDialogInfo()
{
HkcChangeShifts shifts = new HkcChangeShifts();
using (MySqlConnection con = new MySqlConnection(connStr))
{
con.Open();
try
{
//SqlSugarHelper.Db.Queryable<HkcChangeShifts>().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;
}
/// <summary>
/// 交接班 根据当前登录操作人/审核人 查询信息
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 指纹验证登录根据ID获取数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
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<PremissionDm> premissionList = new List<PremissionDm>();
premissionList = JsonConvert.DeserializeObject<List<PremissionDm>>(ds.Tables[0].Rows[0]["PERMISSIONS"].ToString());
role.Permissions = premissionList;
user.Role = role;
}
}
catch (Exception ex)
{
logger.Info($"GetUserInfo异常——{ex.Message}");
}
}
return user;
}
/// <summary>
/// 根据用户名获取用户信息
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
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<PremissionDm> premissionList = new List<PremissionDm>();
premissionList = JsonConvert.DeserializeObject<List<PremissionDm>>(ds.Tables[0].Rows[0]["PERMISSIONS"].ToString());
role.Permissions = premissionList;
user.Role = role;
}
}
catch (Exception ex)
{
logger.Info($"GetUserInfo异常——{ex.Message}");
}
}
return user;
}
/// <summary>
/// 交接班保存数据
/// </summary>
/// <returns></returns>
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<HkcChangeShifts> listHkcChangeShifts = new List<HkcChangeShifts>();
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<ShiftsReport> shiftsReports = new List<ShiftsReport>();
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;
}
/// <summary>
/// 账册页面获取数据
/// </summary>
/// <returns></returns>
public List<DrugInfo> AccountListDrugInfos()
{
List<DrugInfo> drugList = new List<DrugInfo>();
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<DrugManuNo> manuNoList = new List<DrugManuNo>();
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;
}
/// <summary>
/// 获取账册信息
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <param name="type"></param>
/// <param name="drug_id"></param>
/// <returns></returns>
public List<AccountModel> ReportAccountBook(DateTime? startDate, DateTime? endDate, int type, string drug_id = "")
{
List<AccountModel> accountList = new List<AccountModel>();
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;
}
/// <summary>
/// 账册-生成账册中查询需要生成账册的内容
/// </summary>
/// <returns></returns>
public List<ChannelStockCount> GetAll()
{
List<ChannelStockCount> countList = new List<ChannelStockCount>();
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;
}
/// <summary>
/// 账册页面 获取药品总库存
/// </summary>
/// <param name="DrugId"></param>
/// <returns></returns>
public int GetChannelStocksTotalQuantity(string DrugId)
{
int channelStockQuantity = 0;// SqlSugarHelper.Db.Queryable<ChannelStock>().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;
}
/// <summary>
/// 账册页面保存记录
/// </summary>
/// <returns></returns>
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<UserList> UserManagerInfo(string searchValue, int pageNum, int pageSize, ref int totalCount)
{
List<UserList> userListList = new List<UserList>();
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;
}
/// <summary>
/// 修改用户页面获取角色
/// </summary>
/// <returns></returns>
public List<RoleDm> EditUserRoleInfo(string SearchValue = null)
{
List<RoleDm> roleDmList = new List<RoleDm>();
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<List<PremissionDm>>(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;
}
/// <summary>
/// 修改用户
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 角色管理——新增角色
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 角色管理——修改角色
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
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<MachineRecord> MachineRecordInfo(int type, DateTime? startDate, DateTime? endDate, string drugId, int pageNum, int pageSize, ref int totalCount)
{
List<MachineRecord> machineRecordList = new List<MachineRecord>();
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;
}
/// <summary>
/// 记录页面——更新凭证号
/// </summary>
/// <param name="id"></param>
/// <param name="invoiceId"></param>
/// <returns></returns>
public bool MachineRecordSave(List<MachineRecord> 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
}
}