体检系统架构
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.
 
 
 

740 lines
31 KiB

#region CopyRight
/****************************************************************
* Project:健康体检信息管理系统(PEIS)
* Author:H
* CLR Version:4.0
* CreateTime:2023-05-15 16:20:00
* Version:v0.0.1
* Description:科室分检
*****************************************************************
* Copyright @ 云南新八达科技有限公司 2023 All rights reserved
*****************************************************************/
#endregion CopyRight
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using DevExpress.XtraPrinting.Native;
using PEIS.Entity;
using PEIS.Utils;
namespace PEIS.Model
{
public class PartModel : IModel<ExamPart>
{
/// <summary>
/// 获取所有数据项
/// </summary>
/// <returns>数据项列表</returns>
public List<ExamPart> GetItems()
{
throw new NotImplementedException();
}
#region 方法
/// <summary>
/// 1.获取体检者各科室分检状态
/// </summary>
/// <returns></returns>
public List<User> GetDeptList(long eid)
{
var sql = $@" SELECT DISTINCT DeptCode,DeptName,Status FROM vi_EnPart WHERE isSend=1 and EID={eid}";
var list = DAOHelp.GetDataBySQL<User>(sql);
var data = Global._lstAllDept.Select(t =>
{
t.Status = list.FirstOrDefault(p => p.DeptCode == t.DeptCode)?.Status;
return t;
}).ToList();
return data;
}
/// <summary>
/// 【part01】 获取体检者列表
/// </summary>
/// <param name="dateType">时间类型</param>
/// <param name="begDate">时间Beg yyyy-MM-dd String</param>
/// <param name="endDate">时间End yyyy-MM-dd String</param>
/// <param name="team">团队</param>
/// <param name="info">个人</param>
/// <returns></returns>
public List<EnrollmentPatient> GetPatients(string dateType, string begDate, string endDate, string team,
string info)
{
if (string.IsNullOrWhiteSpace(dateType) || string.IsNullOrWhiteSpace(begDate) ||
string.IsNullOrWhiteSpace(endDate))
{
return new List<EnrollmentPatient>();
}
// Tel1,Tel2,Contactor1,Contactor2,Address1,Address2,Education,Occupation,FinisherCode,Finisher,
// OID,OEID,OrgName,GroupID,GroupName,Sex, Age, AgeClass,Nation, CardType,CardNo,Marriage,Type,
var sql = $@"
SELECT DISTINCT eid AS ID, NAME, ExamDate,SignTime,FinishTime,
CASE WHEN EXISTS ( SELECT 1 FROM vi_EnPart AS sub WHERE sub.eid = main.eid AND sub.STATUS = '科室分检' AND sub.isSend=1 ) THEN '科室分检' ELSE main.STATUS END AS Status
FROM vi_EnPart AS main
WHERE isSend=1 and WeChatStatus>=0 ";
if (string.IsNullOrWhiteSpace(team) && string.IsNullOrWhiteSpace(info))
sql += $"AND {dateType} >='{begDate}' AND {dateType} <'{endDate}'";
if (!string.IsNullOrWhiteSpace(team))
sql += long.TryParse(team, out _) ? $@" AND OEID ={team}" : $@"AND OrgName LIKE '%{team}%'";
if (!string.IsNullOrWhiteSpace(info))
sql += long.TryParse(info, out _) ? $@" AND EID ={info}" : $@"AND ( Name LIKE '%{info}%' or SpellCode like '{info}%' )";
var data = DAOHelp.GetDataBySQL<EnrollmentPatient>(sql).OrderByDescending(o => o.SignTime).ToList();
return data;
}
/// <summary>
/// 根据体检号获取当前体检者信息
/// </summary>
/// <param name="eid"></param>
/// <returns></returns>
public EnrollmentPatient GetPatientInfo(long eid)
{
var sql = $@"
SELECT DISTINCT eid AS ID, NAME, Sex, Age, AgeClass,Nation, CardType,CardNo,
Tel1,Tel2,Contactor1,Contactor2,Address1,Address2,Marriage,Education,Occupation,
ExamDate,Type, OID,OEID,OrgName,GroupID,GroupName,SignTime,FinishTime,FinisherCode,Finisher,
CASE WHEN EXISTS ( SELECT 1 FROM vi_EnPart AS sub WHERE sub.eid = main.eid AND sub.STATUS = '科室分检' AND sub.isSend=1 ) THEN '科室分检' ELSE main.STATUS END AS Status
FROM vi_EnPart AS main
WHERE eid={eid}";
return DAOHelp.GetDataBySQL<EnrollmentPatient>(sql).FirstOrDefault();
}
/// <summary>
/// 3.根据体检号和当前科室Code 获取当前科室体检者信息
/// </summary>
/// <param name="eid">体检号</param>
/// <param name="deptCode">当前科室</param>
/// <returns></returns>
public ExamPart GetItem(long eid, string deptCode)
{
if (string.IsNullOrEmpty(deptCode)) return new ExamPart();
return DAOHelp.GetDataBySQL<ExamPart>($@"SELECT * FROM Exam_Part WHERE EID ={eid} AND DeptCode={deptCode}")
?.FirstOrDefault();
}
/// <summary>
/// 4.获取当前科室体检医师列表
/// </summary>
/// <param name="deptCode"></param>
/// <returns></returns>
public List<List<User>> GetDoctorList(string deptCode)
{
var list = DAOHelp.GetDataBySQL<User>(
$@"SELECT A.Name ,A.Code FROM [dbo].[Dict_User] A
LEFT JOIN Dict_Dept B ON A.DID=B.ID
WHERE B.Code='{deptCode}'");
return new List<List<User>>()
{
list,
list,
new List<User>()
{
Global.currentUser
}
};
}
/// <summary>
/// 8.获取结论
/// </summary>
/// <param name="pid">科室分检ID</param>
/// <returns></returns>
public List<ExamConclusion> GetConclusion(Int64 pid)
{
Debug.WriteLine("[DEBUG] GetConclusion,获取结论");
return DAOHelp.GetDataBySQL<ExamConclusion>($@"SELECT * FROM Exam_Conclusion WHERE PID={pid}")?.ToList();
}
/// <summary>
/// 8.生成结论
/// </summary>
/// <param name="eid">体检号</param>
/// <param name="deptCode">科室</param>
/// <returns></returns>
public bool SetConclusion(Int64 eid, string deptCode)
{
Debug.WriteLine("[DEBUG] SetConclusion,生成结论");
var part = DAOHelp
.GetDataBySQL<ExamPart>($@"SELECT * FROM Exam_Part Where EID={eid} AND DeptCode='{deptCode}'")
.FirstOrDefault();
if (part == null)
{
throw new Exception(@"未找到对应科室分检信息,请刷新后重试!");
}
var summary = "";
var results = DAOHelp.GetDataBySQL<ExamResult>($@"
SELECT DISTINCT B.FeeItemName, B.RptItemName, B.TextResult, B.Unit, B.UnusualFlag , C.Seq as SeqReport
FROM
Exam_Part A
LEFT JOIN Exam_Result B ON B.PID = A.ID
LEFT JOIN Dict_ReportItem C ON C.ID = B.RID
WHERE
A.EID = {eid} AND A.DeptCode = '{deptCode}'
AND (
C.IsAddSummary = 1
OR B.UnusualFlag <> ''
OR (B.Range LIKE '%阴性%' AND B.TextResult LIKE '%+%')
OR (B.ItemClass='检验' AND B.TextResult LIKE '%阳%')
)
UNION ALL
SELECT DISTINCT A.FeeItemName, B.Title AS RptItemName, B.summary AS TextResult, Unit = '', UnusualFlag = '',0 as SeqReport
FROM
Enrollment_FeeItem A
LEFT JOIN Report B ON A.eid = B.eid AND (A.ID = B.ReportNo OR A.OldId = B.ReportNo)
WHERE
A.ItemClass = '检查' AND B.summary <> '' AND A.EID = {eid} AND A.DeptCode = '{deptCode}'").OrderBy(o=>o.SeqReport).ToList();
// 检验检查心电科室Code
var deptCodeList = new List<string>()
{
"3101", //病理科
"3201", //放射科
"3202", //超声科
};
var index = 1;
results.GroupBy(g => g.FeeItemName).ToList().ForEach(items =>
{
if (index > 1)
summary += Environment.NewLine;
summary += $@"{index}.{items.Key}:" + Environment.NewLine;
if (!deptCodeList.Contains(deptCode))
{
summary += string.Join(Environment.NewLine,
items.Select(s => $@" {s.RptItemName}:{s.TextResult} {s.Unit} {s.UnusualFlag};").ToList());
}
else
{
summary += string.Join(Environment.NewLine, items.Select(s => $@" {s.TextResult}").ToList());
var suggestion = items.FirstOrDefault()?.TextResult ?? "";
if (!string.IsNullOrEmpty(suggestion) && !string.IsNullOrEmpty(items.Key) && part.ID > 0)
{
DAOHelp.ExecuteSql(
$@" INSERT INTO Exam_Conclusion(PID, Conclusion, Suggestion, EID)VALUES({part.ID},'{items.Key}','{suggestion}',{eid})");
}
}
index += 1;
});
if (string.IsNullOrEmpty(summary))
summary = "未见明显异常";
DAOHelp.ExecuteSql($@"UPDATE Exam_Part SET Summary='{summary}' Where EID={eid} AND DeptCode='{deptCode}'");
var exits = DAOHelp.ExecuteSql($@"
INSERT INTO Exam_Conclusion (PID, FID, SID,Sign,CID,Conclusion,Suggestion,RID,EID)
SELECT B.PID, B.FID, B.SID,C.SignName AS Sign,D.ID AS CID,D.ConclusionName as Conclusion,D.Suggestion,C.RID,A.EID
FROM Exam_Part A
LEFT JOIN Exam_Result B ON B.PID=A.ID
LEFT JOIN Dict_Sign C ON C.ID=B.SID
LEFT JOIN Dict_Conclusion D ON D.ID=C.CID
WHERE A.ID={part.ID} AND B.SID IS NOT NULL AND d.ConclusionName is not null
AND NOT EXISTS (
SELECT 1
FROM Exam_Conclusion E
WHERE E.PID = B.PID AND E.CID = D.ID AND e.sid=d.SID
)
INSERT INTO Exam_Conclusion(PID, FID, SID, Sign, CID, Conclusion, Instructions, Suggestion, Advice, DietaryGuidance, RID, EID, Seq)
SELECT
A.ID AS PID,
B.FID AS FID,
D.ID AS SID,
D.SignName AS Sign,
E.ID AS CID,
E.ConclusionName AS Conclusion,
E.Instructions,
E.Suggestion,
E.Advice,
E.DietaryGuidance,
B.RID,
A.EID,
Seq=0
FROM Exam_Part A
LEFT JOIN Exam_Result B ON B.PID=A.ID
LEFT JOIN Dict_ReportItem C ON C.ID=B.RID
LEFT JOIN Dict_Sign D ON D.RID=C.ID AND (D.SignName=B.UnusualFlag OR D.SignName=B.TextResult)
LEFT JOIN Dict_Conclusion E ON E.ID=D.CID
WHERE A.EID={part.EID} AND A.ID={part.ID} AND B.ItemClass='检验' AND B.RID IS NOT NULL AND CID IS NOT NULL
AND NOT EXISTS(
SELECT 1 FROM Exam_Conclusion WHERE PID=A.ID AND FID=B.FID AND RID=B.RID AND CID=E.ID
)
");
return exits > 0;
}
/// <summary>
///保存结论
/// </summary>
/// <param name="pid"></param>
/// <param name="conclusions"></param>
public bool SaveConclusion(Int64 pid, List<ExamConclusion> conclusions)
{
Debug.WriteLine("[DEBUG] SaveConclusion,保存结论");
DAOHelp.ExecuteSql($@"DELETE Exam_Conclusion WHERE pid = {pid}");
conclusions.ForEach(item => { DAOHelp.Save(item); });
return true;
}
/// <summary>
/// 9.修改审核状态
/// </summary>
/// <param name="time"></param>
/// <param name="id"></param>
/// <param name="userName"></param>
/// <param name="userCode"></param>
/// <returns></returns>
public bool Review(DateTime? time, Int64 id, string userName, string userCode)
{
var sql = $@"UPDATE [Exam_Part] SET
[VerifyTime] = '{time}', [VerifyCode] = '{userCode}', [Verifier] = '{userName}'
WHERE [ID] = {id} ";
sql = sql.Replace("''", "NULL");
return DAOHelp.ExecuteSql(sql) > 0;
}
/// <summary>
/// 10.修改弃检状态
/// </summary>
/// <param name="time"></param>
/// <param name="id"></param>
/// <param name="userName"></param>
/// <param name="userCode"></param>
/// <returns></returns>
public bool GiveUp(DateTime? time, Int64 id, string userName, string userCode)
{
var sql =
$@"UPDATE Exam_Part SET [GiveUpTime] = '{time}', [GiveUpUser] = '{userCode}', [GiveUpCode] = '{userName}' WHERE ID = {id};
UPDATE Enrollment_FeeItem SET [GiveUpTime] = '{time}', [GiveUpUser] = '{userCode}', [GiveUpCode] = '{userName}'
WHERE EID = ( SELECT EID FROM Exam_Part WHERE ID = {id} ) AND DeptCode = ( SELECT DeptCode FROM Exam_Part WHERE ID = {id} )";
sql = sql.Replace("''", "NULL");
return DAOHelp.ExecuteSql(sql) > 0;
}
/// <summary>
/// 弃检-收费项目
/// </summary>
/// <param name="time"></param>
/// <param name="fid">收费项目id</param>
/// <param name="eid">体检号</param>
/// <param name="deptCode">科室Code</param>
/// <param name="userName"></param>
/// <param name="userCode"></param>
/// <returns></returns>
public bool GiveUpFeeItem(DateTime? time, Int64 fid, Int64 eid, string deptCode, string userName,
string userCode)
{
var sql = $@"
UPDATE Enrollment_FeeItem SET
[GiveUpTime] = '{time}',[GiveUpUser] = '{userName}',[GiveUpCode] = '{userCode}'
WHERE
[EID] = {eid} AND DeptCode = {deptCode} AND [FID] = {fid} ";
sql = sql.Replace("''", "NULL");
return DAOHelp.ExecuteSql(sql) > 0;
}
/// <summary>
/// 金域检验
/// </summary>
/// <param name="eid"></param>
/// <param name="deptCode"></param>
/// <returns></returns>
public List<ExamResult> GetJyLisResult(Int64 eid, string deptCode)
{
if (deptCode != "3002")
{
return new List<ExamResult>();
}
var data = DAOHelp.GetDataBySQL<ExamResult>($@"Exec sp_GetJyLisResult @EID = '{eid}'").ToList();
return data;
}
/// <summary>
/// LIS 检验报告获取
/// </summary>
/// <param name="eid"></param>
/// <returns></returns>
public List<ExamResult> GetLisReport(Int64 eid)
{
var data = DAOHelp.GetDataBySQL<ExamResult>($@"Exec sp_GetLisResult @EID = '{eid}'").ToList();
if (!(data.Count > 0)) return data;
for (var i = 0; i < data.Count; i++)
{
if (!string.IsNullOrEmpty(data[i].ReqItemName))
{
data[i].FeeItemName = $@"{data[i].FeeItemName}({data[i].ReqItemName})";
}
}
return data;
}
/// <summary>
/// 保存科室分检
/// </summary>
/// <param name="examPart"></param>
/// <param name="results"></param>
/// <returns></returns>
public bool SaveExamPart(ExamPart examPart, List<ExamResult> results)
{
Debug.WriteLine("[DEBUG] SaveExamPart,保存科室分检");
var isSave = examPart.ID > 0 ? examPart.Update() : examPart.Save();
if (!isSave) return false;
if (examPart.EID == null)
{
MessageBox.Show(@"体检号为空,无法保存检查结果,请刷新后重试!");
return false;
}
var id = DAOHelp
.GetDataBySQL<ExamPart>(
$@"SELECT * FROM Exam_Part Where EID={examPart.EID} AND DeptCode='{examPart.DeptCode}'")
.FirstOrDefault()?.ID ?? 0;
if (id == 0) return false;
DAOHelp.ExecuteSql($"DELETE Exam_Result WHERE PID ={id} ");
results.ForEach(item =>
{
if (item.GiveUpTime != null || examPart.GiveUpTime != null) return;
item.PID = id;
if (string.IsNullOrEmpty(item.TextResult) && !string.IsNullOrEmpty(item.Description) &&
item.ItemClass == "检查")
item.TextResult = item.Description;
item.Save();
});
return true;
}
public List<Report> GetPacsRptList(long eid)
{
var reportList = DAOHelp.GetDataBySQL<Report>($@"
SELECT
A.EID,
A.FeeItemName,
B.ID,
B.ReportNo ,
B.Class,
B.Class2,
B.Title,
B.Examer,
B.Reporter,
B.ReportTime,
B.Description,
B.Summary,
B.Positive,
B.InTime,
B.SpcimenName
FROM
Enrollment_FeeItem A
LEFT JOIN Report B ON A.EID = B.EID AND ( A.ID= B.ReportNo OR A.OldId = B.ReportNo)
LEFT JOIN Dict_FeeItem FeeItem ON A.FID= FeeItem.ID
WHERE
A.ItemClass = '检查' AND FeeItem.IsHide=0 AND A.eid = {eid}").ToList();
return reportList;
}
#endregion 方法
#region 体检结果查询
/// <summary>
/// 已审核科室项目
/// </summary>
/// <returns></returns>
public List<ExamResult> VerifyExamResult(long eid, string deptCode)
{
var list = DAOHelp.GetDataBySQL<ExamResult>(
$@"
BEGIN
SELECT DISTINCT B.*
FROM
Exam_Part A
LEFT JOIN Exam_Result B ON A.ID = B.PID
LEFT JOIN Enrollment_FeeItem C ON B.FID=C.FID
WHERE
A.VerifyTime IS NOT NULL AND A.GiveUpTime IS NULL AND C.GiveUpTime IS NULL
AND A.EID = {eid} AND A.DeptCode = {deptCode}
ORDER BY FID,RID
END ");
var data = new List<ExamResult>();
foreach (var item in list.GroupBy(g => g.RID))
{
var add = item.FirstOrDefault();
if (item.Count() > 1 && add?.RID != null)
{
add.TextResult = string.Join(",", item.Select(s => s.TextResult).ToList());
data.Add(add);
continue;
}
data.AddRange(item);
}
var giveUp = GiveUpExamResult(eid, deptCode);
data = data.Union(giveUp).Distinct().ToList();
return data;
}
/// <summary>
/// 未审核科室项目
/// </summary>
/// <param name="eid"></param>
/// <param name="deptCode"></param>
/// <returns></returns>
public List<ExamResult> NotVerifyExamResult(long eid, string deptCode)
{
Debug.WriteLine("[DEBUG] NotVerifyExamResult,未审核科室项目");
var giveUp = GiveUpExamResult(eid, deptCode);
var general = GeneralExamResult(eid, deptCode);
var lis = deptCode== "3001" ? LisExamResult(eid, deptCode):new List<ExamResult>();
var jyLis = GetJyLisResult(eid, deptCode);
var pacs = PacsExamResult(eid, deptCode) ;
var data = giveUp.Union(general).ToList()
.Union(lis).ToList()
.Union(jyLis).ToList()
.Union(pacs).ToList()
.Distinct().ToList();
// data.RemoveAll(p => p.FID == null);
return data.Distinct().OrderBy(o => o.FID).ThenBy(t => t.RID).ToList();
}
/// <summary>
/// 科室弃检项目
/// </summary>
/// <returns></returns>
public List<ExamResult> GiveUpExamResult(long eid, string deptCode)
{
return DAOHelp.GetDataBySQL<ExamResult>(
$@"
BEGIN
SELECT DISTINCT
ID = NULL, B.ID AS PID, DID = NULL, Class = NULL, SID = NULL, A.DeptName, A.FID, A.FeeItemName, RID = NULL, RptItemName = NULL, TextResult = '弃检',
Result = NULL, Unit = NULL, Range = NULL, UnusualFlag = NULL, ItemClass = NULL, RptItemCode = NULL, Checker = NULL, Reporter = NULL, ReportTime = NULL,A.GiveUpTime
FROM
Enrollment_FeeItem A
LEFT JOIN Exam_Part B ON A.DeptCode= B.DeptCode AND A.EID= B.EID
WHERE
( A.GiveUpTime IS NOT NULL OR B.GiveUpTime IS NOT NULL )
AND A.EID={eid} AND A.DeptCode={deptCode}
END");
}
/// <summary>
/// 普通项目-已发送-未审核-未弃检
/// </summary>
/// <returns></returns>
public List<ExamResult> GeneralExamResult(long eid, string deptCode)
{
var ism = DAOHelp
.GetDataBySQL<ExamResultIsm>($"SELECT top 1 * FROM Exam_ResultIsm WHERE eid={eid} ORDER BY ID DESC")
.FirstOrDefault();
var data = DAOHelp.GetDataBySQL<ExamResult>(
$@"BEGIN SELECT DISTINCT
D.ID, C.ID as PID, A.FID, B.ID AS RID, D.SID,
A.FeeItemName, B.RptItemCode, B.RptItemName, B.ValueFormat, B.SignFormat,
CASE WHEN D.TextResult IS NOT NULL THEN D.TextResult ELSE B.DefaultValue END AS TextResult,
D.Result, B.Unit, D.RANGE, D.UnusualFlag, D.Reporter, D.ReportTime, D.Checker,
B.Seq AS SeqReport, E.Seq AS SeqSign, A.ItemClass, COALESCE ( A.GiveUpTime, C.GiveUpTime ) AS GiveUpTime,
CAST( CASE WHEN ISNULL( bb.CountNum, 0 ) > 0 THEN 1 ELSE 0 END AS bit ) AS IsSelection
FROM
Enrollment_FeeItem A
LEFT JOIN Dict_ReportItem B ON B.FID = A.FID
LEFT JOIN Exam_Part C ON A.EID = C.EID AND A.DeptCode = C.DeptCode and a.DeptName=c.DeptName
LEFT JOIN Exam_Result D ON D.PID = C.ID AND D.RID = B.ID
LEFT JOIN Dict_Sign E ON D.SID = E.ID
LEFT JOIN ( SELECT RID, Count( * ) AS CountNum FROM Dict_Sign GROUP BY RID ) bb ON B.ID = bb.RID
LEFT JOIN Dict_FeeItem FeeItem ON A.FID= FeeItem.ID
WHERE
a.isSend=1 AND A.ItemClass = '普通' AND A.GiveUpTime IS NULL AND FeeItem.IsHide=0
AND A.EID = {eid} AND A.DeptCode = '{deptCode}'
ORDER BY B.Seq, E.Seq END ");
if (data.Any(p => p?.FeeItemName?.Contains("心电图") == true))
{
var xdResult = DAOHelp
.GetDataBySQL<ExamResult>(
$"select top 1 result as TextResult from Report_GSEXD where PatientNo={eid}")?.FirstOrDefault()
?.TextResult;
var item = data.FirstOrDefault(p => p.FeeItemName.Contains("心电图"));
if (string.IsNullOrEmpty(item?.TextResult))
{
var i = data.IndexOf(item);
data[i].TextResult = xdResult ?? "";
}
}
if (ism != null)
{
if (data.Any(p => p.RptItemName == "身高"))
{
var item = data.FirstOrDefault(p => p.RptItemName == "身高");
if (string.IsNullOrEmpty(item.TextResult))
{
var i = data.IndexOf(item);
data[i].TextResult = ism.Height;
}
}
if (data.Any(p => p.RptItemName == "体重"))
{
var weight = data.FirstOrDefault(p => p.RptItemName == "体重");
if (string.IsNullOrEmpty(weight.TextResult))
weight.TextResult = ism.Weight;
}
if (data.Any(p => p.RptItemName == "血压"))
{
var item = data.FirstOrDefault(p => p.RptItemName == "血压");
if (string.IsNullOrEmpty(item.TextResult))
item.TextResult = $"{ism.Systolic}/{ism.Diastolic}";
}
if (data.Any(p => p.RptItemName == "脉搏"))
{
var mb = data.FirstOrDefault(p => p.RptItemName == "脉搏");
if (string.IsNullOrEmpty(mb.TextResult))
mb.TextResult = ism.PulseRate;
}
if (data.Any(p => p.RptItemName == "体重指数"))
{
var tzzs = data.FirstOrDefault(p => p.RptItemName == "体重指数");
if (string.IsNullOrEmpty(tzzs.TextResult))
{
if (!string.IsNullOrEmpty(tzzs.ValueFormat))
{
var expr = new NCalc.Expression(
$"Round((10000 *{ism.Weight} / ({ism.Height} *{ism.Height})), 1)");
var result = expr.Evaluate().ToString();
tzzs.TextResult = result;
if (decimal.TryParse(result, out var resultDecimal))
{
tzzs.Result = resultDecimal;
}
}
// 体征词表达式 获取体征词
if (!string.IsNullOrEmpty(tzzs.SignFormat))
{
var signId = CalculateSign(tzzs.SignFormat, tzzs.TextResult);
var sign = Global._lstSign.FirstOrDefault(p => p.ID == signId);
if (sign != null)
{
tzzs.TextResult = $@"{sign.SignName}({tzzs.TextResult})";
tzzs.SID = sign.ID;
}
}
}
}
}
return data;
}
/// <summary>
/// 检验项目-已发送-未弃检
/// </summary>
/// <returns></returns>
public List<ExamResult> LisExamResult(long eid, string deptCode)
{
var lisResult = DAOHelp.GetDataBySQL<ExamResult>($@"Exec sp_GetLisResult @EID = '{eid}'").ToList();
return lisResult;
}
/// <summary>
/// 检查项目-已发送-未弃检
/// </summary>
/// <returns></returns>
public List<ExamResult> PacsExamResult(long eid, string deptCode)
{
return DAOHelp.GetDataBySQL<ExamResult>($@"Exec sp_GetPacsResult @EID = {eid},@DeptCode = '{deptCode}'");
}
#endregion 体检结果查询
/// <summary>
/// 体征词计算
/// </summary>
/// <param name="expression"></param>
/// <param name="examResult"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public long CalculateSign(string expression, string examResult, Dictionary<string, string> parameter = null)
{
if (string.IsNullOrEmpty(examResult) || string.IsNullOrEmpty(expression)) return 0;
var expr = new NCalc.Expression(expression);
expr.Parameters["value"] = examResult;
parameter?.ForEach(p => { expr.Parameters[p.Key] = p.Value; });
var calculateResult = expr.Evaluate().ToString();
return Int64.TryParse(calculateResult, out var id) ? id : 0;
}
/// <summary>
/// 检查结果计算
/// </summary>
/// <param name="exp"></param>
/// <param name="parameter">参数:Sex</param>
/// <param name="results"></param>
/// <returns></returns>
public string CalculateResult(string exp, List<ExamResult> results, Dictionary<string, string> parameter = null)
{
var hasValue = true;
// 替换[n] 为result(rid=n).Result
var expression = Regex.Replace(exp, @"\[(\d+)\]", m =>
{
var rid = int.Parse(m.Groups[1].Value);
var value = results.FirstOrDefault(p => p.RID == rid)?.TextResult;
hasValue = !string.IsNullOrEmpty(value);
if (decimal.TryParse(value, out var resultValue))
{
return $@"{resultValue:F2}";
}
hasValue = false;
return "";
});
if (!hasValue) return "";
var expr = new NCalc.Expression(expression);
parameter?.ForEach(p => { expr.Parameters[p.Key] = p.Value; });
var result = expr.Evaluate();
return result.ToString();
}
// 其他报告和心电图报告
public List<ReportExt> GetReportExtList(long eid)
{
var list = new ReportExtModel().List(eid);
var xd = DAOHelp.GetDataBySQL<ReportExt>(
$@"select ID, CONVERT(bigint, PatientNo) AS EID, REPORTTIME AS InTime, RESULT AS Description, Class = '十二通道心电图检查',ReportData AS ReportImg from Report_GSEXD where PatientNo ={eid} ");
list = list.Union(xd).ToList();
return list;
}
/// <summary>
/// 将已经发送的项目生成对应科室分检记录
/// </summary>
/// <param name="eid"></param>
public static void InsertExamPart(long eid)
{
DAOHelp.ExecuteSql($@"INSERT INTO[Exam_Part]([EID], [DeptName], [DeptCode])
SELECT DISTINCT B.EID, [DeptName], [DeptCode] FROM Enrollment_Patient A
LEFT JOIN Enrollment_FeeItem B ON A.ID= B.EID
WHERE A.ID= {eid} AND a.isSend=1
AND NOT EXISTS (SELECT 1 FROM Exam_Part part WHERE part.EID = b.EID AND part.DeptCode = b.DeptCode)");
}
}
}