HuNan_NOSqlSugar/DM_Weight/Services/SqlHelperService.cs

4970 lines
284 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}