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
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)");
|
|
}
|
|
}
|
|
} |