using LinqToDB; using log4net; using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; using Microsoft.Extensions.Options; using Mysqlx.Crud; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MasaBlazorApp3.DataAccess.Impl { public class ReportDataDao : IReportDataDao { private AppDataConnection _connection; private readonly SettingConfig _setting; private readonly ILog logger = LogManager.GetLogger(typeof(ReportDataDao)); public ReportDataDao(AppDataConnection connection, IOptions setting) { _connection = connection; _setting = setting.Value; } //获取库存导出数据 public async Task> GetStockExportData(string drugName) { try { List reportStockList = new List(); 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)) { SQL += " and di.drug_name = '{drugName}'"; } SQL += " ORDER BY cl.`drug_id`"; // 加载模板文件 //Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "stock_template.grf"); var reportList = _connection.FromSql(SQL); if (reportList != null) { foreach (var report in reportList) { reportStockList.Add(report); } pagedData = await reportList.CountAsync(); } return new PageData() { TotalDesserts = pagedData, Desserts = reportStockList }; } catch (Exception ex) { logger.Info($"获取库存导出数据异常:{ex.Message}"); return null; } } public async Task> GetAccountExportData(DateTime? startDate, DateTime? endDate, string drugName) { List accountList = new List(); int pagedData = 0; DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); string SQL = $@"SELECT mr.`stock_quantity` AS `stockQuantity`, IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, 0)) AS `inQuantity`, IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), 0)) AS `outQuantity`, mr.`operation_time` AS `operationTime`, mr.`invoice_id` AS `invoiceId`, di.`drug_name` AS `drugName`, di.`drug_id` AS `drugId`, di.`drug_spec` AS `drugSpec`, di.`big_unit` AS `BigUnit`, di.`dosage` AS `dosage`, di.`manufactory` AS `manufactory`, mr.`manu_no` AS `manuNo`, mr.`eff_date` AS `effDate`, u1.`user_name` AS `operatorName`, u2.`user_name` AS `reviewerName` 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` = '{_setting.machineId}' AND mr.`operation_time` > '{p_startDate}' AND mr.`operation_time` < '{p_endDate}'"; if (!string.IsNullOrEmpty(drugName)) { SQL += " AND di.drug_name= '{drugName}'"; } SQL += " ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`"; var reportList = _connection.FromSql(SQL); if (reportList != null) { foreach (var report in reportList) { accountList.Add(report); } pagedData = await reportList.CountAsync(); } return new PageData() { TotalDesserts = pagedData, Desserts = accountList }; } } }