using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; using System.Data; namespace BatchService.Framework.Utility { public class LISHelper { public enum SampleQueryActionType { SampleInfo, ResultInfo, ValidatedReulstInfo_TB_LABRESULT, ValidatedReulstInfo_TB_LABRESULTXJ, ValidatedResultInfo_TB_CURRENT_ITEM_RESULT, ValidatedResultInfo_BACT, SampleInfoAndResultInfo, SampleFee, /// /// 未发送给HIS的标本 /// UnSendSampleInfo, /// /// 取消审核的标本 /// CanceledSampleInfo, TB_INSTRUMENT_LIST, } public enum ItemQueryActionType { TB_ITEM_PROPERTY, GetCalcuatedItemProperty, } public enum DicType { TB_INSTRUMENT_LIST, TB_OPERATOR, TB_CODE_INFO, } public enum UpdateActionType { Sending, Sended, SendError, } public static string EncryptString(string sourceText) { string is_out = ""; long il_x, il_y, il_len, il_bit; il_len = sourceText.Length; il_x = 0; il_y = 0; is_out = ""; for (var i = 0; i < il_len; i++) { il_bit = (int)((char)sourceText.Substring(i, 1)[0]); il_y = ((il_bit * 13) % 256) + il_x; is_out = is_out + (char)(il_y); il_x = (il_bit * 13) / 256; } is_out = is_out + (char)(il_x); sourceText = is_out; il_len = sourceText.Length; il_x = 0; il_y = 0; is_out = ""; for (var i = 0; i < il_len; i++) { il_bit = (int)((char)sourceText.Substring(i, 1)[0]); il_y = (il_bit / 16) + 64; is_out = is_out + (char)(il_y); il_y = (il_bit % 16) + 64; is_out = is_out + (char)(il_y); } if (is_out == "@@") { is_out = ""; } return is_out; } public string GetAlarmTestItem(string lisconnString, string sampleDate, string instrument, string sampleno, string itemCode) { string sql = string.Format("SELECT a.* FROM TB_REPORTLIMIT a WHERE a.sample_date='{0}' and a.instrument='{1}' and a.sample_no='{2}' and a.item_code='{3}'", sampleDate, instrument, sampleno, itemCode); var ds = SqlHelper.ExecuteDataset(lisconnString, CommandType.Text, sql); return JsonConvert.SerializeObject(ds.Tables[0], new DataTableConverter()); } public string GetAlarmSamplesBySampleDate(string lisConnString, string sampleDate, string sendflag) { string sql = string.Format("SELECT a.*,b.FIRST_VALIDATE_DATE,b.PATIENT_TYPE,b.VALIDATE_DOCTOR,rtrim(c.code_info) as 'dept' FROM TB_REPORTLIMIT a " + " left join tb_current_sample_info b on a.sample_date=b.sample_date and a.sample_no=b.sample_no and a.instrument=b.instrument " + " left join tb_code_info c on b.department=c.code_name and code_kind='DP'" + " WHERE a.sample_date>='{0}'", sampleDate); if (sendflag == null) { sql += " and (a.sendflag is null or a.sendflag='9')"; } else { sql += string.Format(" and a.sendflag = '{0}'", sendflag); } sql += " ORDER BY a.sample_date,a.instrument, a.sample_no,a.item_code"; var ds = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql); return JsonConvert.SerializeObject(ds.Tables[0], new DataTableConverter()); } public void UpdateAlarmSampleState(string lisConnString, string sampledate, string instrument, string sampleno, string sendflag) { string sql = string.Format("update TB_REPORTLIMIT set sendflag='{0}' where sample_date='{1}' and instrument='{2}' and sample_no='{3}'", sendflag, sampledate, instrument, sampleno); SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, sql); } public string GetDicInfo(string lisConnString, DicType dicType, JObject paraJson) { string sql = ""; switch (dicType) { case DicType.TB_OPERATOR: sql = string.Format("SELECT OPERATOR_ID, OPERATE_NAME, VALIDATE_FLAG, PASSWORD, SHORTNAME, ROLE, " + "DEPARTMENT, REFRESH_FLAG, LAST_MODIFIED, updatetime FROM dbo.TB_OPERATOR"); break; case DicType.TB_INSTRUMENT_LIST: if (paraJson.Count == 0) { sql = string.Format("SELECT * FROM dbo.TB_INSTRUMENT_LIST"); } else { sql = string.Format("SELECT * FROM dbo.TB_INSTRUMENT_LIST where INSTRUMENT_CODE='{0}'", paraJson["Instrument"].ToString()); } break; case DicType.TB_CODE_INFO: sql = string.Format("SELECT * FROM TB_CODE_INFO where CODE_KIND='{0}' order by CODE_NAME", StringHelper.GetString(paraJson["CODE_KIND"])); break; } var dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; if (dt.Rows.Count == 0) { return ""; } return JsonConvert.SerializeObject(dt, new DataTableConverter()); } /// /// 执行LIS标本相关查询 /// /// LIS连接字符串 /// JSON参数对象,Instrument,SampleDate,SampleNo /// 返回JSON public string ExecuteSampleQueryAction(string lisConnString, SampleQueryActionType queryActionType, string instrument = "", string sampleDate = "", string sampleNo = "", int topNumber = 0) { string sql = ""; string temp = ""; switch (queryActionType) { case SampleQueryActionType.SampleInfo: sql = string.Format("SELECT * FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_INSTRUMENT_LIST b ON a.INSTRUMENT=b.INSTRUMENT_CODE" + " WHERE a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.SampleInfoAndResultInfo: sql = string.Format("SELECT * FROM TB_CURRENT_SAMPLE_INFO a INNER JOIN TB_CURRENT_ITEM_RESULT b " + " ON a.SAMPLE_DATE=b.SAMPLE_DATE AND a.INSTRUMENT=b.INSTRUMENT AND a.SAMPLE_NO=b.SAMPLE_NO" + " WHERE a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.ResultInfo: sql = string.Format("SELECT * FROM TB_CURRENT_ITEM_RESULT a " + "WHERE a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.ValidatedResultInfo_TB_CURRENT_ITEM_RESULT: sql = string.Format("SELECT * FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_CURRENT_ITEM_RESULT b ON a.SAMPLE_DATE=b.SAMPLE_DATE " + " INNER JOIN TB_ITEM_PROPERTY c ON b.INSTRUMENT=c.INSTRUMENT and b.ITEM_CODE=c.ITEM_CODE " + " AND a.INSTRUMENT=b.INSTRUMENT AND a.SAMPLE_NO=b.SAMPLE_NO " + " WHERE a.VALIDATE_FLAG='2' and a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' " + " AND a.SAMPLE_NO='{2}' and c.print_type='1' order by c.REPORT_SEQ", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.ValidatedReulstInfo_TB_LABRESULT: sql = string.Format("SELECT b.*,c.IS_COUNT,c.FORMULA FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_LABRESULT b ON a.SAMPLE_DATE=b.SAMPLE_DATE " + " AND a.INSTRUMENT=b.INSTRUMENT AND a.SAMPLE_NO=b.SAMPLE_NO " + " INNER JOIN TB_ITEM_PROPERTY c on b.instrument=c.INSTRUMENT and b.item_no=c.ITEM_CODE " + " WHERE left(a.instrument,3)<>'@#@' and a.VALIDATE_FLAG='2' and a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' " + " AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.ValidatedReulstInfo_TB_LABRESULTXJ: sql = string.Format("SELECT b.* FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_LABRESULTXJ b ON a.SAMPLE_DATE=b.SAMPLE_DATE " + " AND a.INSTRUMENT=b.INSTRUMENT AND a.SAMPLE_NO=b.SAMPLE_NO " + " WHERE a.VALIDATE_FLAG='2' and a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' " + " AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.SampleFee: sql = string.Format("SELECT a.* FROM TB_CURRENT_SAMPLE_FEE a " + " WHERE a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' AND a.SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo); break; case SampleQueryActionType.UnSendSampleInfo: if (topNumber > 0) { temp = " top " + topNumber; } sql = string.Format("select * from (SELECT {0} a.*,b.INSTRUMENT_KIND,b.INSTRUMENT_NAME FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_INSTRUMENT_LIST b ON a.INSTRUMENT=b.INSTRUMENT_CODE" + " WHERE 1=1 " + " AND a.VALIDATE_FLAG='2' AND (a.SendFlag IS NULL OR a.SendFlag=0) and " + " (a.BARCODE is not null and a.BARCODE<>'') and a.SAMPLE_DATE>=getdate()-30 order by a.sample_date desc,a.first_validate_date asc) aa " + "union all " + "select * from (SELECT {0} a.*,b.INSTRUMENT_KIND,b.INSTRUMENT_NAME FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_INSTRUMENT_LIST b ON a.INSTRUMENT=b.INSTRUMENT_CODE" + " WHERE 1=1 " + " AND a.VALIDATE_FLAG='2' AND a.SendFlag =99 and " + " (a.BARCODE is not null and a.BARCODE<>'') and a.SAMPLE_DATE>=getdate()-30 order by a.sample_date desc,a.first_validate_date asc) bb " + "union all " + "select * from (SELECT top 1 a.*,b.INSTRUMENT_KIND,b.INSTRUMENT_NAME FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_INSTRUMENT_LIST b ON a.INSTRUMENT=b.INSTRUMENT_CODE" + " WHERE 1=1 " + " AND a.VALIDATE_FLAG='2' AND a.SendFlag<0 and " + " (a.BARCODE is not null and a.BARCODE<>'') and a.SAMPLE_DATE>=getdate()-30 order by a.sample_date desc,a.sendtime asc) cc ", temp, sampleDate, DateTime.Today.AddDays(-3)); break; case SampleQueryActionType.CanceledSampleInfo: if (topNumber > 0) { temp = " top " + topNumber; } sql = string.Format("SELECT {0} a.*,b.INSTRUMENT_KIND,b.INSTRUMENT_NAME FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_INSTRUMENT_LIST b ON a.INSTRUMENT=b.INSTRUMENT_CODE" + " WHERE a.SAMPLE_DATE='{1}' " + " AND a.VALIDATE_FLAG='1' AND (a.SendFlag =-2) and " + " (a.ORDER_NO is not null and a.ORDER_NO<>'')", temp, sampleDate); break; case SampleQueryActionType.TB_INSTRUMENT_LIST: sql = string.Format("SELECT * from TB_INSTRUMENT_LIST a" + " WHERE a.INSTRUMENT_CODE='{0}'", instrument); break; case SampleQueryActionType.ValidatedResultInfo_BACT: sql = string.Format("SELECT c.TEST_METHOD as 'anti_testmethod', c.current_result as 'anti_result',c.addt_result as 'anti_addtresult', * FROM TB_CURRENT_SAMPLE_INFO a " + " INNER JOIN TB_BIO_CURRENT_BACT_RESULT b ON a.SAMPLE_DATE=b.SAMPLE_DATE AND a.INSTRUMENT=b.INSTRUMENT AND a.SAMPLE_NO=b.SAMPLE_NO " + " LEFT JOIN TB_BIO_CURRENT_ANTI_RESULT c ON b.SAMPLE_DATE=c.SAMPLE_DATE AND b.INSTRUMENT=c.INSTRUMENT AND b.SAMPLE_NO=c.SAMPLE_NO AND b.BACT_CODE=c.BACT_CODE" + " LEFT JOIN TB_BIO_ANTIBIOTICS_ITEM d ON c.INSTRUMENT=d.INSTRUMENT AND c.ANTI_CODE=d.ANTI_CODE" + " WHERE a.VALIDATE_FLAG='2' and a.SAMPLE_DATE='{0}' AND a.INSTRUMENT='{1}' " + " AND a.SAMPLE_NO='{2}' order by a.sample_date, a.instrument,a.sample_no,d.report_seq", sampleDate, instrument, sampleNo); break; } var dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; if (dt.Rows.Count == 0) { return ""; } return JsonConvert.SerializeObject(dt, new DataTableConverter()); } public int UpdateSentFlag(string lisConnString, UpdateActionType updateActionType, string instrument = "", string sampleDate = "", string sampleNo = "", string message = "") { string sql = ""; string temp = ""; message = message.Replace("'", ""); switch (updateActionType) { case UpdateActionType.Sending: sql = string.Format("update TB_CURRENT_SAMPLE_INFO set sendflag=1,sendtime='{3}',sendMessage='{4}'" + " WHERE SAMPLE_DATE='{0}' AND INSTRUMENT='{1}' AND SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message); break; case UpdateActionType.Sended: sql = string.Format("update TB_CURRENT_SAMPLE_INFO set sendflag=2,sendtime='{3}',sendMessage='{4}'" + " WHERE SAMPLE_DATE='{0}' AND INSTRUMENT='{1}' AND SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message); break; case UpdateActionType.SendError: sql = string.Format("update TB_CURRENT_SAMPLE_INFO set sendflag=-1,sendtime='{3}',sendMessage='{4}'" + " WHERE SAMPLE_DATE='{0}' AND INSTRUMENT='{1}' AND SAMPLE_NO='{2}'", sampleDate, instrument, sampleNo, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message); break; } return SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, sql); } public string ExecuteItemQueryAction(string lisConnString, ItemQueryActionType itemActionType, string instrument = "", string itemCode = "", string result = "", string gender = "", string age = "", string sampletype = "", string diagnose = "") { string json = ""; string sql = ""; switch (itemActionType) { case ItemQueryActionType.GetCalcuatedItemProperty: JObject itemProperty = new JObject(); itemProperty.Add("ItemCode", ""); itemProperty.Add("ItemName", ""); itemProperty.Add("Ref", ""); itemProperty.Add("Unit", ""); itemProperty.Add("RefLowest", ""); itemProperty.Add("RefHighest", ""); itemProperty.Add("ResultFlag", "M"); sql = string.Format("SELECT * FROM TB_ITEM_PROPERTY a " + " WHERE a.INSTRUMENT='{0}' AND a.ITEM_CODE='{1}'", instrument, itemCode); var dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; DataRow row = dt.Rows[0]; itemProperty["ItemCode"] = StringHelper.GetString(row["ITEM_CODE"]); itemProperty["ItemName"] = StringHelper.GetString(row["ITEM_NAME"]); itemProperty["Ref"] = StringHelper.GetString(row["REPORT_LIMIT"]); itemProperty["Unit"] = StringHelper.GetString(row["UNIT"]); itemProperty["RefLowest"] = StringHelper.GetString(row["NORMAL_LOW"], "0"); itemProperty["RefHighest"] = StringHelper.GetString(row["NORMAL_HIGH"], "0"); if (StringHelper.IsNumeric(result) && !string.IsNullOrEmpty(StringHelper.GetString(row["REPORT_LIMIT"]))) { double db_result = 0; double db_high = 0; double db_low = 0; double.TryParse(result, out db_result); double.TryParse(StringHelper.GetString(itemProperty["RefLowest"]), out db_low); double.TryParse(StringHelper.GetString(itemProperty["RefHighest"]), out db_high); LogHelper.Debug(string.Format("ItemCode:{0},ItemName:{1},Result:{2},Ref:{3},Low:{4},High:{5}", StringHelper.GetString(row["ITEM_CODE"]), StringHelper.GetString(row["ITEM_NAME"]), db_result, StringHelper.GetString(row["REPORT_LIMIT"]), db_low, db_high)); if (db_high >= db_low) { if (db_result > db_high) { itemProperty["ResultFlag"] = "H"; } else if (db_result < db_low) { itemProperty["ResultFlag"] = "L"; } } } sql = ""; string sql_temp = string.Format("SELECT * FROM TB_ITEM_LIMITS where 1=1 " + " and INSTRUMENT='{0}' and ITEM_CODE='{1}' ", instrument, itemCode); if (StringHelper.GetString(row["IS_GENDER"]) == "Y" && !string.IsNullOrEmpty(gender)) { sql += string.Format(" and GENDER='{0}'", gender); } if (StringHelper.GetString(row["IS_AGE"]) == "Y" && !string.IsNullOrEmpty(age)) { sql += string.Format(" and (AGE_LOW<={0} and AGE_HIGH>={0}) ", age); } if (StringHelper.GetString(row["IS_SAMPLETYPE"]) == "Y" && !string.IsNullOrEmpty(sampletype)) { sql += string.Format(" and SAMPLE_TYPE='{0}'", sampletype); } if (StringHelper.GetString(row["IS_DISGNOSIS"]) == "Y" && !string.IsNullOrEmpty(diagnose)) { sql += string.Format(" and DISGNOSIS='{0}'", diagnose); } if (!string.IsNullOrEmpty(sql)) { sql = sql_temp + sql; LogHelper.Debug("取参考值SQL:" + sql); var dt_limit = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; if (dt_limit.Rows.Count > 0) { var row_limit = dt_limit.Rows[0]; itemProperty["Ref"] = StringHelper.GetString(row_limit["LIMIT_VALUE"]); itemProperty["RefLowest"] = StringHelper.GetString(row_limit["LIMIT_LOW"], "0"); itemProperty["RefHighest"] = StringHelper.GetString(row_limit["LIMIT_HIGH"], "0"); double db_result = 0; double db_limit_high = 0; double db_limit_low = 0; double.TryParse(result, out db_result); double.TryParse(itemProperty["RefLowest"].ToString(), out db_limit_low); double.TryParse(itemProperty["RefHighest"].ToString(), out db_limit_high); itemProperty["ResultFlag"] = "M"; if (db_limit_high >= db_limit_low) { if (db_result > db_limit_high) { itemProperty["ResultFlag"] = "H"; } else if (db_result < db_limit_low) { itemProperty["ResultFlag"] = "L"; } } LogHelper.Debug(string.Format("ItemCode:{0},ItemName:{1},Result:{2},Ref:{3},Low:{4},High:{5},flag:{6}", row["ITEM_CODE"].ToString(), row["ITEM_NAME"].ToString(), db_result, row["REPORT_LIMIT"].ToString(), db_limit_low, db_limit_high, itemProperty["ResultFlag"].ToString())); } } json = JsonConvert.SerializeObject(itemProperty); break; case ItemQueryActionType.TB_ITEM_PROPERTY: sql = string.Format("SELECT * FROM TB_ITEM_PROPERTY a " + " WHERE a.INSTRUMENT='{0}' AND a.ITEM_CODE='{1}'", instrument, itemCode); dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; json = JsonConvert.SerializeObject(dt, new DataTableConverter()); break; } return json; } public string GetTestItemesByFeeItemCode(string lisConnString, string instrument = "", string FeeItemCode = "") { var sql = string.Format("SELECT * FROM TB_FEEITEM_VS_REPORTITEM a " + " WHERE a.INSTRUMENT='{0}' AND a.FEEITEM_NO='{1}'", instrument, FeeItemCode); var dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; if (dt.Rows.Count == 0) { return ""; } return JsonConvert.SerializeObject(dt, new DataTableConverter()); } public void TransferResultToLABRESULT(string lisConnString, string instrument = "", string sampleDate = "", string sampleNo = "") { var jsonInstrumentInfo = ExecuteSampleQueryAction(lisConnString, SampleQueryActionType.TB_INSTRUMENT_LIST, instrument); var jsonInstrumentInfoObj = JsonConvert.DeserializeObject(jsonInstrumentInfo) as JArray; if (StringHelper.GetString(jsonInstrumentInfoObj[0]["INSTRUMENT_KIND"]).ToUpper() == "XJ") { #region 细菌结果 string deleteSql = string.Format("delete FROM TB_LABRESULTXJ " + " WHERE instrument='{0}' AND sample_no='{1}' AND sample_date='{2}'", instrument, sampleNo, sampleDate); SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, deleteSql); var jsonBactResults = ExecuteSampleQueryAction(lisConnString, SampleQueryActionType.ValidatedResultInfo_BACT, instrument, sampleDate, sampleNo); var jsonBactResultsObj = JsonConvert.DeserializeObject(jsonBactResults) as JArray; var index = 1; foreach (var jsonBactResult in jsonBactResultsObj) { string sql = string.Format("SELECT COUNT(*) FROM TB_LABRESULTXJ a " + " WHERE a.instrument='{0}' AND a.sample_no='{1}' AND a.sample_date='{2}' " + " AND a.print_order='{3}'", instrument, sampleNo, sampleDate, index); int rowCount = (int)SqlHelper.ExecuteScalar(lisConnString, CommandType.Text, sql); if (rowCount > 0) { continue; } sql = string.Format("INSERT INTO TB_LABRESULTXJ " + " (instrument, sample_no, sample_date, print_order, bact_code, bact_name, " + " anti_code, anti_name, bact_result, resultkind, anti_Result, addt_result, " + " test_method, result_date_time, feeitem_no, feeitem_name, order_no, reqno, " + " bact_addtresult) " + " VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', " + " '{6}', '{7}', '{8}', '{9}', '{10}', '{11}'," + " '{12}', '{13}', '{14}', '{15}', '{16}', '{17}'" + " , '{18}')", jsonBactResult["INSTRUMENT"].ToString(), jsonBactResult["SAMPLE_NO"].ToString(), jsonBactResult["SAMPLE_DATE"].ToString(), index, StringHelper.GetString(jsonBactResult["BACT_CODE"]), StringHelper.GetString(jsonBactResult["BACT_NAME"]), StringHelper.GetString(jsonBactResult["ANTI_CODE"]), StringHelper.GetString(jsonBactResult["ANTI_NAME"]), StringHelper.GetString(jsonBactResult["CURRENT_RESULT"]), StringHelper.GetString(jsonBactResult["RESULT_KIND"]), StringHelper.GetString(jsonBactResult["anti_result"]), StringHelper.GetString(jsonBactResult["anti_addtresult"]), StringHelper.GetString(jsonBactResult["anti_testmethod"]), StringHelper.GetString(jsonBactResult["FIRST_VALIDATE_DATE"]), "", "", "", "", StringHelper.GetString(jsonBactResult["ADDT_RESULT"])); SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, sql); index++; } #endregion } else { #region 普通标本结果 string deleteSql = string.Format("delete FROM TB_LABRESULT " + " WHERE instrument='{0}' AND sample_no='{1}' AND sample_date='{2}'", instrument, sampleNo, sampleDate); SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, deleteSql); var json = ExecuteSampleQueryAction(lisConnString, SampleQueryActionType.ValidatedResultInfo_TB_CURRENT_ITEM_RESULT, instrument, sampleDate, sampleNo); if (json.Length == 0) return; var results = JsonConvert.DeserializeObject(json) as JArray; foreach (JObject result in results) { string sql = string.Format("SELECT COUNT(*) FROM TB_LABRESULT a " + " WHERE a.instrument='{0}' AND a.sample_no='{1}' AND a.sample_date='{2}' " + " AND a.item_no='{3}'", instrument, sampleNo, sampleDate, result["ITEM_CODE"].ToString()); int rowCount = (int)SqlHelper.ExecuteScalar(lisConnString, CommandType.Text, sql); if (rowCount > 0) { continue; } string jsonItemProperty = ExecuteItemQueryAction(lisConnString, ItemQueryActionType.GetCalcuatedItemProperty, instrument, result["ITEM_CODE"].ToString(), result["CURRENT_RESULT"].ToString(), result["GENDER"].ToString(), result["AGE"].ToString(), result["SAMPLE_TYPE"].ToString(), result["DIAGNOSE"].ToString()); var jsonObjItemProperty = JsonConvert.DeserializeObject(jsonItemProperty) as JObject; sql = string.Format("INSERT INTO TB_LABRESULT " + " (instrument, sample_no, sample_date, item_no, " + " item_name, print_order, result_date_time, result, unit, resultflag, ref, " + " feeitem_no, feeitem_name, order_no, reqno) " + " VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', {5}, '{6}', '{7}', '{8}', '{9}'" + " , '{10}', '{11}', '{12}', '{13}', '{14}')", result["INSTRUMENT"].ToString(), result["SAMPLE_NO"].ToString(), result["SAMPLE_DATE"].ToString(), StringHelper.GetString(result["ITEM_CODE"]), StringHelper.GetString(result["ITEM_NAME"]), StringHelper.GetString(result["REPORT_SEQ"]), StringHelper.GetString(result["FIRST_VALIDATE_DATE"]), StringHelper.GetString(result["CURRENT_RESULT"]), StringHelper.GetString(jsonObjItemProperty["Unit"]), StringHelper.GetString(jsonObjItemProperty["ResultFlag"]), StringHelper.GetString(jsonObjItemProperty["Ref"]), "", "", "", ""); SqlHelper.ExecuteNonQuery(lisConnString, CommandType.Text, sql); } #endregion } } public string ExecuteQueySQL(string lisConnString, string sql) { var dt = SqlHelper.ExecuteDataset(lisConnString, CommandType.Text, sql).Tables[0]; if (dt.Rows.Count == 0) { return ""; } return JsonConvert.SerializeObject(dt, new DataTableConverter()); } public string getOperatorCodeByName(string lisConnString, string name) { var sql = string.Format("select a.operator_id from tb_operator a where a.OPERATE_NAME='{0}'", name); return StringHelper.GetString(SqlHelper.ExecuteScalar(lisConnString, CommandType.Text, sql)); } } }