2025-07-21 16:42:40 +08:00
using LinqToDB ;
using log4net ;
using MasaBlazorApp3.DataAccess.Dao ;
2025-07-05 17:27:18 +08:00
using MasaBlazorApp3.Pojo ;
2025-07-21 16:42:40 +08:00
using MasaBlazorApp3.Pojo.Config ;
using Microsoft.Extensions.Options ;
using Mysqlx.Crud ;
2025-07-05 17:27:18 +08:00
using System ;
using System.Collections.Generic ;
2025-07-21 16:42:40 +08:00
using System.Data.Common ;
2025-07-05 17:27:18 +08:00
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
namespace MasaBlazorApp3.DataAccess.Impl
{
public class ReportDataDao : IReportDataDao
{
2025-07-21 16:42:40 +08:00
private AppDataConnection _connection ;
private readonly SettingConfig _setting ;
private readonly ILog logger = LogManager . GetLogger ( typeof ( ReportDataDao ) ) ;
public ReportDataDao ( AppDataConnection connection , IOptions < SettingConfig > setting )
2025-07-05 17:27:18 +08:00
{
2025-07-21 16:42:40 +08:00
_connection = connection ;
_setting = setting . Value ;
}
//获取库存导出数据
public async Task < PageData < ReportStockDateInfo > > GetStockExportData ( string drugName )
{
try
{
List < ReportStockDateInfo > reportStockList = new List < ReportStockDateInfo > ( ) ;
int pagedData = 0 ;
string SQL = $ @ "SELECT cl.drug_id AS DrugId,di.`drug_name` AS DrugName,di.drug_type AS DrugType,di.drug_spec AS DrugSpec,di.manufactory AS Manufactory,
di . pack_unit AS pack_unit , di . py_code AS PyCode , null AS Stocks , NULL AS Manus , db . baseQuantity AS BaseQuantity , CONCAT ( cl . row_no , cl . col_no ) as location ,
cl . manu_no as ManuNo , cl . eff_date as EffDate , cl . Quantity AS Quantity , cl . manu_no , cl . eff_date FROM channel_stock cl INNER JOIN drug_info di ON di . ` drug_id ` = cl . ` drug_id `
LEFT JOIN drug_base db ON db . drugid = di . drug_id and db . machine_id = ' { _setting . machineId } '
WHERE cl . ` machine_id ` = ' { _setting . machineId } ' AND cl . ` drawer_type ` = 1 ";
if ( ! string . IsNullOrEmpty ( drugName ) )
{
2025-08-21 18:25:23 +08:00
SQL + = $" and (di.drug_name like '%{drugName}%'|| di.py_code like '%{drugName}%'||di.drug_id like '%{drugName}%')" ;
2025-07-21 16:42:40 +08:00
}
SQL + = " ORDER BY cl.`drug_id`" ;
// 加载模板文件
//Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "stock_template.grf");
var reportList = _connection . FromSql < ReportStockDateInfo > ( SQL ) ;
if ( reportList ! = null )
{
foreach ( var report in reportList )
{
2025-08-21 18:25:23 +08:00
reportStockList . Add ( report ) ;
2025-07-21 16:42:40 +08:00
}
pagedData = await reportList . CountAsync ( ) ;
}
2025-08-21 18:25:23 +08:00
return new PageData < ReportStockDateInfo > ( )
2025-07-21 16:42:40 +08:00
{
TotalDesserts = pagedData ,
Desserts = reportStockList
} ;
}
catch ( Exception ex )
{
logger . Info ( $"获取库存导出数据异常:{ex.Message}" ) ;
return null ;
}
}
2025-08-21 18:25:23 +08:00
//中部战区总医院麻醉药品、第一类精神药品进出专用账册
2025-07-21 16:42:40 +08:00
public async Task < PageData < ReportAccountDateInfo > > GetAccountExportData ( DateTime ? startDate , DateTime ? endDate , string drugName )
{
List < ReportAccountDateInfo > accountList = new List < ReportAccountDateInfo > ( ) ;
int pagedData = 0 ;
DateTime ? p_startDate = startDate ? ? Convert . ToDateTime ( "2010-1-1" ) ;
DateTime ? p_endDate = endDate ? ? DateTime . Now . AddDays ( 1 ) ;
2025-08-21 18:25:23 +08:00
string SQL = $ @ "SELECT ab.`create_time` AS `OperationTime`,ab.manu_no AS ManuNo,ab.eff_date as EffDate, ab.add_quantity AS `inQuantity`,
ab . out_quantity AS ` outQuantity ` , ab . manu_quantity as ManuQuantity , ab . total_quantity as StockQuantity ,
u1 . ` user_name ` AS ` operatorName ` , u2 . ` user_name ` AS ` reviewerName ` , ab . ` drug_id ` AS ` drugId ` , di . ` drug_name ` AS ` drugName ` , di . ` drug_spec ` AS ` drugSpec ` , di . ` pack_unit ` AS ` BigUnit ` , di . ` dosage ` AS ` dosage ` ,
di . ` manufactory ` AS ` manufactory ` , ab . ` invoice_id ` AS ` invoiceId ` , ab . department as department , ' ' as Remarks FROM
account_book ab LEFT JOIN drug_info di ON ab . ` drug_id ` = di . ` drug_id ` LEFT JOIN user_list u1 ON ab . ` operator ` = u1 . ` id `
LEFT JOIN user_list u2 ON ab . ` reviewer ` = u2 . ` id ` WHERE ab . ` machine_id ` = ' { _setting . machineId } ' AND ab . type in ( 1 , 2 , 31 ) DATE_FORMAT ( ab . ` create_time ` , ' % Y - % m - % d ' ) > ' { p_startDate } '
AND DATE_FORMAT ( ab . ` create_time ` , ' % Y - % m - % d ' ) < ' { p_endDate } ' ";
2025-07-21 16:42:40 +08:00
if ( ! string . IsNullOrEmpty ( drugName ) )
{
2025-08-21 18:25:23 +08:00
SQL + = $" AND (di.drug_name like '%{drugName}%' or di.drug_id like '%{drugName}%' or di.py_code like '%{drugName}%')" ;
2025-07-21 16:42:40 +08:00
}
2025-08-21 18:25:23 +08:00
SQL + = " ORDER BY ab.`create_time`, ab.`drug_id`" ;
2025-07-21 16:42:40 +08:00
var reportList = _connection . FromSql < ReportAccountDateInfo > ( SQL ) ;
if ( reportList ! = null )
{
foreach ( var report in reportList )
{
2025-08-21 18:25:23 +08:00
accountList . Add ( report ) ;
2025-07-21 16:42:40 +08:00
}
pagedData = await reportList . CountAsync ( ) ;
}
return new PageData < ReportAccountDateInfo > ( )
{
TotalDesserts = pagedData ,
Desserts = accountList
} ;
2025-07-05 17:27:18 +08:00
}
2025-08-21 18:25:23 +08:00
//手术室患者麻醉药品使用登记本
public async Task < PageData < ReportUsageDateInfo > > GetOrderInfoData ( DateTime searchDate )
{
List < ReportUsageDateInfo > accountList = new List < ReportUsageDateInfo > ( ) ;
int pagedData = 0 ;
string SQL = $ @ "SELECT oi.Order_date as portdate, od.drug_id as DrugId,1 as ShouShuJian,'' as ZhuMa,'' as FuMa,oi.patient_id as IDNumber,oi.p_name as PName,oi.disease as Diagnose,
CONCAT ( di . drug_name , ' ' , di . drug_spec ) as DrugName , od . set_manu_No as ManuNo , od . use_dosage as UsageDosage , ' ' as CanYeLiang , ' ' as CanYeChuZhi , ' ' as UseUserName , ' ' as CheckUserName
from order_info oi inner join order_detail od on oi . order_no = od . order_no inner join drug_info di on od . drug_id = di . drug_id
WHERE DATE_FORMAT ( oi . Order_date , ' % Y - % m - % d ' ) = ' { searchDate . ToString ( "yyyy-MM-dd" ) } ' and oi . dm_status = 2 and oi . cancel_flag = 0 and oi . his_disp_flag = 0 and di . pack_h = 1 ";
var reportList = _connection . FromSql < ReportUsageDateInfo > ( SQL ) ;
if ( reportList ! = null )
{
foreach ( var report in reportList )
{
accountList . Add ( report ) ;
}
pagedData = await reportList . CountAsync ( ) ;
}
return new PageData < ReportUsageDateInfo > ( )
{
TotalDesserts = pagedData ,
Desserts = accountList
} ;
}
//麻醉科毒麻药品请领登记表
public async Task < PageData < ReportApplyInfo > > GetApplyInfoDate ( DateTime searchDate )
{
List < ReportApplyInfo > accountList = new List < ReportApplyInfo > ( ) ;
int pagedData = 0 ;
string SQL = $ @ "SELECT Drawerno as BoxNum,Create_date AS applyinfo,userfirst,usersecond,drugid,doctor,manager
from applyinfo ap inner join drug_info di on ap . drugid = di . drug_id
WHERE machine_id = ' { _setting . boxMachineId } ' and DATE_FORMAT ( ap . Create_date , ' % Y - % m - % d ' ) = ' { searchDate . ToString ( "yyyy-MM-dd" ) } ' ";
var reportList = _connection . FromSql < ReportApplyInfo > ( SQL ) ;
if ( reportList ! = null )
{
foreach ( var report in reportList )
{
accountList . Add ( report ) ;
}
pagedData = await reportList . CountAsync ( ) ;
}
return new PageData < ReportApplyInfo > ( )
{
TotalDesserts = pagedData ,
Desserts = accountList
} ;
}
2025-07-05 17:27:18 +08:00
}
}