public ServiceResponseData ShortageDrug() { int detailId = Convert.ToInt32(requestData.GetData <string>(0)); IP_DrugBillDetail model = (IP_DrugBillDetail)NewObject <IP_DrugBillDetail>().getmodel(detailId); model.NoDrugFlag = 1; int iRtn = model.save(); bool bRtn = false; if (iRtn > 0) { bRtn = true; #region "保存业务消息数据 --Add By ZhangZhong" // 保存业务消息数据 Dictionary <string, string> msgDic = new Dictionary <string, string>(); int workId = requestData.GetData <int>(1); int userId = requestData.GetData <int>(2); int deptId = requestData.GetData <int>(3); msgDic.Add("WorkID", workId.ToString()); // 消息机构ID msgDic.Add("SendUserId", userId.ToString()); // 消息生成人ID msgDic.Add("SendDeptId", deptId.ToString()); // 消息生成科室ID msgDic.Add("BillDetailID", model.BillDetailID.ToString()); // 统领明细ID NewObject <BusinessMessage>().GenerateBizMessage(MessageType.药房缺药, msgDic); #endregion } else { bRtn = false; } responseData.AddData(bRtn); return(responseData); }
/// <summary> /// 保存统领单数据 /// </summary> /// <param name="drugbillData">药品统领数据</param> /// <param name="billTypeID">统领单类型</param> /// <param name="makeEmpID">统领人ID</param> /// <param name="makeEmpName">统领人名</param> /// <param name="isPatCommand">是否按病人统领true:按病人统领/false:不按病人统领</param> /// <param name="workID">机构ID</param> private void SaveDrugbillData(DataTable drugbillData, int billTypeID, int makeEmpID, string makeEmpName, bool isPatCommand, int workID) { // 保存统领单头数据 IP_DrugBillHead drugBillHead = NewObject <IP_DrugBillHead>(); for (int j = 0; j < drugbillData.Rows.Count; j++) { if (j == 0) { drugBillHead.BillClass = 0; // 单据分类 drugBillHead.BillTypeID = billTypeID; // 统领单类型 drugBillHead.PresDeptID = Convert.ToInt32(drugbillData.Rows[j]["PatDeptID"].ToString()); // 开方科室ID drugBillHead.ExecDeptID = Convert.ToInt32(drugbillData.Rows[j]["ExecDeptID"].ToString()); // 执行科室 drugBillHead.MakeDate = DateTime.Now; // 发送时间 drugBillHead.MakeEmpID = makeEmpID; // 发送人 drugBillHead.MakeEmpName = makeEmpName; // 发送人姓名 if (isPatCommand) { drugBillHead.PatName = drugbillData.Rows[j]["PatName"].ToString(); } this.BindDb(drugBillHead); drugBillHead.save(); #region "保存业务消息数据 --Add By ZhangZhong" // 保存业务消息数据 Dictionary <string, string> msgDic = new Dictionary <string, string>(); msgDic.Add("WorkID", workID.ToString()); // 消息机构ID msgDic.Add("SendUserId", makeEmpID.ToString()); // 消息生成人ID msgDic.Add("SendDeptId", drugBillHead.PresDeptID.ToString()); // 消息生成科室ID msgDic.Add("BillHeadID", drugBillHead.BillHeadID.ToString()); // 统领明细ID NewObject <BusinessMessage>().GenerateBizMessage(MessageType.药品统领, msgDic); #endregion } // 保存统领单明细数据 IP_DrugBillDetail drugBillDetail = ConvertExtend.ToObject <IP_DrugBillDetail>(drugbillData, j); decimal retailFee = Math.Round((drugBillDetail.InPrice * drugBillDetail.Amount) / drugBillDetail.PackAmount, 2); drugBillDetail.BillHeadID = drugBillHead.BillHeadID; drugBillDetail.RETAILFEE = retailFee; // 批发金额 drugBillDetail.SellFee = Convert.ToDecimal(drugbillData.Rows[j]["TotalFee"]); // 零售金额 drugBillDetail.CostEmpID = Convert.ToInt32(drugbillData.Rows[j]["PresDoctorID"]); // 记账员ID drugBillDetail.CostDate = Convert.ToDateTime(drugbillData.Rows[j]["ChargeDate"]); // 记账时间 drugBillDetail.OrderGroupID = Convert.ToInt32(drugbillData.Rows[j]["GroupID"]); // 医嘱组号 if (drugBillDetail.Amount <= 0) { drugBillDetail.DispDrugFlag = 1;// 发药标识 } else { drugBillDetail.DispDrugFlag = 0;// 发药标识 } drugBillDetail.NoDrugFlag = 0; // 缺药标识 0 drugBillDetail.SpecDicID = Convert.ToInt32(drugbillData.Rows[j]["CenteDrugID"]); // 药品规格典ID this.BindDb(drugBillDetail); drugBillDetail.save(); } }
/// <summary> /// 住院统领发药 /// </summary> /// <param name="dispHead">发药单表头</param> /// <param name="dispDetail">发药单明细</param> /// <returns>返回结果对象</returns> public DGBillResult IPDisp(DS_IPDispHead dispHead, List <DS_IPDispDetail> dispDetail) { //药品单据处理结果 DGBillResult result = new DGBillResult(); if (dispHead != null) { //1.判断药房是否处于盘点状态中 if (NewObject <DrugStoreManagement>().IsCheckStatus(dispHead.ExecDeptID, 0)) { throw new Exception("药房当前正在盘点中,不能发药"); } //生成单据号 string serialNO = NewObject <SerialNumberSource>().GetSerialNumber(SnType.药品, dispHead.ExecDeptID, DGConstant.OP_DS_IPDISPENSE); dispHead.BillNO = Convert.ToInt64(serialNO); dispHead.DispTime = System.DateTime.Now; BindDb(dispHead); dispHead.save(); //发药如果跨批次的化,台账需要记录差额调整记录 foreach (DS_IPDispDetail ispDetailModel in dispDetail) { decimal dispRetailPrice = ispDetailModel.RetailPrice; //5发药明细设置发药头表ID,保存数据在库存处理方法中 ispDetailModel.DispHeadID = dispHead.DispHeadID; //6减库存处理 StoreParam storeParam = new StoreParam(); storeParam.Amount = ispDetailModel.DispAmount; storeParam.BatchNO = ispDetailModel.BatchNO; storeParam.DeptID = ispDetailModel.DeptID; storeParam.DrugID = ispDetailModel.DrugID; storeParam.RetailPrice = ispDetailModel.RetailPrice; storeParam.StockPrice = ispDetailModel.StockPrice; storeParam.UnitID = ispDetailModel.UnitID; storeParam.UnitName = ispDetailModel.UnitName; if (storeParam.Amount > 0) { DGStoreResult storeRtn = NewObject <DSStore>().ReduceStoreAuto(storeParam, true); if (storeRtn.Result != 0) { result.Result = 1; if (storeRtn.Result == 1) { result.LstNotEnough = new List <DGNotEnough>(); DGNotEnough notEnough = new DGNotEnough(); notEnough.DeptID = ispDetailModel.DeptID; notEnough.DrugID = ispDetailModel.DrugID; notEnough.LackAmount = ispDetailModel.DispAmount - storeRtn.StoreAmount; notEnough.DrugInfo = "药品批次号:" + ispDetailModel.BatchNO.ToString(); result.LstNotEnough.Add(notEnough); result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足"; } else { result.ErrMsg = "药品更新库存出错"; } return(result); } else { //NewObject<DSStore>().UpdateValidStore(ispDetailModel.DrugID, ispDetailModel.DeptID, - Math.Abs(ispDetailModel.DispAmount)); foreach (DGBatchAllot batchAllot in storeRtn.BatchAllotList) { //保存发药明细数据 ispDetailModel.DispDetailID = 0; ispDetailModel.DispAmount = batchAllot.DispAmount; if (batchAllot.DispAmount == 0) { continue; } ispDetailModel.RetailPrice = batchAllot.RetailPrice; ispDetailModel.StockPrice = batchAllot.StockPrice; ispDetailModel.RetailFee = batchAllot.DispRetailFee; ispDetailModel.StockFee = batchAllot.DispStockFee; ispDetailModel.BatchNO = batchAllot.BatchNO; ispDetailModel.RetFlag = 0; BindDb(ispDetailModel); ispDetailModel.save(); if (ispDetailModel.RetailPrice != dispRetailPrice) { //零售价不一致,调整金额差额台账 WriteAccount(dispHead, ispDetailModel, storeParam, batchAllot); } //写减批次库存台账 WriteAccount(dispHead, ispDetailModel, batchAllot, 0, storeParam); } } } else { //退药 DGStoreResult storeRtn = NewObject <DSStore>().AddStoreAuto(storeParam, false); if (storeRtn.Result != 0) { result.Result = 1; if (storeRtn.Result == 1) { result.ErrMsg = "药品更新库存出错"; } return(result); } //更新有效库存 NewObject <DSStore>().UpdateValidStore(ispDetailModel.DrugID, ispDetailModel.DeptID, Math.Abs(ispDetailModel.DispAmount)); foreach (DGBatchAllot batchAllot in storeRtn.BatchAllotList) { //保存发药明细数据 ispDetailModel.DispDetailID = 0; ispDetailModel.DispAmount = -Math.Abs(batchAllot.DispAmount); ispDetailModel.RetailPrice = batchAllot.RetailPrice; ispDetailModel.StockPrice = batchAllot.StockPrice; ispDetailModel.RetailFee = batchAllot.DispRetailFee; ispDetailModel.StockFee = batchAllot.DispStockFee; ispDetailModel.BatchNO = batchAllot.BatchNO; ispDetailModel.RetFlag = 1; BindDb(ispDetailModel); ispDetailModel.save(); ispDetailModel.DispAmount = Math.Abs(ispDetailModel.DispAmount); if (ispDetailModel.RetailPrice != dispRetailPrice) { //零售价不一致,调整金额差额台账 WriteAccountRefund(dispHead, ispDetailModel, storeParam, batchAllot); } //写减批次库存台账 WriteAccount(dispHead, ispDetailModel, batchAllot, 1, storeParam); } } //回写住院统领单状态 IP_DrugBillDetail ipDrugBillDetail = (IP_DrugBillDetail)NewObject <IP_DrugBillDetail>().getmodel(ispDetailModel.MsgDetaillID); ipDrugBillDetail.DispDrugFlag = 1; ipDrugBillDetail.DispHeadID = dispHead.DispHeadID; ipDrugBillDetail.save(); //回写住院费用明细单 IP_FeeItemRecord feeItemRecord = (IP_FeeItemRecord)NewObject <IP_FeeItemRecord>().getmodel(ipDrugBillDetail.FeeRecordID); feeItemRecord.DrugFlag = 1; feeItemRecord.save(); } } //发药成功 result.Result = 0; result.DispHeadID = dispHead.DispHeadID; return(result); }