添加库存报表、账册报表

修改登录人修改密码
This commit is contained in:
马巧 2025-07-21 16:42:40 +08:00
parent c21b39a9f3
commit 9a5f97626f
14 changed files with 281 additions and 51 deletions

View File

@ -9,7 +9,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
{
public interface IReportDataDao
{
//获取库存导出数据
Task<PageData<ReportStockDateInfo>> GetStockExportData(string drugName);
//专用账册导出数据
Task<List<ChannelStock>> AccountBookExport(DateTime? startDate, DateTime? endDate, string drugId);
Task<PageData<ReportAccountDateInfo>> GetAccountExportData(DateTime? startDate, DateTime? endDate, string drugName);
}
}

View File

@ -1,7 +1,13 @@
using MasaBlazorApp3.DataAccess.Dao;
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;
@ -10,9 +16,93 @@ namespace MasaBlazorApp3.DataAccess.Impl
{
public class ReportDataDao : IReportDataDao
{
public Task<List<ChannelStock>> AccountBookExport(DateTime? startDate, DateTime? endDate,string drugId)
private AppDataConnection _connection;
private readonly SettingConfig _setting;
private readonly ILog logger = LogManager.GetLogger(typeof(ReportDataDao));
public ReportDataDao(AppDataConnection connection, IOptions<SettingConfig> setting)
{
throw new NotImplementedException();
_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))
{
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<ReportStockDateInfo>(SQL);
if (reportList != null)
{
foreach (var report in reportList)
{
reportStockList.Add(report);
}
pagedData = await reportList.CountAsync();
}
return new PageData<ReportStockDateInfo>()
{
TotalDesserts = pagedData,
Desserts = reportStockList
};
}
catch (Exception ex)
{
logger.Info($"获取库存导出数据异常:{ex.Message}");
return null;
}
}
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);
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<ReportAccountDateInfo>(SQL);
if (reportList != null)
{
foreach (var report in reportList)
{
accountList.Add(report);
}
pagedData = await reportList.CountAsync();
}
return new PageData<ReportAccountDateInfo>()
{
TotalDesserts = pagedData,
Desserts = accountList
};
}
}
}

View File

@ -12,7 +12,7 @@
</style>
<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
<RadzenColumn Size="12" SizeMD="5">
@* <RadzenColumn Size="12" SizeMD="5">
<RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
@if (userI == 1)
{
@ -29,7 +29,7 @@
</RadzenText>
}
</RadzenCard>
</RadzenColumn>
</RadzenColumn> *@
<RadzenColumn Size="12" SizeMD="7">
<RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
@* <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">

View File

@ -1,5 +1,5 @@
@page "/user/finger/{userId}"
@page "/finger/{userId}"
@using log4net;
<RadzenStack Gap="1.5rem">

View File

@ -36,44 +36,49 @@
.rz-gauge .rz-tick-text {
fill: #ffffff !important;
}
<style >
.icon-preview div {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
width: 120px;
}
.icon-preview span {
color: white;
font-size: 0.75rem;
}
</style>
</style>
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
<RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
<RadzenColumn Size="2">
<RadzenColumn Size="4">
</RadzenColumn>
<RadzenColumn Size="8">
<RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
<RadzenColumn Size="2">
<RadzenColumn Size="3">
@if (globalStateService.Operator != null)
{
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
<RadzenText onclick="@(() => { EditPassword(1); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
//<RadzenText onclick="@(() => { EditPassword(1); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
<RadzenProfileMenu prefix="" Click="MenuClick">
<Template>
<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
</Template>
<ChildContent>
<RadzenProfileMenuItem Text="录入指纹" Value="11" Icon="account_circle"></RadzenProfileMenuItem>
<RadzenProfileMenuItem Text="录入签名" Value="21" Icon="line_weight"></RadzenProfileMenuItem>
<RadzenProfileMenuItem Text="修改密码" Value="31" Icon="password"></RadzenProfileMenuItem>
</ChildContent>
</RadzenProfileMenu>
}
@if (globalStateService.Reviewer != null)
{
//<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
<RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
//<RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
<RadzenProfileMenu prefix="" Click="MenuClick">
<Template>
<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
</Template>
<ChildContent>
<RadzenProfileMenuItem Text="录入指纹" Value="12" Path="fingerprint" Icon="account_circle"></RadzenProfileMenuItem>
<RadzenProfileMenuItem Text="录入签名" Value="22" Path="edit_document" Icon="line_weight"></RadzenProfileMenuItem>
<RadzenProfileMenuItem Text="修改密码" Value="32" Icon="password"></RadzenProfileMenuItem>
</ChildContent>
</RadzenProfileMenu>
}
</RadzenColumn>
<RadzenColumn Size="3" Orientation="Orientation.Horizontal" Wrap="FlexWrap.Wrap" class="icon-preview rz-p-12">
<RadzenColumn Size="3">
<div>
<RadzenIcon Icon="compare_arrows" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { changeShifts(); })" />
<span>交接班</span>
@ -84,11 +89,7 @@
</RadzenColumn>
</RadzenRow>
</RadzenColumn>
<RadzenColumn Size="2">
</RadzenColumn>
</RadzenRow>
<RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
<RadzenStack Style="height: 100%;width:41%" Gap="20">
@ -334,7 +335,63 @@
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
}
async void MenuClick(RadzenProfileMenuItem item)
{
string strValue= item.Value.Substring(0,1);
Pojo.User user = new Pojo.User();
switch(strValue)
{
case "1":
int userId = 0;
if (item.Value == "11")
{
user = globalStateService.Operator;
}
else
{
user = globalStateService.Reviewer;
}
await dialogService.OpenAsync<FingerRegDialog>(
$"录入指纹-{user.Username}",
new Dictionary<string, object>() { { "userId", user.Id } },
new DialogOptions() { Width = "55vw", Resizable = true, Draggable = false, ShowClose = false }
);
break;
case "2":
if (item.Value=="21")
{
user = globalStateService.Operator;
}
else
{
user = globalStateService.Reviewer;
}
await dialogService.OpenAsync<SignatureDialog>(
$"签名-{user.NickName}",
new Dictionary<string, object>() { { "user", user } },
new DialogOptions() { Width = "55vw", Resizable = true, Draggable = false, ShowClose = true }
);
break;
case "3":
if (item.Value == "31")
{
user = globalStateService.Operator;
}
else
{
user = globalStateService.Reviewer;
}
int userI =Convert.ToInt32(item.Value.Substring(1, 1));
await dialogService.OpenAsync<EditPasswordDialog>(
$"修改密码-{user.Username}",
new Dictionary<string, object>() { { "userI",userI} },
new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = true }
);
break;
}
}
//交接班
async void changeShifts()
{

View File

@ -217,6 +217,11 @@
private void Exit()
{
if (globalStateService.Operator != null)
{
globalStateService.Operator = null;
globalStateService.Reviewer = null;
}
dialogService.Close(false);
}

View File

@ -1,4 +1,5 @@
@page "/signature/{user}"
@page "/signature"
@layout EmptyLayout
<RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center">
@if (user.Sign != null)

View File

@ -119,7 +119,7 @@
if (success && dateTime <= DateTime.Now.AddMonths(3))
{
@s.EffDate
<p class="shaky-text">近效期药品!</p>
}
else
@ -140,7 +140,7 @@
@if (s.StockQuantity < 10)
{
@s.StockQuantity
<p class="shaky-text">库存预警!</p>
}
else
@ -157,13 +157,13 @@
@code {
@inject IDrugInfoDao drugInfoDao;
@inject DialogService dialogService;
@inject IChannelListDao channelStockDao;
@inject IReportDataDao reportDataDao;
RadzenDataGrid<DrugInfo> grid;
bool isLoading;
int count;
private IEnumerable<DrugInfo>? _forecasts;
DateTime start;
DateTime end;
DateTime? start;
DateTime? end;
string drugName;
@ -202,16 +202,16 @@
//库存导出
async Task StockExport()
{
string drugId = drugName != null ? drugName.Split('/').Last().Trim() : "";
// await GridReportUtil.PrintReportAccountBook(null, null, 0, drugId);
PageData<ReportStockDateInfo> pageData = await reportDataDao.GetStockExportData(drugName);
GridReportUtil.PrintReport("stock_template.grf", pageData);
}
//专用账册导出
async Task AccountBookExport()
{
// string drugId = drugName != null ? drugName.Split('/').Last().Trim():"";
// GridReportUtil gridReportUtil = new GridReportUtil();
PageData<ChannelStock> pageData = await channelStockDao.GetAllChannelList(1,"",0,0);
GridReportUtil.PrintReport("stock_template.grf", null);
PageData<ReportAccountDateInfo> pageData = await reportDataDao.GetAccountExportData(start, end, drugName);
GridReportUtil.PrintReport("account_book_temp.grf", pageData);
}
//重置

View File

@ -74,7 +74,7 @@ namespace MasaBlazorApp3.Pojo
[Column("eff_date")]
public DateTime? EffDate { get; set; }
/// <summary>
/// 出库入库类型(1领入2发出3日结4日总结5转结)
/// 出库入库类型(1领入2发出3盘点4日结5日总结6转结)
///</summary>
[Column("type")]
public int Type { get; set; }

View File

@ -1,12 +1,86 @@
using System;
using MySqlX.XDevAPI.Relational;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MasaBlazorApp3.Pojo
{
public class ReportDateInfo
public class ReportAccountDateInfo
{
//日期
public string OperationTime { get; set; } = string.Empty;
//操作类型
//public string Type { get; set; } = string.Empty;
//批号
public string ManuNo { get; set; } = string.Empty;
//效期
public string EffDate { get; set; } = string.Empty;
//上次批次结存
//public string BeforeManuQuan { get; set; } = string.Empty;
//入库数量
public int InQuantity { get; set; } = 0;
// 出库数量
public int OutQuantity { get; set; } = 0;
//批号结存
//public int ManuQuantity { get; set; } = 0;
//总结存
public int StockQuantity { get; set; } = 0;
//收/发药人
public string operatorName { get; set; } = string.Empty;
//复核人
public string ReviewerName { get; set; } = string.Empty;
public string DrugId { get; set; } = string.Empty;
//药品名称
public string DrugName { get; set; } = string.Empty;
//药品规格
public string DrugSpec { get; set; } = string.Empty;
//单位
public string BigUnit { get; set; } = string.Empty;
//剂型
public string Dosage { get; set; } = string.Empty;
//生产厂家
public string Manufactory { get; set; } = string.Empty;
//凭证号
public string InvoiceId { get; set; } = string.Empty;
////供应单位
//public string SupplierDept { get;set; } = string.Empty;
////领用部门
//public string ReceiveDept { get; set; } = string.Empty;
}
public class ReportStockDateInfo
{
public string DrugId { get; set; }
public string DrugName { get; set; }
public string DrugType { get; set; }
public string DrugSpec { get; set; }
public string Manufactory { get; set; }
public string PyCode { get; set; }
//基数
public int BaseQuantity { get; set; }
//批次
public string ManuNo { get; set; }
//效期
public string EffDate { get; set; }
//库位
public string location { get; set; }
//数量
public int Quantity { get; set; }
}
}

View File

@ -72,6 +72,9 @@ internal class Program
//药品批次
appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
//报表
appBuilder.Services.AddScoped<IReportDataDao, ReportDataDao>();
//交接班记录
appBuilder.Services.AddScoped<IHkcChangeShiftsDao, HkcChangeShiftsDao>();

View File

@ -31,8 +31,5 @@ namespace MasaBlazorApp3.Report
Report.LoadDataFromXML(JsonConvert.SerializeObject(data));
Report.PrintPreview(true);
}
}
}

View File

@ -1,5 +1,5 @@
{
"Version":"6.3.0.1",
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
@ -316,7 +316,7 @@
"Charset":134
},
"TextAlign":"MiddleCenter",
"Text":"入\r\n数量"
"Text":"入\r\n数量"
},
{
"GroupTitle":false,

View File

@ -1,5 +1,5 @@
{
"Version":"6.8.5.2",
"Version":"6.8.1.1",
"Font":{
"Name":"宋体",
"Size":105000,
@ -27,7 +27,8 @@
"Name":"manuFactory"
},
{
"Name":"quantityCount"
"Name":"quantityCount",
"DBFieldName":"quantity"
},
{
"Name":"manuNo"
@ -328,7 +329,7 @@
"Type":"StaticBox",
"Name":"StaticBox1",
"Center":"Horizontal",
"Left":7.77875,
"Left":8.89,
"Top":0.608542,
"Width":9.18104,
"Height":1.21708,