Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 3
0
        public ServiceResponseData IPDisp()
        {
            //每次发药产生一个发药表头
            DS_IPDispHead dispHead     = new DS_IPDispHead();
            DataTable     dtDispDetail = requestData.GetData <DataTable>(0);
            int           sendEmpID    = requestData.GetData <int>(1);
            string        sendEmpName  = requestData.GetData <string>(2);
            int           deptId       = requestData.GetData <int>(3);

            dispHead.DispHeadID   = 0;
            dispHead.BillNO       = 0;
            dispHead.RetailFee    = Convert.ToDecimal(dtDispDetail.Compute("sum(SellFee)", "chk=1"));
            dispHead.DispenserID  = sendEmpID;
            dispHead.PharmacistID = sendEmpID;
            dispHead.DispTime     = DateTime.Now;
            dispHead.RefFlag      = 0;
            dispHead.BusiType     = DGConstant.OP_DS_IPDISPENSE;
            dispHead.DeptID       = Convert.ToInt32(dtDispDetail.Rows[0]["PresDeptID"]);//科室
            dispHead.ExecDeptID   = deptId;
            dispHead.BillTypeID   = Convert.ToInt32(dtDispDetail.Rows[0]["BillTypeID"]);

            //检查统领单是否存在,不存在抛出异常
            DataTable dtCheck = DistinctTableInfo(dtDispDetail, new string[] { "chk", "BillHeadID", "BillDetailID", "ChemName", "PatName" });

            foreach (DataRow r in dtCheck.Rows)
            {
                if (r["chk"].ToString() == "1")
                {
                    IP_DrugBillDetail m = (IP_DrugBillDetail)NewObject <IP_DrugBillDetail>().getmodel(r["BillDetailID"].ToString());
                    if (m == null)
                    {
                        throw new Exception("患者【" + r["PatName"].ToString() + "】的药品【" + r["ChemName"].ToString() + "】明细单据不存在,请刷新数据重发");
                    }
                }
            }

            //获取该结算单所有明细记录
            List <DS_IPDispDetail> dispDetail = ConvertFeeDetailModel(dtDispDetail, deptId);
            IPDispBill             iProcess   = NewObject <IPDispBill>();
            DGBillResult           rtn        = new DGBillResult();

            try
            {
                oleDb.BeginTransaction();
                rtn = iProcess.IPDisp(dispHead, dispDetail);
                if (rtn.Result == 0)
                {
                    oleDb.CommitTransaction();
                }
                else
                {
                    oleDb.RollbackTransaction();
                }

                responseData.AddData(rtn);
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                rtn.ErrMsg = error.Message;
                rtn.Result = 2;
                responseData.AddData(rtn);
            }

            return(responseData);
        }
Exemplo n.º 4
0
        /// <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);
        }