体检系统架构
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

601 lines
26 KiB

#region CopyRight
/****************************************************************
* Project:健康体检信息管理系统(PEIS)
* Author:罗绍明
* CLR Version:4.0.30319.42000
* CreateTime:2023-05-01 14:54:23
* Version:v2.0
*
* Description:
*
* History:
*
*****************************************************************
* Copyright @ 云南新八达科技有限公司 2023 All rights reserved
*****************************************************************/
#endregion
using PEIS.Entity;
using PEIS.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
namespace PEIS.Model
{
internal class StatisticalReportModel : IModel<EnrollmentPatient>
{
#region base
public List<EnrollmentPatient> GetItems()
{
return null;
}
public bool HasExits(string value)
{
return false;
}
public bool HasModified(EnrollmentPatient item)
{
return false;
}
public EnrollmentPatient GetByID(Int64 id)
{
return null;
}
public EnrollmentPatient GetByCode(string code)
{
return null;
}
public bool SaveItem(EnrollmentPatient item)
{
return false;
}
public bool UpdateItem(EnrollmentPatient item)
{
return false;
}
public bool DeleteItem(Int64 id)
{
return false;
}
public bool DeleteItem(string code)
{
return false;
}
#endregion
// 人次统计表
public List<EnrollmentPatient> GetItemsByDateType(DateTime begTime ,DateTime endTime, string dateType, int status)
{
var sql= "";
if (status == 0)
{
switch (dateType)
{
case "PeopleSignDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NOT NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
case "PeopleCreateDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NOT NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
case "PeopleFinishDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.FinishTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NOT NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
}
}
else if (status == 1)
{
switch (dateType)
{
case "PeopleSignDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
case "PeopleCreateDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
case "PeopleFinishDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.FinishTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.OEID IS NULL
ORDER BY
a.OrgName,b.DeptName DESC";
break;
}
}
else
{
switch (dateType)
{
case "PeopleSignDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
ORDER BY
a.OrgName,b.DeptName DESC";
break;
case "PeopleCreateDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
ORDER BY
a.OrgName,b.DeptName DESC ";
break;
case "PeopleFinishDate":
sql = $@"SELECT
a.OrgName,
b.DeptName,
a.OEID,
a.ID ,
a.NAME,
CASE
a.SEX
WHEN 2 THEN
'女' ELSE '男'
END AS Sex,
CONVERT ( VARCHAR, Age ) + AgeClass AS AgeClass,
a.Tel1,
a.SignTime,
a.CreateTime,
a.FinishTime,
a.Signer,
a.CardNo
FROM
Enrollment_Patient a
LEFT JOIN Base_OrgPatient b ON a.PID = b.PID AND a.OID = b.OID
WHERE
a.FinishTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
ORDER BY
a.OrgName,b.DeptName DESC";
break;
}
}
return DAOHelp.GetDataBySQL<EnrollmentPatient>(sql);
}
// 费用明细统计表
public List<EnrollmentFeeItem> GetEFeeItems(DateTime begTime, DateTime endTime, int status, string deptCode="9999")
{
var sql = "";
if(status == 0)
{
sql = deptCode == "9999"
? $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL AND a.OEID IS NOT NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode"
: $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE a.DeptCode = '{deptCode}'
And c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL AND a.OEID IS NOT NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode";
}
else if(status == 1)
{
sql = deptCode == "9999"
? $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL AND a.OEID IS NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode"
: $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE a.DeptCode = '{deptCode}'
And c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL AND a.OEID IS NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode";
}
else
{
sql = deptCode == "9999"
? $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode "
: $@"SELECT
a.DeptName,
a.FeeItemName,
a.Price,
COUNT ( * ) AS Quantity,
CONVERT ( DECIMAL ( 18, 2 ), SUM ( a.Price )) AS TotalPrice,
b.Discount,
Convert(decimal(18,2),SUM ( a.Price ) * b.Discount / 10) AS Fee
FROM
Enrollment_FeeItem a
LEFT JOIN Enrollment_CheckCost b ON a.OrderNo = b.ID
LEFT JOIN Enrollment_Patient c ON a.EID = c.ID
WHERE a.DeptCode = '{deptCode}'
And c.SignTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}')
AND a.OrderNo IS NOT NULL
GROUP BY
a.FeeItemCode,
a.DeptName,
a.FeeItemName,
a.Price,
b.Discount,
a.DeptCode
ORDER BY a.DeptCode,a.FeeItemCode ";
}
return DAOHelp.GetDataBySQL<EnrollmentFeeItem>(sql);
}
// 订单统计表
public List<EnrollmentCheckCost> GetCheckCosts(DateTime begTime ,DateTime endTime, string dateType, int status)
{
var sql = $@"SELECT
a.ID,
a.OEID,
c.Name AS OrgName,
a.EID,
b.Name AS PatientName,
a.Sum,
a.Discount,
a.Fee,
a.Creator,
CONVERT ( datetime, a.CreateTime, 20 ) AS CreateTime,
a.Charger,
CASE WHEN a.ChargeTime IS NOT NULL
THEN CONVERT ( datetime, a.ChargeTime, 20 )
END AS ChargeTime,
a.Coster,
CASE WHEN a.CostTime IS NOT NULL
THEN CONVERT ( datetime, a.CostTime, 20 )
END AS CostTime,
a.Sender,
CASE WHEN a.SendTime IS NOT NULL
THEN CONVERT ( datetime, a.SendTime, 20 )
END AS SendTime
FROM Enrollment_CheckCost a
LEFT JOIN Enrollment_Patient b ON a.EID = b.ID
LEFT JOIN Enrollment_Org c ON a.OEID = c.ID";
if(status == 0)
{
switch (dateType)
{
case "OrderCreateDate":
sql = sql + $@" WHERE a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NOT NULL";
break;
case "OrderChargeDate":
sql = sql + $@" WHERE a.ChargeTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NOT NULL";
break;
case "OrderCostDate":
sql = sql + $@" WHERE a.CostTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NOT NULL";
break;
case "OrderSendDate":
sql = sql + $@" WHERE a.SendTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NOT NULL";
break;
}
}
else if (status == 1)
{
switch (dateType)
{
case "OrderCreateDate":
sql = sql + $@" WHERE a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NULL";
break;
case "OrderChargeDate":
sql = sql + $@" WHERE a.ChargeTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NULL";
break;
case "OrderCostDate":
sql = sql + $@" WHERE a.CostTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NULL";
break;
case "OrderSendDate":
sql = sql + $@" WHERE a.SendTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL AND a.OEID IS NULL";
break;
}
}
else
{
switch (dateType)
{
case "OrderCreateDate":
sql = sql + $@" WHERE a.CreateTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL ";
break;
case "OrderChargeDate":
sql = sql + $@" WHERE a.ChargeTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL ";
break;
case "OrderCostDate":
sql = sql + $@" WHERE a.CostTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL ";
break;
case "OrderSendDate":
sql = sql + $@" WHERE a.SendTime Between '{begTime:yyyy-MM-dd}' and DateAdd(day, 1,'{endTime:yyyy-MM-dd}') AND a.DeleteTime IS NULL ";
break;
}
}
return DAOHelp.GetDataBySQL<EnrollmentCheckCost>(sql);
}
// 获取科室列表
public List<User> GetDeptList()
{
return DAOHelp.GetDataBySQL<User>("SELECT DeptCode,DeptName FROM Enrollment_FeeItem GROUP BY DeptCode,DeptName");
}
// 获取两癌筛查数据
public List<TwoCancer> GetTwoCancerData(DateTime begDate, DateTime endDate)
{
return DAOHelp.GetDataBySQL<TwoCancer>($@"SELECT * FROM v_TwoCancer2 WHERE ExamDate Between '{begDate:yyyy-MM-dd}' and DateAdd(day, 1,'{endDate:yyyy-MM-dd}')");
}
}
}