HIS系统的处方录入控件
前文《EFW框架Winform前端开发之强大的自定义控件库》中我们介绍了EFW框架中Winform系统中的自定义控件,本章使用自定义控件中的GridBoxCard控件开发了一个HIS系统的处方录入控件。做过HIS系统的都知道医生站系统是整个医院系统中比较复杂的模块,而处方录入又是医生站系统中最复杂的功能;处方控件就是把医生的纸质处方转换为电子处方,处方有关的数据源包括药品、项目、材料、用法、频次、嘱托等;处方控件功能包括新开、修改、换方、合租、删除等,还有其他功能看下图;
1.界面效果
2.如何使用处方录入控件
在代码中使用处方控件分为三步,首先建表,因为控件的使用依赖一些数据源,当然如果你的系统中已经有一套控件需要的表,那么建表这步可以省略;接着将控件拖入form界面上并设置相关属性;然后实现控件的接口IPrescripttionDbHelper;
1)控件依赖的表有如下,表的结构可以看实例中的脚本
2)界面上拖入处方控件并设置属性
3)TestPrescripttionDbHelper对象继承接口IPrescripttionDbHelper,并实现接口方法
TestPrescripttionDbHelper presHelper = new TestPrescripttionDbHelper();
prescriptionControl1.InitDbHelper(presHelper);
prescriptionControl1.LoadPatData(1, 101, "儿科", 201, "李医生");
public class TestPrescripttionDbHelper : IPrescripttionDbHelper
{
private AbstractDatabase oleDb;
public TestPrescripttionDbHelper()
{
oleDb = FactoryDatabase.GetDatabase();
} #region IPrescripttionDbHelper 成员 private List<CardDataSourceDrugItem> GetDrugItemToDatabase(int type, int pageNo, int pageSize, string filter)
{
PageInfo page = new PageInfo(pageSize, pageNo);
page.KeyName = "StockID"; string strsql = "";
strsql = @"SELECT * FROM ViewBaseData_Med T WHERE (PyCode LIKE '%{0}%' OR PyCodeT LIKE '%{0}%' OR WbCode LIKE '%{0}%' OR WbCodeT LIKE '%{0}%' OR CName LIKE '%{0}%' OR TName LIKE '%{0}%')";
strsql = string.Format(strsql, filter);
strsql = SqlPage.FormatSql(strsql, page, oleDb);
DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceDrugItem> list_DrugItem = new List<CardDataSourceDrugItem>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceDrugItem mDrugItem = new CardDataSourceDrugItem();
mDrugItem.ItemId = ConvertDataExtend.ToInt32(dt.Rows[i]["StockID"], );
mDrugItem.ItemName = dt.Rows[i]["CName"].ToString();
mDrugItem.ItemName_Print = dt.Rows[i]["TName"].ToString();
mDrugItem.Standard = dt.Rows[i]["Spec"].ToString(); mDrugItem.Scale = "";//补偿比例
mDrugItem.StoreNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["ActualQty"], );//库存量
mDrugItem.UnPickUnit = dt.Rows[i]["MiniUnit"].ToString();//包装单位(销售单位)
mDrugItem.SellPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], );//销售价格?
mDrugItem.BuyPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["WardPrice"], );//进价
//mDrugItem.ExecDeptName = dt.Rows[i][""].ToString();//执行科室?
mDrugItem.Pym = dt.Rows[i]["PyCode"].ToString();
mDrugItem.Wbm = dt.Rows[i]["WbCode"].ToString();
mDrugItem.Address = dt.Rows[i]["FacName"].ToString();//生产厂家
//mDrugItem.DoseUnitId = dt.Rows[i][""].ToString();//剂量单位
mDrugItem.DoseUnitName = dt.Rows[i]["DosUnit"].ToString();
mDrugItem.DoseConvertNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["Dosage"], );//剂量对应包装单位系数
mDrugItem.ItemType = ConvertDataExtend.ToInt32(dt.Rows[i]["MatClass"], );//项目类型 0-所有 1-西药 2-中药 3-处方可开的物品 4-收费项目
//mDrugItem.StatItemCode = dt.Rows[i][""].ToString();//大项目代码
//mDrugItem.UnPickUnitId = dt.Rows[i][""].ToString();//包装单位ID
mDrugItem.ExecDeptId = ConvertDataExtend.ToInt32(dt.Rows[i]["DeptID"], );//执行科室ID?
mDrugItem.FloatFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["RoundingMode"], );// dt.Rows[i][""].ToString();//按含量取整1 按剂量取整0
//mDrugItem.VirulentFlag = dt.Rows[i][""].ToString();//剧毒标识
//mDrugItem.NarcoticFlag = dt.Rows[i][""].ToString();//麻醉标识
mDrugItem.SkinTestFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["SkinMethod"], );//皮试标识
//mDrugItem.RecipeFlag = dt.Rows[i][""].ToString();//处方标识
//mDrugItem.LunacyFlag = dt.Rows[i][""].ToString();//精神药品标识
//mDrugItem.CostlyFlag = dt.Rows[i][""].ToString();//贵重药品标识
mDrugItem.default_Usage_Amount = ;//默认用量
mDrugItem.default_Usage_Id = ;//默认用法
mDrugItem.default_Usage_Name = "";
mDrugItem.default_Frequency_Id = ;//默认频次
mDrugItem.default_Frequency_Name = ""; list_DrugItem.Add(mDrugItem);
}
return list_DrugItem;
} public List<CardDataSourceDrugItem> GetDrugItem(int type, int pageNo, int pageSize, string filter)
{
return GetDrugItemToDatabase(type, pageNo, pageSize, filter);
} public CardDataSourceDrugItem GetDrugItem(int ItemId)
{
string strsql = @"SELECT TOP 1* FROM ViewBaseData_Med T
WHERE StockID={0}";
strsql = string.Format(strsql, ItemId); DataTable dt = oleDb.GetDataTable(strsql);
List<CardDataSourceDrugItem> list_DrugItem = new List<CardDataSourceDrugItem>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceDrugItem mDrugItem = new CardDataSourceDrugItem();
mDrugItem.ItemId = ConvertDataExtend.ToInt32(dt.Rows[i]["StockID"], );
mDrugItem.ItemName = dt.Rows[i]["CName"].ToString();
mDrugItem.ItemName_Print = dt.Rows[i]["TName"].ToString();
mDrugItem.Standard = dt.Rows[i]["Spec"].ToString(); mDrugItem.Scale = "";//补偿比例
mDrugItem.StoreNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["ActualQty"], );//库存量
mDrugItem.UnPickUnit = dt.Rows[i]["MiniUnit"].ToString();//包装单位(销售单位)
mDrugItem.SellPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], );//销售价格?
mDrugItem.BuyPrice = ConvertDataExtend.ToDecimal(dt.Rows[i]["WardPrice"], );//进价
//mDrugItem.ExecDeptName = dt.Rows[i][""].ToString();//执行科室?
mDrugItem.Pym = dt.Rows[i]["PyCode"].ToString();
mDrugItem.Wbm = dt.Rows[i]["WbCode"].ToString();
mDrugItem.Address = dt.Rows[i]["FacName"].ToString();//生产厂家
//mDrugItem.DoseUnitId = dt.Rows[i][""].ToString();//剂量单位
mDrugItem.DoseUnitName = dt.Rows[i]["DosUnit"].ToString();
mDrugItem.DoseConvertNum = ConvertDataExtend.ToDecimal(dt.Rows[i]["Dosage"], );//剂量对应包装单位系数
mDrugItem.ItemType = ConvertDataExtend.ToInt32(dt.Rows[i]["MatClass"], );//项目类型 0-所有 1-西药 2-中药 3-处方可开的物品 4-收费项目
//mDrugItem.StatItemCode = dt.Rows[i][""].ToString();//大项目代码
//mDrugItem.UnPickUnitId = dt.Rows[i][""].ToString();//包装单位ID
mDrugItem.ExecDeptId = ConvertDataExtend.ToInt32(dt.Rows[i]["DeptID"], );//执行科室ID?
mDrugItem.FloatFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["RoundingMode"], );// dt.Rows[i][""].ToString();//按含量取整1 按剂量取整0
//mDrugItem.VirulentFlag = dt.Rows[i][""].ToString();//剧毒标识
//mDrugItem.NarcoticFlag = dt.Rows[i][""].ToString();//麻醉标识
mDrugItem.SkinTestFlag = ConvertDataExtend.ToInt32(dt.Rows[i]["SkinMethod"], );//皮试标识
//mDrugItem.RecipeFlag = dt.Rows[i][""].ToString();//处方标识
//mDrugItem.LunacyFlag = dt.Rows[i][""].ToString();//精神药品标识
//mDrugItem.CostlyFlag = dt.Rows[i][""].ToString();//贵重药品标识
mDrugItem.default_Usage_Amount = ;//默认用量
mDrugItem.default_Usage_Id = ;//默认用法
mDrugItem.default_Usage_Name = "";
mDrugItem.default_Frequency_Id = ;//默认频次
mDrugItem.default_Frequency_Name = ""; list_DrugItem.Add(mDrugItem);
}
return list_DrugItem.Count > ? list_DrugItem[] : null;
} public List<CardDataSourceUsage> GetUsage()
{
string strsql = @"SELECT ID,ChannelName,CName,EName,PYCode,WBCode,InputCode
FROM Clinic_Channel
WHERE DeleteFlag=0
ORDER BY OrderNum";
DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceUsage> list_Usage = new List<CardDataSourceUsage>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceUsage mUsage = new CardDataSourceUsage(); mUsage.UsageId = ConvertDataExtend.ToInt32(dt.Rows[i]["ID"], );
mUsage.UsageName = dt.Rows[i]["ChannelName"].ToString();
mUsage.Pym = dt.Rows[i]["PYCode"].ToString();
mUsage.Wbm = dt.Rows[i]["WBCode"].ToString();
//mUsage.Szm = dt.Rows[i]["ID"].ToString();
list_Usage.Add(mUsage);
}
return list_Usage;
} public List<CardDataSourceFrequency> GetFrequency()
{
string strsql = @"SELECT ID,FrequencyName,CName,EName,NumCode,InputCode,ExecuteCode,DeleteFlag,PYCode,WBCode
FROM Clinic_Frequency
WHERE DeleteFlag = 0
ORDER BY OrderNum"; DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceFrequency> list_Frequency = new List<CardDataSourceFrequency>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceFrequency mFrequency = new CardDataSourceFrequency();
mFrequency.FrequencyId = Convert.ToInt32(dt.Rows[i]["ID"]);
mFrequency.Name = dt.Rows[i]["FrequencyName"].ToString();
mFrequency.Caption = dt.Rows[i]["ExecuteCode"].ToString(); int _execNum, _cycleDay;
CardDataSourceFrequency.Calculate(mFrequency.Caption, out _execNum, out _cycleDay);
mFrequency.ExecNum = _execNum;//执行次数
mFrequency.CycleDay = _cycleDay;//执行周期 mFrequency.Pym = dt.Rows[i]["InputCode"].ToString();
mFrequency.Wbm = dt.Rows[i]["InputCode"].ToString();
mFrequency.Szm = dt.Rows[i]["NumCode"].ToString(); list_Frequency.Add(mFrequency);
}
return list_Frequency;
} public List<CardDataSourceEntrust> GetEntrust()
{
string strsql = @"SELECT ID, DeptCode,HelpCode, MsgContent,Uploader,WBCode,PYCode
FROM Clinic_Memo ";
DataTable dt = oleDb.GetDataTable(strsql); List<CardDataSourceEntrust> list_entrust = new List<CardDataSourceEntrust>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceEntrust mentrust = new CardDataSourceEntrust();
mentrust.Id = Convert.ToInt32(dt.Rows[i]["ID"]);
mentrust.Name = dt.Rows[i]["MsgContent"].ToString();
mentrust.Pym = dt.Rows[i]["PYCode"].ToString();
mentrust.Wbm = dt.Rows[i]["WBCode"].ToString();
mentrust.Szm = ""; list_entrust.Add(mentrust);
}
return list_entrust;
} public List<CardDataSourceUnit> GetUnit(int stockId, int type)
{
DataTable dt = oleDb.GetDataTable("xpGetDrugUnit", stockId, type); List<CardDataSourceUnit> list_unit = new List<CardDataSourceUnit>();
for (int i = ; i < dt.Rows.Count; i++)
{
CardDataSourceUnit munit = new CardDataSourceUnit();
munit.UnitDicId = ;
munit.UnitName = dt.Rows[i]["UnitName"].ToString();
munit.Pym = "";
munit.Wbm = "";
munit.Factor = Convert.ToDecimal(dt.Rows[i]["UnitFactor"]); list_unit.Add(munit);
} return list_unit;
} public List<Prescription> GetPresTemplate(int type, int tplId)
{
string strsql = "";
strsql = @"SELECT TOP 100 A.GroupID,
A.FeeID,A.FeeName,A.FeeClass,
A.Dosage,A.DosageUnit,
A.Amount,A.Unit,
A.FrequencyID,C.FrequencyName AS FrequencyName,C.ExecuteCode,
A.ChannelID,B.CName AS ChannelName,
A.Days Num, A.Days,A.Memo
,D.ClinPrice,D.Spec,D.Dosage DoseConvertNum,D.MatClass,D.SkinMethod IsAst
FROM Clinic_SetMealDetail A
LEFT JOIN Clinic_Channel B ON A.ChannelID = B.ID
LEFT JOIN Clinic_Frequency C ON A.FrequencyID = C.ID
LEFT JOIN ViewBaseData_Med D ON A.FeeID=D.StockID
WHERE ListID = {0}
ORDER BY A.GroupID,A.OrderNum";
strsql = string.Format(strsql, tplId); DataTable dt = oleDb.GetDataTable(strsql);
List<Prescription> list_Prescription = new List<Prescription>(); for (int i = ; i < dt.Rows.Count; i++)
{
Prescription mPres = new Prescription(); mPres.PresListId = ;
mPres.PresHeadId = ;
//mPres.OrderNo = i + 1;//行号
mPres.Item_Id = Convert.ToInt32(dt.Rows[i]["FeeID"]);
mPres.Item_Name = dt.Rows[i]["FeeName"].ToString();
mPres.Item_Type = type;//1西药 2中药 3项目材料
mPres.StatItem_Code = "";
mPres.Sell_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], );
mPres.Buy_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], );
mPres.Item_Price = ConvertDataExtend.ToDecimal(dt.Rows[i]["ClinPrice"], );
mPres.Standard = dt.Rows[i]["Spec"].ToString();
mPres.Usage_Amount = Convert.ToDecimal(dt.Rows[i]["Dosage"]);//剂量
mPres.Usage_Unit = dt.Rows[i]["DosageUnit"].ToString();//剂量单位
mPres.Usage_Rate = ConvertDataExtend.ToDecimal(dt.Rows[i]["DoseConvertNum"], );//剂量系数
mPres.Dosage = Convert.ToInt32(dt.Rows[i]["Num"]);//付数
mPres.Usage_Id = Convert.ToInt32(dt.Rows[i]["ChannelID"]);
mPres.Frequency_Id = Convert.ToInt32(dt.Rows[i]["FrequencyID"]);
mPres.Days = Convert.ToInt32(dt.Rows[i]["Days"]); mPres.Amount = Convert.ToDecimal(dt.Rows[i]["Amount"].ToString());//发药数量
mPres.Unit = dt.Rows[i]["Unit"].ToString();//发药单位 mPres.Item_Amount = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["Amount"]));//开药数量
mPres.Item_Unit = dt.Rows[i]["Unit"].ToString();//开药单位
mPres.Item_Rate = ;//系数 mPres.Group_Id = Convert.ToInt32(dt.Rows[i]["GroupID"]);//分组组号
mPres.SkinTest_Flag = ConvertDataExtend.ToInt32(dt.Rows[i]["IsAst"], );//皮试
mPres.SelfDrug_Flag = ;//自备
mPres.Entrust = dt.Rows[i]["Memo"].ToString();//嘱托 mPres.FootNote = "";
mPres.Tc_Flag = ;//套餐 mPres.Usage_Name = dt.Rows[i]["ChannelName"].ToString();//用法名称
mPres.Frequency_Name = dt.Rows[i]["FrequencyName"].ToString();//频次名称
mPres.Frequency_Caption = dt.Rows[i]["ExecuteCode"].ToString();//频次名称 int _execNum, _cycleDay;
CardDataSourceFrequency.Calculate(dt.Rows[i]["ExecuteCode"].ToString(), out _execNum, out _cycleDay);
mPres.Frequency_ExecNum = _execNum;//执行次数
mPres.Frequency_CycleDay = _cycleDay;//执行周期 mPres.CalculateAmount(null); list_Prescription.Add(mPres);
} return list_Prescription;
//throw new NotImplementedException();
} public Prescription GetPresTemplateRow(int type, int itemId)
{
CardDataSourceDrugItem durgItem = GetDrugItem(itemId);
if (durgItem == null)
throw new Exception("该项目已停用,不能开出!");
Prescription mPres = new Prescription();
mPres.Item_Id = ConvertDataExtend.ToInt32(durgItem.ItemId, -);
mPres.Item_Name = ConvertDataExtend.ToString(durgItem.ItemName, "");
mPres.Item_Type = type;//Convert.ToInt32(durgItem.ItemType);//1西药 2中药 3项目材料
mPres.StatItem_Code = ConvertDataExtend.ToString(durgItem.StatItemCode, ""); ;
mPres.Sell_Price = durgItem.SellPrice;
mPres.Buy_Price = durgItem.BuyPrice;
mPres.Item_Price = durgItem.SellPrice;
mPres.Standard = durgItem.Standard;
mPres.Usage_Amount = durgItem.default_Usage_Id;//剂量
mPres.Usage_Unit = durgItem.DoseUnitName;//剂量单位
mPres.Usage_Rate = durgItem.DoseConvertNum;//剂量系数
if (mPres.IsHerb)
mPres.Dosage = ;//付数
else
mPres.Dosage = ;
mPres.Usage_Id = durgItem.default_Usage_Id;
mPres.Frequency_Id = durgItem.default_Frequency_Id;
mPres.Days = Convert.ToInt32(); //mPres.Amount = 0;//发药数量
mPres.Unit = durgItem.UnPickUnit;//发药单位 mPres.Item_Amount = Convert.ToInt32();//开药数量
mPres.Item_Unit = durgItem.UnPickUnit;//开药单位
mPres.Item_Rate = Convert.ToInt32();//系数 mPres.SkinTest_Flag = durgItem.SkinTestFlag;//皮试
mPres.SelfDrug_Flag = Convert.ToInt32();//自备
mPres.Entrust = "";//嘱托 mPres.FootNote = "";
mPres.Tc_Flag = ;//套餐 mPres.Pres_Date = Convert.ToDateTime(DateTime.Now); mPres.Usage_Name = durgItem.default_Usage_Name;//用法名称
mPres.Frequency_Name = durgItem.default_Frequency_Name;//频次名称 string _caption = "";
CardDataSourceFrequency freq = GetFrequency().Find(x => x.FrequencyId == mPres.Usage_Id);
if (freq != null)
_caption = freq.Caption; //string _caption = CardDataSource.Tables["frequencydic"].Select("FrequencyId=" + mPres.Usage_Id)[0]["Caption"].ToString();
mPres.Frequency_Caption = _caption;//频次名称 int _execNum, _cycleDay;
CardDataSourceFrequency.Calculate(_caption, out _execNum, out _cycleDay);
mPres.Frequency_ExecNum = _execNum;//执行次数
mPres.Frequency_CycleDay = _cycleDay;//执行周期 mPres.IsFloat = true;//row["RoundingMode"] mPres.Usage_Amount = mPres.Usage_Amount <= ? : mPres.Usage_Amount;
mPres.CalculateAmount(durgItem.UnPickUnit);//计算数量 和 金额 return mPres;
//throw new NotImplementedException();
} public bool IsCostPres(List<Prescription> list)
{
if (list.Count == )
return false; string strsql = @"select count(*) num from Clinic_PrescriptionDetail where ID IN({0}) AND IsCharged=1";
string Ids = null;
for (int i = ; i < list.Count; i++)
{
if (Ids == null)
Ids = list[i].PresListId.ToString();
else
Ids += "," + list[i].PresListId.ToString();
} strsql = string.Format(strsql, Ids);
object ret = oleDb.GetDataResult(strsql); if (Convert.ToInt32(ret) > )
{
return true;
} return false;
} public bool IsDrugStore(Prescription pres)
{
if (pres.Item_Id > && pres.IsDrug == true)
{
string strsql = @"SELECT top 1 ActualQty FROM ViewBaseData_Med WHERE StockID ={0}";
strsql = string.Format(strsql, pres.Item_Id);
object ret = oleDb.GetDataResult(strsql); decimal qty = ret == DBNull.Value ? : Convert.ToDecimal(ret);
if (pres.Amount > qty)
return false;
} return true;
} public bool IsDrugStore(List<Prescription> list, List<Prescription> errlist)
{
list = list.FindAll(x => x.IsDrug == true);
if (list.Count == )
{
return true;
}
string strsql = @"SELECT StockID,ActualQty FROM ViewBaseData_Med WHERE StockID IN ({0}) ";
string Ids = null;
for (int i = ; i < list.Count; i++)
{
if (Ids == null)
Ids = list[i].Item_Id.ToString();
else
Ids += "," + list[i].Item_Id.ToString();
} strsql = string.Format(strsql, Ids);
DataTable dt = oleDb.GetDataTable(strsql); //errlist = new List<Entity.Prescription>();
for (int i = ; i < list.Count; i++)
{
DataRow[] drs = dt.Select("StockID=" + list[i].Item_Id);
if (drs.Length == || ConvertDataExtend.ToDecimal(drs[]["ActualQty"], ) < list[i].Amount)
{
errlist.Add(list[i]);
}
} if (errlist.Count > )
return false; return true;
} public List<Prescription> GetPrescriptionData(int patListId, int presType)
{
string strsql = @"SELECT
b.ID ListID,b.PrescriptionID,b.FeeID,b.FeeName,b.Price,b.Spec,b.Dosage,b.DosageUnit,b.Factor,b.Num,b.ChannelID,b.FrequencyID,b.Days,b.Amount,b.Unit,b.PresAmount,b.PresAmountUnit,b.PresFactor ,b.GroupID,b.IsAst,b.IsTake,b.Memo
,b.ListNO,0 OrderNO,b.IsCharged,b.IsCancel
,c.ChannelName,d.FrequencyName,d.ExecuteCode
,1 RoundingMode
,b.DoctorID,b.DeptCode,'' PresDoctorName,'' PresDeptName
FROM Clinic_PrescriptionList a
LEFT JOIN Clinic_PrescriptionDetail b ON a.ID=b.PrescriptionID
LEFT JOIN Clinic_Channel AS c ON b.ChannelID = c.ID
LEFT JOIN Clinic_Frequency AS d ON b.FrequencyID = d.ID
WHERE a.PatientID={0} AND a.OrderClass={1} AND b.ID IS NOT NULL
ORDER BY b.ListNO,b.GroupID"; strsql = string.Format(strsql, patListId, presType);
DataTable dt = oleDb.GetDataTable(strsql); //int _orderNo = 1;//行号
List<Prescription> list_Prescription = new List<Prescription>(); for (int i = ; i < dt.Rows.Count; i++)
{
Prescription mPres = new Prescription(); mPres.PresListId = Convert.ToInt32(dt.Rows[i]["ListID"]);
mPres.PresHeadId = Convert.ToInt32(dt.Rows[i]["PrescriptionID"]);
//mPres.OrderNo = i + 1;//行号
mPres.Item_Id = Convert.ToInt32(dt.Rows[i]["FeeID"]);
mPres.Item_Name = dt.Rows[i]["FeeName"].ToString();
mPres.Item_Type = ;// Convert.ToInt32(dt.Rows[i]["ItemClass"]);//1西药 2中药 3项目材料
mPres.StatItem_Code = "";
mPres.Sell_Price = Convert.ToDecimal(dt.Rows[i]["Price"]);
mPres.Buy_Price = Convert.ToDecimal(dt.Rows[i]["Price"]);
mPres.Item_Price = Convert.ToDecimal(dt.Rows[i]["Price"]);
mPres.Standard = dt.Rows[i]["Spec"].ToString();
mPres.Usage_Amount = Convert.ToDecimal(dt.Rows[i]["Dosage"]);//剂量
mPres.Usage_Unit = dt.Rows[i]["DosageUnit"].ToString();//剂量单位
mPres.Usage_Rate = Convert.ToDecimal(dt.Rows[i]["Factor"]);//剂量系数
mPres.Dosage = Convert.ToInt32(dt.Rows[i]["Num"]); ;//付数
mPres.Usage_Id = Convert.ToInt32(dt.Rows[i]["ChannelID"]);
mPres.Frequency_Id = Convert.ToInt32(dt.Rows[i]["FrequencyID"]);
mPres.Days = Convert.ToInt32(dt.Rows[i]["Days"]); mPres.Amount = Convert.ToDecimal(dt.Rows[i]["Amount"].ToString());//发药数量
mPres.Unit = dt.Rows[i]["Unit"].ToString();//发药单位 mPres.Item_Amount = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["PresAmount"]));//开药数量
mPres.Item_Unit = dt.Rows[i]["PresAmountUnit"].ToString();//开药单位
mPres.Item_Rate = Convert.ToInt32(Convert.ToDecimal(dt.Rows[i]["PresFactor"]));//系数 mPres.Group_Id = Convert.ToInt32(dt.Rows[i]["GroupID"]);//分组组号
mPres.SkinTest_Flag = Convert.ToInt32(dt.Rows[i]["IsAst"]);//皮试
mPres.SelfDrug_Flag = Convert.ToInt32(dt.Rows[i]["IsTake"]);//自备
mPres.Entrust = dt.Rows[i]["Memo"].ToString();//嘱托 mPres.FootNote = "";
mPres.Tc_Flag = ;//套餐 mPres.PresNo = Convert.ToInt32(dt.Rows[i]["ListNO"]);//方号
mPres.Dept_Id = ;//执行科室
mPres.Pres_Dept = Convert.ToInt32(dt.Rows[i]["DeptCode"]);
mPres.Pres_DeptName = dt.Rows[i]["PresDeptName"].ToString();
mPres.Pres_Doc = Convert.ToInt32(dt.Rows[i]["DoctorID"]);
mPres.Pres_DocName = dt.Rows[i]["PresDoctorName"].ToString();
if (Convert.ToInt32(dt.Rows[i]["IsCancel"]) == )
mPres.Status = PresStatus.退费状态;
else if (Convert.ToInt32(dt.Rows[i]["IsCharged"]) == )
mPres.Status = PresStatus.收费状态;
else
mPres.Status = PresStatus.保存状态;
//mPres.Pres_Date = Convert.ToDateTime(dt.Rows[i]["chargedTime"]); mPres.Usage_Name = dt.Rows[i]["ChannelName"].ToString();//用法名称
mPres.Frequency_Name = dt.Rows[i]["FrequencyName"].ToString();//频次名称
mPres.Frequency_Caption = dt.Rows[i]["ExecuteCode"].ToString();//频次名称 int _execNum, _cycleDay;
CardDataSourceFrequency.Calculate(dt.Rows[i]["ExecuteCode"].ToString(), out _execNum, out _cycleDay);
mPres.Frequency_ExecNum = _execNum;//执行次数
mPres.Frequency_CycleDay = _cycleDay;//执行周期 mPres.CalculateItemMoney(); list_Prescription.Add(mPres);
} return list_Prescription;
} public bool SavePrescriptionData(int patListId, List<Prescription> list, int presType)
{
List<string> sqllist = new List<string>(); string strsql = @"select ID from Clinic_PrescriptionList where PatientID ={0} AND OrderClass={1}";
strsql = string.Format(strsql, patListId, presType);
object ret = oleDb.GetDataResult(strsql);
int headId = ret == DBNull.Value ? : Convert.ToInt32(ret); if (headId == )//先插入处方头
{
strsql = @"INSERT INTO Clinic_PrescriptionList
( PatientID ,
OrderClass ,
OrderTime)
VALUES ( {0},{1},'{2}')";
strsql = string.Format(strsql, patListId, presType, DateTime.Now);
headId = oleDb.InsertRecord(strsql);
} //先删除修改数据
strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE ID IN({0})";
string Ids = null;
for (int i = ; i < list.Count; i++)
{
if (Ids == null)
Ids = list[i].PresListId.ToString();
else
Ids += "," + list[i].PresListId.ToString();
}
strsql = string.Format(strsql, Ids);
//MidDbHelper.ExecuteNonQuery(MidDbHelper.EmrHandle, strsql);
sqllist.Add(strsql); for (int i = ; i < list.Count; i++)
{
strsql = @"INSERT INTO Clinic_PrescriptionDetail(PrescriptionID ,ListNO ,GroupID ,FeeID ,FeeName ,Spec ,Dosage ,DosageUnit ,Factor ,ChannelID ,FrequencyID ,Num ,Amount ,Unit ,Price ,Days ,IsAst ,AstResult ,IsTake ,Memo ,IsCharged ,IsCancel,IsSend ,DoctorID ,DeptCode ,CostID ,FavorFee ,PresAmount ,PresAmountUnit ,PresFactor )
VALUES (
{0} --PrescriptionID
,{1}--ListNO
,{2} --GroupID
,{3} --FeeID
,'{4}' --FeeName
,'{5}'--Spec
,{6}--Dosage
,'{7}'--DosageUnit
,{8} ,{9} ,{10},{11} ,{12} --Amount
,'{13}' ,{14} ,{15} --Days
,{16}--IsAst
,'' --AstResult
,{17} ,'{18}' ,0 ,0 ,0,{19} --DoctorID
,'{20}' --DeptCode
,0 --CostID
,0 --FavorFee
,{21} --PresAmount
,'{22}'--PresAmountUnit
,{23}--PresFactor
)";
strsql = string.Format(strsql,
headId//
, list[i].PresNo//
, list[i].Group_Id
, list[i].Item_Id
, list[i].Item_Name
, list[i].Standard//
, list[i].Usage_Amount, list[i].Usage_Unit, list[i].Usage_Rate//
, list[i].Usage_Id, list[i].Frequency_Id, list[i].Dosage, list[i].Amount//
, list[i].Unit, list[i].Sell_Price, list[i].Days//
, list[i].SkinTest_Flag//
, list[i].SelfDrug_Flag, list[i].Entrust, list[i].Pres_Doc//
, list[i].Pres_Dept//
, list[i].Item_Amount//
, list[i].Item_Unit//
, list[i].Item_Rate//
); sqllist.Add(strsql);
} for (int i = ; i < sqllist.Count; i++)
{
oleDb.DoCommand(sqllist[i]);
}
return true;
} public bool DeletePrescriptionData(int presListId)
{
string strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE ID ={0} and IsCharged=0";
strsql = string.Format(strsql, presListId);
oleDb.DoCommand(strsql);
return true;
} public bool DeletePrescriptionData(int patListId, int presType, int PresNo)
{
string strsql = @"DELETE FROM Clinic_PrescriptionDetail WHERE IsCharged=0
AND PrescriptionID IN(SELECT ID FROM Clinic_PrescriptionList WHERE PatientID={0} AND OrderClass={1})
AND ListNO={2}";
strsql = string.Format(strsql, patListId, presType, PresNo);
oleDb.DoCommand(strsql);
return true;
} public bool UpdatePresNoAndGroupId(List<Prescription> data)
{
List<string> sqllist = new List<string>();
for (int i = ; i < data.Count; i++)
{
string strsql = @"UPDATE Clinic_PrescriptionDetail SET ListNO={1},GroupID={2} WHERE ID={0}";
strsql = string.Format(strsql, data[i].PresListId, data[i].PresNo, data[i].Group_Id);
sqllist.Add(strsql);
} for (int i = ; i < sqllist.Count; i++)
{
oleDb.DoCommand(sqllist[i]);
}
return true;
} public bool UpdatePresSelfDrugFlag(int presListId, int Flag)
{
string strsql = @"UPDATE Clinic_PrescriptionDetail SET IsTake={1} WHERE ID={0}";
strsql = string.Format(strsql, presListId, Flag);
oleDb.DoCommand(strsql);
return true;
} #endregion
}
总结:本章主要是扩展介绍EFW框架中的Winform系统自定义控件,利用框架中的自定义控件可以开发出相对复杂的业务功能,还有就是业务控件的设计思路,业务逻辑要完全独立于数据源,用接口的方式封装数据源的操作;
HIS系统的处方录入控件的更多相关文章
- WPF 10天修炼 第六天- 系统属性和常用控件
WPF系统属性和常用控件 渐变的背景色 WPF中的前景色和背景色不同于传统Winform的设置,这些属性都是Brush类型的值.在XAML中,当为这些属性设置指定的颜色后将被转换为SolidColor ...
- 关于Windows 7的64位系统不兼容某些控件的问题
我的问题是vsflex7.ocx 不能在64位系统下运行,导致软件的一个涉及到这个控件的功能出错.如下: 解决的办法基本思路是把这个控件注册一下.然后就可以了.就是这个控件: 目录中没有自己下载个. ...
- win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
TeeChart控件就不多介绍了,很多朋友不知道开始怎么注册使用,尤其是在64位系统下如何注册的问题,具体如下: win7.win8 64位系统问题所在: 64位的系统一般都是可以安装32位程序的 ...
- delphi7在win7系统如何安装spcomm控件
1.先准备好串口控件SPCOMM,例如把它放在F盘的工具安装文件夹下,等一下加载时需要用到. 2.打开delphi7软件. 3.按下上面的Component>Install Component ...
- 收集几个html和element-ui的录入控件
我希望有一个控件去显示或输入账本的金额 先做一些资料收集,也希望大家给个建议 输入银行账号会设置每四位添加一个空格 https://blog.csdn.net/wkx18330698534/artic ...
- C#开发PACS医学影像处理系统(九):序列控件与拖拽
1.先看结构: 创建WPF用户控件:YourTab 创建WPF用户控件:YourItem 创建选项卡时循环添加item,并设置序列缩略图到控件和异步下载的进度条, 1个病人1个或多个Study检查,1 ...
- delphi 实现最小化系统托盘(rz控件最简单 评论)
1.new -->application 2.在form1中加入一个tPopMenu 命名为pm1 3.uses ShellAPI; 4.定义一个常量在 const WM_TRAYMSG = W ...
- android之视频播放系统VideoView和自定义VideoView控件的应用
Android播放视频,包含系统自带VideoView控件,和自定义VideoView控件,可全屏播放,案例包含了本地视频和网络视频. 1:自定义VideoView控件 2:布局代码 3:Activi ...
- 《深入理解Android 卷III》第六章 深入理解控件(ViewRoot)系统
<深入理解Android 卷III>即将公布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...
随机推荐
- Spring基本概念
spring优点: 1降低组件间耦合度,实现软件各层之间的解耦. 2可以使用容器提供的各种服务.如,事务管理服务,消息服务等等. 当我们使用容器管理事务时,开发人员就不再需要手工控制事务,也不需处理复 ...
- CentOS下搭建NFS服务器总结
环境介绍: . 服务器: 192.168.0.100 . 客户机: 192.168.0.101 安装软件包: . 服务器和客户机都要安装nfs 和 rpcbind 软件包: yum -y instal ...
- 测量行业(RTK)相关的小知识总结
RTK测量系统,一般需要先架设基准站(参考站),数据链模式外挂大电台(有天线大功率模式,理想范围方圆18公里以内).基准站通过收到卫星(多星)进行计算出当前的位置. 其中涉及到频率的设置,波特率,以及 ...
- android ormlite queryBuilder.where() 多条件
QueryBuilder<VideoTagInfo, Integer> queryBuilder = videoTagInfoIntegerDao.queryBuilder();try { ...
- 【Android开发坑系列】之事件
总结一下: 1.Touch事件分发中只有两个主角:ViewGroup和View.ViewGroup包含onInterceptTouchEvent.dispatchTouchEvent.onTouchE ...
- Logstash——multiline 插件,匹配多行日志
本文内容 测试数据 字段属性 按多行解析运行时日志 把多行日志解析到字段 参考资料 在处理日志时,除了访问日志外,还要处理运行时日志,该日志大都用程序写的,比如 log4j.运行时日志跟访问日志最大的 ...
- 极简MVC的实现
我们来打造一个简单的专用于json调用的mvc实现,最终会将如下的C#代码暴露给js调用(代码在最后面有下载): public class UserController { public static ...
- Android酷炫实用的开源框架——UI框架(转)
转载别人整理好的文章,列出了很多炫酷的UI开源设计 原文地址:http://www.androidchina.net/1992.html 1.Side-Menu.Android分类侧滑菜单,Yalan ...
- 初始zookeeper与集群搭建实例
zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...
- Codeforces Round #385 (Div. 2) B - Hongcow Solves A Puzzle 暴力
B - Hongcow Solves A Puzzle 题目连接: http://codeforces.com/contest/745/problem/B Description Hongcow li ...