/******************************************************************************
* 文件名称: DataImoport.cs
* 文件说明: 医保目录数据导入
* 当前版本: V1.0
* 创建日期: 2022-04-12
*
* 2020-04-12: 增加GetDrugsJsonByTxt方法
* 2020-04-12: 增加GetMedicalServiceJsonByTxt方法
* 2020-04-12: 增加 GetMaterialJsonByTxt 方法
* 2020-04-14: 增加 GetDiagnoseJsonByTxt 方法
* 2020-04-14: 增加 GetOperationJsonByTxt 方法
* 2020-04-14: 增加 applyDataToIris 方法
* 2020-04-14: 增加 importDataToIrisByTxt 方法
* 2020-04-14: 增加 GetOperationJsonByTxt 方法
* 2020-04-14: 增加 GetOperationJsonByTxt 方法
* 2020-04-14: 增加 GetOperationJsonByTxt 方法
* 2020-04-14: 增加 GetOperationJsonByTxt 方法
******************************************************************************/
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PTMedicalInsurance.Variables;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Business;
using System.Data;
using System.Text;
using System.IO.Compression;
using System.Linq;
using System.IO;
namespace PTMedicalInsurance
{
class DataImoport
{
MIIrisServices mis = new MIIrisServices();
InvokeHelper invoker = new InvokeHelper();
///
/// 读取TXT后,Array中的空值会返回NULL,将其转换为"".应有其他方式处理,后面再优化
/// 明天试试Convert.ToString(a)
///
///
///
private string convertArrayNull(string arrayValue)
{
string returnValue = string.Empty;
if (arrayValue == "null")
{
returnValue = "";
}
else
{
returnValue = arrayValue;
}
return returnValue;
}
///
/// 从TXT文件中获取药品数据,并组装成JSON
///
///
///
private JObject GetDrugsJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[2]; //对照的医保药品编码
jsonTemp.Name = arr[3]; //对照的医保药品名称
jsonTemp.HisType = "1";
jsonTemp.HisTypeName = "药品";
jsonTemp.LocateCode = "";
jsonTemp.LocateName = "";
//jsonTemp.DosageFormCode = arr[9];
jsonTemp.DosageFormName = arr[4]; //剂型
jsonTemp.CategoryCode = arr[9]; //收费类型
//jsonTemp.CategoryName = arr[12];
jsonTemp.Specification = arr[5]; //规格
jsonTemp.SpecificationCode = arr[5]; //规格
jsonTemp.UnitOfPackag = arr[6]; //计量单位
jsonTemp.UnitOfValuation = arr[6]; //计量单位
//jsonTemp.StartDate = convertArrayNull(arr[36]);
//jsonTemp.EndDate = convertArrayNull(arr[37]);
//jsonTemp.PinyinSearchCode = arr[50];
//jsonTemp.Instructions = arr[35];
jsonTemp.ExceptContent = arr[10]; //备注
jsonTemp.Connotation = "";
jsonTemp.ValidFlag = "1";
jsonTemp.Note = arr[10]; //备注
//jsonTemp.VersionNO = arr[82];
//jsonTemp.VersionName = arr[83];
jsonTemp.UseFlag = "1";
//jsonTemp.DrugSafetyStandardCode = arr[8]; //
//jsonTemp.ApprovalNO = arr[61];
//jsonTemp.SpecialFlag = convertArrayNull(arr[11]);
//jsonTemp.LimitFlag = convertArrayNull(arr[57]);
//jsonTemp.LimitRange = arr[56];
//jsonTemp.UniqueRecordNO = arr[79];
//jsonTemp.Manufacturers = arr[53];
//jsonTemp.Company = arr[85];
jsonTemp.CeilingPrice = arr[7];
jsonTemp.NationalCode = arr[2]; //国家项目代码
jsonTemp.NationalName = arr[3]; //国家项目代码
jsonTemp.ChargeItemLevel = arr[8]; //收费等级
if (jsonTemp.ChargeItemLevel == "1")
{
jsonTemp.ChargeItemLevelName = "甲类";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "2")
{
jsonTemp.ChargeItemLevelName = "乙类";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "3")
{
jsonTemp.ChargeItemLevelName = "丙类";
jsonTemp.SelfPercent = "100";
}
else
{
jsonTemp.ChargeItemLevel = "4";
jsonTemp.SelfPercent = "100";
jsonTemp.ChargeItemLevelName = "未知";
}
return jsonTemp;
}
///
/// 从TXT文件中获取诊疗数据,并组装成JSON
///
///
///
private JObject GetMedicalServiceJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[2];
jsonTemp.Name = arr[3];
jsonTemp.HisType = "2";
jsonTemp.HisTypeName = "诊疗";
jsonTemp.LocateCode = "";
jsonTemp.LocateName = "";
//jsonTemp.DosageFormCode = arr[9];
//jsonTemp.DosageFormName = arr[10];
jsonTemp.CategoryCode = arr[7];
jsonTemp.CategoryName = arr[7];
jsonTemp.Specification = "";
jsonTemp.SpecificationCode = "";
jsonTemp.UnitOfPackag = arr[4];
jsonTemp.UnitOfValuation = arr[4];
//jsonTemp.StartDate = convertArrayNull(arr[11]);
//jsonTemp.EndDate = convertArrayNull(arr[12]);
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[9]);
//jsonTemp.Instructions = arr[3];
jsonTemp.ExceptContent = ""; //arr[8];
//jsonTemp.Connotation = arr[5];
jsonTemp.ValidFlag = "1";
jsonTemp.Note = ""; //arr[7];
//jsonTemp.VersionNO = arr[14];
//jsonTemp.VersionName = arr[15];
jsonTemp.UseFlag = "1";
jsonTemp.DrugSafetyStandardCode = "";
jsonTemp.ApprovalNO = "";
jsonTemp.SpecialFlag = "";
jsonTemp.LimitFlag = "";
jsonTemp.LimitRange = "";
//jsonTemp.UniqueRecordNO = arr[13];
jsonTemp.CeilingPrice = arr[5];
jsonTemp.NationalCode = arr[9]; //国家项目代码
jsonTemp.NationalName = arr[3]; //国家项目代码
jsonTemp.ChargeItemLevel = arr[6];
if (jsonTemp.ChargeItemLevel == "1")
{
jsonTemp.ChargeItemLevelName = "甲类";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "2")
{
jsonTemp.ChargeItemLevelName = "乙类";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "3")
{
jsonTemp.ChargeItemLevelName = "丙类";
jsonTemp.SelfPercent = "100";
}
else
{
jsonTemp.ChargeItemLevel = "4";
jsonTemp.SelfPercent = "100";
jsonTemp.ChargeItemLevelName = "未知";
}
return jsonTemp;
}
///
/// 从TXT文件中获取材料数据,并组装成JSON
///
///
///
private JObject GetMaterialJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[2];
jsonTemp.Name = arr[3];
jsonTemp.HisType = "3";
jsonTemp.HisTypeName = "材料";
jsonTemp.LocateCode = "";
jsonTemp.LocateName = "";
jsonTemp.DosageFormCode = "";
jsonTemp.DosageFormName = "";
jsonTemp.CategoryCode = arr[7];
jsonTemp.CategoryName = arr[7];
//jsonTemp.Specification = arr[7];
//jsonTemp.SpecificationCode = arr[6];
jsonTemp.UnitOfPackag = arr[4];
//jsonTemp.UnitOfValuation = convertArrayNull(arr[35]);
//jsonTemp.StartDate = convertArrayNull(arr[46]);
//jsonTemp.EndDate = convertArrayNull(arr[47]);
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[5]);
//jsonTemp.Instructions = arr[27];
jsonTemp.ExceptContent = arr[8]; //备注
jsonTemp.Connotation = "";
jsonTemp.ValidFlag = "1";
jsonTemp.Note = arr[8];
//jsonTemp.VersionNO = arr[69];
//jsonTemp.VersionName = arr[70];
jsonTemp.UseFlag = "1";
jsonTemp.DrugSafetyStandardCode = "";
//jsonTemp.ApprovalNO = arr[50]; //注册备案号
jsonTemp.SpecialFlag = "";
//jsonTemp.LimitFlag = convertArrayNull(arr[33]);
//jsonTemp.LimitRange = arr[34];
//jsonTemp.UniqueRecordNO = arr[68];
//jsonTemp.Manufacturers = arr[59];
jsonTemp.CeilingPrice = arr[5];
jsonTemp.NationalCode = arr[2]; //国家项目代码
jsonTemp.NationalName = arr[3]; //国家项目代码
jsonTemp.ChargeItemLevel = arr[6];
if (jsonTemp.ChargeItemLevel == "1")
{
jsonTemp.ChargeItemLevelName = "甲类";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "乙")
{
jsonTemp.ChargeItemLevelName = "2";
jsonTemp.SelfPercent = "0";
}
else if (jsonTemp.ChargeItemLevel == "3")
{
jsonTemp.ChargeItemLevelName = "丙类";
jsonTemp.SelfPercent = "100";
}
else
{
jsonTemp.ChargeItemLevel = "04";
jsonTemp.SelfPercent = "100";
jsonTemp.ChargeItemLevelName = "未知";
}
return jsonTemp;
}
///
/// 从TXT文件中获取诊断数据,并组装成JSON
///
///
///
private JObject GetDiagnoseJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[10];
jsonTemp.Name = arr[11];
jsonTemp.HisType = "4";
jsonTemp.HisTypeName = "诊断";
jsonTemp.LocateCode = "";
jsonTemp.LocateName = "";
jsonTemp.DosageFormCode = "";
jsonTemp.DosageFormName = "";
jsonTemp.CategoryCode = "";
jsonTemp.CategoryName = "";
jsonTemp.Specification = "";
jsonTemp.SpecificationCode = "";
jsonTemp.UnitOfPackag = "";
jsonTemp.UnitOfValuation = "";
jsonTemp.StartDate = "";
jsonTemp.EndDate = "";
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.Instructions = "";
jsonTemp.ExceptContent = "";
jsonTemp.Connotation = "";
jsonTemp.ValidFlag = arr[18];
jsonTemp.Note = arr[17];
jsonTemp.VersionNO = arr[22];
jsonTemp.VersionName = arr[23];
jsonTemp.UseFlag = arr[18];
jsonTemp.DrugSafetyStandardCode = "";
jsonTemp.ApprovalNO = "";
jsonTemp.SpecialFlag = "";
jsonTemp.LimitFlag = "";
jsonTemp.LimitRange = "";
jsonTemp.UniqueRecordNO = arr[19];
jsonTemp.Manufacturers = "";
return jsonTemp;
}
///
/// 慢性病
///
///
///
private JObject GetChronicDiseaseJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[0];
jsonTemp.Name = arr[1];
jsonTemp.HisType = "6";
jsonTemp.HisTypeName = "慢性病";
jsonTemp.LocateCode = "";
jsonTemp.LocateName = "";
jsonTemp.DosageFormCode = "";
jsonTemp.DosageFormName = "";
jsonTemp.CategoryCode = arr[14];
jsonTemp.CategoryName = arr[15];
jsonTemp.Specification = "";
jsonTemp.SpecificationCode = "";
jsonTemp.UnitOfPackag = "";
jsonTemp.UnitOfValuation = "";
jsonTemp.StartDate = "";
jsonTemp.EndDate = "";
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[2]);
jsonTemp.Instructions = "";
jsonTemp.ExceptContent = "";
jsonTemp.Connotation = arr[10];
jsonTemp.ValidFlag = arr[5];
jsonTemp.Note = arr[4];
jsonTemp.VersionNO = arr[9];
jsonTemp.VersionName = arr[11];
jsonTemp.UseFlag = arr[5];
jsonTemp.DrugSafetyStandardCode = "";
jsonTemp.ApprovalNO = "";
jsonTemp.SpecialFlag = "";
jsonTemp.LimitFlag = "";
jsonTemp.LimitRange = "";
jsonTemp.UniqueRecordNO = arr[6];
jsonTemp.Manufacturers = "";
return jsonTemp;
}
///
/// 从TXT文件中获取手术数据,并组装成JSON
///
///
///
private JObject GetOperationJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[10];
jsonTemp.Name = arr[11];
jsonTemp.HisType = "5";
jsonTemp.HisTypeName = "手术";
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.ValidFlag = arr[18];
jsonTemp.Note = arr[17];
jsonTemp.VersionNO = arr[22];
jsonTemp.VersionName = arr[23];
jsonTemp.UseFlag = arr[18];
jsonTemp.UniqueRecordNO = arr[19];
return jsonTemp;
}
///
/// DRGs
///
///
///
private JObject GetDRGsJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[1];
jsonTemp.Name = arr[2];
jsonTemp.HisType = "7";
jsonTemp.HisTypeName = "DRGs";
jsonTemp.Connotation = arr[10];
jsonTemp.Instructions = arr[3]; //适用手术操作代码
jsonTemp.ExceptContent = arr[4]; //适用手术操作名称
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.ValidFlag = arr[5];
jsonTemp.Note = arr[11];
jsonTemp.VersionNO = arr[9];
jsonTemp.VersionName = arr[12];
jsonTemp.UseFlag = arr[5];
jsonTemp.UniqueRecordNO = arr[6];
return jsonTemp;
}
private JObject GetDaySurgeryJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[1];
jsonTemp.Name = arr[2];
jsonTemp.HisType = "8";
jsonTemp.HisTypeName = "日间手术";
jsonTemp.Connotation = arr[8];
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.ValidFlag = arr[3];
jsonTemp.Note = arr[9];
jsonTemp.VersionNO = arr[7];
jsonTemp.VersionName = arr[10];
jsonTemp.UseFlag = arr[3];
jsonTemp.UniqueRecordNO = arr[4];
return jsonTemp;
}
///
/// 中药饮片
///
///
///
private JObject GetChineseDrugJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[0];
jsonTemp.Name = arr[1];
jsonTemp.HisType = "10";
jsonTemp.HisTypeName = "中药饮片";
jsonTemp.Connotation = arr[8];
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.ValidFlag = arr[3];
jsonTemp.Note = arr[9];
jsonTemp.VersionNO = arr[7];
jsonTemp.VersionName = arr[10];
jsonTemp.UseFlag = arr[3];
jsonTemp.UniqueRecordNO = arr[4];
return jsonTemp;
}
///
/// 医疗机构制剂
///
///
///
private JObject GetHosPreparationJsonByTxt(string[] arr)
{
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.Code = arr[0];
jsonTemp.Name = arr[1];
jsonTemp.HisType = "11";
jsonTemp.HisTypeName = "医疗机构制剂";
jsonTemp.Connotation = arr[8];
//jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
jsonTemp.ValidFlag = arr[64];
jsonTemp.Note = arr[9];
jsonTemp.VersionNO = arr[70];
jsonTemp.VersionName = arr[71];
jsonTemp.UseFlag = arr[64];
jsonTemp.UniqueRecordNO = arr[46]; //药品注册证号
jsonTemp.Instructions = arr[77];
jsonTemp.NationalCode = arr[57]; //国家医保药品目录编码
jsonTemp.NationalName = arr[58]; //国家医保药品目录名称
return jsonTemp;
}
///
/// 提交数据给IRIS
///
///
///
///
private JObject applyDataToIris(string code, JArray jaParam)
{
JObject joIn = new JObject();
JObject joRtn = new JObject();
string outParam = "";
try
{
joIn.Add(new JProperty("params", jaParam));
joIn.Add("code", code);
joIn.Add("updateUserID", Global.user.ID);
InvokeHelper invoker = new InvokeHelper();
string sInput = joIn.ToString();
joRtn = invoker.invokeInsuService(sInput, "applyDataToIris");
outParam = joRtn.ToString();
return joRtn;
}
catch (Exception ex)
{
joRtn = JsonHelper.setExceptionJson(-1, "applyDataToIris", ex.Message);
outParam = joRtn.ToString();
return joRtn;
}
}
///
/// 从TXT里导数据到IRIS
///
///
///
///
///
///
public JObject importDataToIrisByTxt(string txtPath, int size, int direcType, Sunny.UI.UIProcessBar processBar)
{
int errorCount = 0;
string errorMsg = "";
try
{
/*据说速度更快
* https://www.cnblogs.com/eniac12/p/4398310.html
* using (StreamReader sr = File.OpenText(fileName))
{
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
//do what you have to here
}
}
Convert.ToString(a)
*/
string[] lines = System.IO.File.ReadAllLines(txtPath);
dynamic jaParams = new JArray();
int rows = lines.Length;
processBar.Maximum = rows;
for (int i = 0; i < rows; i++)
{
processBar.Value = i + 1;
Application.DoEvents();
string lineTmp = lines[i];
string[] arr = lineTmp.Split('\t');
//判断是哪种目录类型
string code = string.Empty;
switch (direcType)
{
//药品
case 1:
{
jaParams.Add(GetDrugsJsonByTxt(arr));
break;
}
//诊疗
case 2:
{
jaParams.Add(GetMedicalServiceJsonByTxt(arr));
break;
}
//材料
case 3:
{
jaParams.Add(GetMaterialJsonByTxt(arr));
break;
}
//诊断
case 4:
{
jaParams.Add(GetDiagnoseJsonByTxt(arr));
break;
}
//手术
case 5:
{
jaParams.Add(GetOperationJsonByTxt(arr));
break;
}
//慢性病
case 6:
{
jaParams.Add(GetChronicDiseaseJsonByTxt(arr));
break;
}
//DRGs
case 7:
{
jaParams.Add(GetDRGsJsonByTxt(arr));
break;
}
//日间手术
case 8:
{
jaParams.Add(GetDaySurgeryJsonByTxt(arr));
break;
}
//中药饮片
case 10:
{
jaParams.Add(GetChineseDrugJsonByTxt(arr));
break;
}
//医疗机构制剂
case 11:
{
jaParams.Add(GetHosPreparationJsonByTxt(arr));
break;
}
}
code = "09010035";
//每50行提交一次给后台
int currentRows = i + 1;
if ((currentRows % size == 0) && (i != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" +errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
if ((currentRows == rows) && (currentRows % size != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "importDataToIrisByTxt", ex.Message);
}
}
///
/// 从txt获取数据更新插入到医保字典明细表
///
/// yp;hc;sfxm
public JObject ImportToDictionaryDataDetail(string filePath, Sunny.UI.UIProcessBar ProcessBar)
{
int errorCount = 0;
int i = 0;
string errorMsg = "";
try
{
string[] lines = System.IO.File.ReadAllLines(filePath);
dynamic jaParams = new JArray();
int rows = lines.Length;
ProcessBar.Maximum = rows;
using (var reader = new StreamReader(filePath, System.Text.Encoding.GetEncoding("gb2312")))
{
var encoding = Encoding.UTF8; // 设置编码格式为 UTF-8(根据需求选择其他编码)
while (!reader.EndOfStream)
{
ProcessBar.Value = i + 1;
string line = reader.ReadLine();
Application.DoEvents();
//MessageBox.Show("line:" + line);
byte[] bytes = encoding.GetBytes(line); // 将每行内容转换成字节数组
string decodedString = encoding.GetString(bytes); // 对字节数组进行解码得到原始字符串
//MessageBox.Show("decodedString:" + decodedString);
string[] arr = decodedString.Split('|');
dynamic joTmp = new JObject();
string HBDictionaryDr = "";
string DictionaryType = arr[0].ToString();
//获取并插入字典主表的DR
JObject joData = new JObject();
joData.Add("HospitalDr", Global.inf.hospitalDr);
joData.Add("InterfaceDr", Global.inf.interfaceDr);
joData.Add("InsuCode", DictionaryType);
JObject joRtnHBDictionary = mis.insertDictionary(joData);
if (JsonHelper.parseIrisRtnValue(joRtnHBDictionary, out errorMsg) != 0)
{
return JsonHelper.setExceptionJson(-1, "insertDictionary", "导入的医保字典类型" + DictionaryType + "在医保字典主表HB_Dictionary中不存在,插入主表数据失败!");
}
else
{
HBDictionaryDr = JsonHelper.getDestValue(joRtnHBDictionary, "data.HBDictionaryDr");
if (HBDictionaryDr == "")
{
return JsonHelper.setExceptionJson(-1, "insertDictionary", "HBDictionaryDr返回值为空");
}
}
joTmp.ID = "";
joTmp.updateUserID = Global.user.ID;
joTmp.HospitalDr = Global.inf.hospitalDr;
joTmp.InterfaceDr = Global.inf.interfaceDr;
joTmp.HBDictionaryDr = HBDictionaryDr; //arr[0].ToString();
joTmp.Code = arr[2].ToString();
joTmp.Descripts = arr[3].ToString();
joTmp.PinyinSearchCode = arr[0].ToString();
jaParams.Add(joTmp);
//每50行提交一次给后台
int currentRows = i + 1;
if ((currentRows % 50 == 0) && (i != 0))
{
JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
if ((currentRows == rows) && (currentRows % 50 != 0))
{
JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
i = i + 1;
}
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "ImportToDirectory", ex.Message);
}
}
///
/// 从txt获取数据更新插入到医保目录表
///
/// yp;hc;sfxm
public JObject ImportToDirectory(string filePath, int directoryType, int size, Sunny.UI.UIProcessBar ProcessBar)
{
int errorCount = 0;
int i = 0;
string errorMsg = "";
try
{
string[] lines = System.IO.File.ReadAllLines(filePath);
dynamic jaParams = new JArray();
int rows = lines.Length;
ProcessBar.Maximum = rows;
using (var reader = new StreamReader(filePath, System.Text.Encoding.GetEncoding("gb2312")))
{
var encoding = Encoding.UTF8; // 设置编码格式为 UTF-8(根据需求选择其他编码)
while (!reader.EndOfStream)
{
ProcessBar.Value = i + 1;
string line = reader.ReadLine();
Application.DoEvents();
byte[] bytes = encoding.GetBytes(line); // 将每行内容转换成字节数组
string decodedString = encoding.GetString(bytes); // 对字节数组进行解码得到原始字符串
string[] arr = decodedString.Split('|');
if (directoryType == 0)
{
jaParams.Add(GetDrugsJsonByTxt(arr));
//break;
}
else if (directoryType == 1)
{
jaParams.Add(GetMedicalServiceJsonByTxt(arr));
//break;
}
else if (directoryType == 2)
{
jaParams.Add(GetMaterialJsonByTxt(arr));
//break;
}
string code = "09010035";
//每50行提交一次给后台
int currentRows = i + 1;
if ((currentRows % size == 0) && (i != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
if ((currentRows == rows) && (currentRows % size != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
i = i + 1;
}
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "ImportToDirectory", ex.Message);
}
}
///
/// 从txt获取数据更新插入到医保目录表
///
/// yp;hc;sfxm
public JObject ImportToDirectoryNew(string filePath,int directoryType, int size, Sunny.UI.UIProcessBar ProcessBar)
{
int errorCount = 0;
string errorMsg = "";
try
{
string[] lines = System.IO.File.ReadAllLines(filePath);
dynamic jaParams = new JArray();
int rows = lines.Length;
ProcessBar.Maximum = rows;
for (int i = 0; i < rows; i++)
{
ProcessBar.Value = i + 1;
Application.DoEvents();
string lineTmp = lines[i];
string[] arr = lineTmp.Split('|');
string code = string.Empty;
if (directoryType == 0)
{
jaParams.Add(GetDrugsJsonByTxt(arr));
break;
}
else if (directoryType == 1)
{
jaParams.Add(GetMedicalServiceJsonByTxt(arr));
break;
}
else if (directoryType == 2)
{
jaParams.Add(GetMaterialJsonByTxt(arr));
break;
}
code = "09010035";
//每50行提交一次给后台
int currentRows = i + 1;
if ((currentRows % size == 0) && (i != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
if ((currentRows == rows) && (currentRows % size != 0))
{
JObject joRtn = applyDataToIris(code, jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "ImportToDirectory", ex.Message);
}
}
///
/// 从txt获取数据更新插入到医保对照表
///
///
///
///
///
///
public JObject ImportToMapRelationFromTxt(string filePath, int directoryType, DataTable dtHis, Sunny.UI.UIProcessBar ProcessBar)
{
int errorCount = 0;
int i = 0;
string errorMsg = "";
string hisTypeName = "";
try
{
//获取Out文件信息
string[] lines = System.IO.File.ReadAllLines(filePath);
int rows = lines.Length;
ProcessBar.Maximum = rows;
if (directoryType == 0)
hisTypeName = "药品";
else
if (directoryType == 1)
hisTypeName = "诊疗";
else
if (directoryType == 2)
hisTypeName = "材料";
using (var reader = new StreamReader(filePath, System.Text.Encoding.GetEncoding("gb2312")))
{
var encoding = Encoding.UTF8; // 设置编码格式为 UTF-8(根据需求选择其他编码)
while (!reader.EndOfStream)
{
ProcessBar.Value = i + 1;
string line = reader.ReadLine();
Application.DoEvents();
byte[] bytes = encoding.GetBytes(line); // 将每行内容转换成字节数组
string decodedString = encoding.GetString(bytes); // 对字节数组进行解码得到原始字符串
string[] arr = decodedString.Split('|');
string FileHISCode = arr[0]; //out文件中的HIS编码
string InsuCode = arr[2]; //医保目录编码
string InsuName = arr[3]; //医保目录名称
//2.循环HIS目录信息主要取MapID
foreach (DataRow dataRow in dtHis.Rows)
//for (int iHIS = 0; iHIS < dtHis.Rows.Count; iHIS++)
{
string HISCode = dataRow["itemCode"].ToString(); //HIS药品编码
string HISName = dataRow["itemDesc"].ToString(); //HIS药品名称
string MapID = dataRow["MapID"].ToString(); //MapID
string ChargeItemDr = dataRow["ID"].ToString();
//string HISCode = dtHis.Rows[iHIS]["itemCode"].ToString(); //HIS药品编码
//string HISName = dtHis.Rows[iHIS]["itemDesc"].ToString(); //HIS药品名称
//string MapID = dtHis.Rows[iHIS]["MapID"].ToString(); //MapID
//string ChargeItemDr = dtHis.Rows[iHIS]["ID"].ToString();
//3.判断HIS编码一致再更新
if (FileHISCode == HISCode)
{
//查询医保平台医保目录表的ID-对应医保对照表DiretoryDr
JObject joInput = new JObject();
joInput.Add("currentPage", "1");
joInput.Add("pageSize", "50");
joInput.Add("serviceCode", "09010042");
joInput.Add("directoryType", directoryType + 1);
joInput.Add("directoryCode", InsuCode);
joInput.Add("directoryDr", Global.inf.interfaceDr);
JObject joRtnDI = mis.getMIDirectoryByPagination(joInput);
string DiretoryDr = JsonHelper.getDestValue(joRtnDI, "result.rows[0].medInsuDirectoryID");
//插入医保平台医保对照表
JArray jaParams = new JArray();
dynamic jsonTemp = new JObject();
if (MapID == "0")
jsonTemp.ID = "";
else
jsonTemp.ID = MapID;
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.HISCode = HISCode;
jsonTemp.HISName = HISName;
jsonTemp.ChargeItemDr = ChargeItemDr;
jsonTemp.DiretoryDr = DiretoryDr; //医保目录表ID dtCenter.Rows[iCenter]["medInsuDirectoryID"]
jsonTemp.State = 1; //1.已对照 2.已对照但未上传 3 已对照且已上传
jsonTemp.HisType = directoryType + 1;
jsonTemp.HisTypeName = hisTypeName;
jsonTemp.InsuCode = InsuCode;
jsonTemp.InsuName = InsuName;
jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
jaParams.Add(jsonTemp);
JObject joIn = new JObject();
joIn.Add(new JProperty("params", jaParams));
joIn.Add("code", "09010040");
//InvokeHelper invoker = new InvokeHelper();
JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "插入对照信息");
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
}
}
i = i + 1;
}
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "ImportToMapRelation", ex.Message);
}
}
///
/// 从DataTable获取数据更新插入到医保对照表
///
///
/// HIS字典
///
///
public JObject ImportToMapRelationFromDT(int HisType, DataTable dtHis, DataGridView dgv, Sunny.UI.UIProcessBar ProcessBar)
{
int errorCount = 0;
int i = 0;
string errorMsg = "";
string hisTypeName = "";
try
{
int rows = dtHis.Rows.Count;
ProcessBar.Maximum = rows;
if (HisType == 63)
hisTypeName = "收费类别";
else
if (HisType == 70)
hisTypeName = "剂型";
else
if (HisType == 229)
hisTypeName = "用法";
//2.循环HIS目录信息主要取MapID
//foreach (DataRow dataRow in dtHis.Rows)
for (int iHIS = 0; iHIS < dtHis.Rows.Count; iHIS++)
{
Boolean bAdd = false;
ProcessBar.Value = i + 1;
Application.DoEvents();
string HISCode = dtHis.Rows[iHIS]["code"].ToString(); //HIS药品编码
string HISName = dtHis.Rows[iHIS]["desc"].ToString(); //HIS药品名称
//string MapID = dtHis.Rows[iHIS]["MapID"].ToString(); //MapID
string ChargeItemDr = dtHis.Rows[iHIS]["id"].ToString();
for (int idgv = 0; idgv < dgv.Rows.Count; idgv++)
{
if (dgv.Rows[idgv].Cells["HISCode"].Value.ToString() == HISCode)
bAdd = true;
}
if (bAdd == false)
{
//插入医保平台医保对照表
JArray jaParams = new JArray();
dynamic jsonTemp = new JObject();
jsonTemp.ID = "";
jsonTemp.HospitalDr = Global.inf.hospitalDr;
jsonTemp.updateUserID = Global.user.ID;
jsonTemp.InterfaceDr = Global.inf.interfaceDr;
jsonTemp.HISCode = HISCode;
jsonTemp.HISName = HISName;
jsonTemp.ChargeItemDr = ChargeItemDr;
jsonTemp.DiretoryDr = ""; //医保目录表ID dtCenter.Rows[iCenter]["medInsuDirectoryID"]
jsonTemp.State = 0; //1.已对照 2.已对照但未上传 3 已对照且已上传
jsonTemp.HisType = HisType;
jsonTemp.HisTypeName = hisTypeName;
jsonTemp.InsuCode = "";
jsonTemp.InsuName = "";
jsonTemp.UpdateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
jaParams.Add(jsonTemp);
JObject joIn = new JObject();
joIn.Add(new JProperty("params", jaParams));
joIn.Add("code", "09010040");
//InvokeHelper invoker = new InvokeHelper();
JObject joRtn = invoker.invokeInsuService(joIn.ToString(), "插入对照信息");
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
}
i = i + 1;
}
return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "ImportToMapRelation", ex.Message);
}
}
public JObject importDictionary(Sunny.UI.UIProcessBar uiProcessBar,JArray jaList,string type)
{
int errorCount = 0;
string errorMsg = "",outParam = "", HBDictionaryDr ="";
try
{
//插入并获取字典主表的DR
JObject joData = new JObject();
joData.Add("HospitalDr", Global.inf.hospitalDr);
joData.Add("InterfaceDr", Global.inf.interfaceDr);
joData.Add("InsuCode", type);
JObject joRtn = mis.insertDictionary(joData);
if (JsonHelper.parseIrisRtnValue(joRtn, out errorMsg) != 0)
{
return JsonHelper.setExceptionJson(-1, "insertDictionary", errorMsg);
}
else
{
HBDictionaryDr = JsonHelper.getDestValue(joRtn, "data.HBDictionaryDr");
if (HBDictionaryDr == "")
{
return JsonHelper.setExceptionJson(-1, "insertDictionary", "HBDictionaryDr返回值为空");
}
}
}
catch (Exception ex)
{
return JsonHelper.setExceptionJson(-1, "insertDictionary", ex.Message);
}
JObject joReturn = new JObject();
try
{
//插入字典明细表
JArray jaParams = new JArray();
int rows = jaList.Count ;
uiProcessBar.Maximum = rows;
for (int i = 0; i < jaList.Count ; i++)
{
uiProcessBar.Value = i + 1;
dynamic joTmp = new JObject();
joTmp.ID = "";
joTmp.updateUserID = Global.user.ID;
joTmp.HospitalDr = Global.inf.hospitalDr;
joTmp.InterfaceDr = Global.inf.interfaceDr;
joTmp.HBDictionaryDr = HBDictionaryDr;
joTmp.Code = jaList[i]["value"].ToString();
joTmp.Descripts = jaList[i]["label"].ToString();
jaParams.Add(joTmp);
//每50行提交一次给后台
int currentRows = i + 1;
if ((currentRows % 50 == 0) && (i != 0))
{
JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
if ((currentRows == rows) && (currentRows % 50 != 0))
{
JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
if (joRtn["errorCode"].ToString() != "0")
{
errorCount = errorCount + 1;
errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
}
jaParams = new JArray();
}
}
joReturn = JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
outParam = joReturn.ToString();
return joReturn;
}
catch (Exception ex)
{
joReturn = JsonHelper.setExceptionJson(-1, "importDictinary", ex.Message);
outParam = joReturn.ToString();
return joReturn;
}
}
}
}