/// <summary>
        /// 保存台账
        /// </summary>
        /// <typeparam name="TBatch">批次类型</typeparam>
        /// <param name="batchs">批次对象</param>
        /// <param name="currentDetail">当前调价明细单对象</param>
        public void SaveAccout <TBatch>(TBatch batchs, DG_AdjDetail currentDetail)
        {
            string errMsg   = string.Empty;
            int    actYear  = 0;
            int    actMonth = 0;
            int    actId    = 0;

            if (batchs.GetType() == typeof(DW_Batch))
            {
                DW_Batch batch = batchs as DW_Batch;
                currentDetail.AdjAmount = batch.BatchAmount;
                batch.RetailPrice       = currentDetail.NewRetailPrice;
                this.BindDb(batch);
                int dwresult = batch.save();
                if (dwresult > 0)
                {
                    this.BindDb(currentDetail);
                    int detailresult = currentDetail.save();
                    if (detailresult > 0)
                    {
                        if (!GetDWAccountTime(batch.DeptID, out errMsg, out actYear, out actMonth, out actId))
                        {
                            throw new Exception(errMsg);
                        }

                        DW_Account newaccount = new DW_Account();
                        newaccount.AccountType    = 0;
                        newaccount.BalanceFlag    = 0;
                        newaccount.BalanceID      = actId;
                        newaccount.BalanceMonth   = actMonth;
                        newaccount.BalanceYear    = actYear;
                        newaccount.BatchNO        = batch.BatchNO;
                        newaccount.BillNO         = currentDetail.BillNO;
                        newaccount.BusiType       = DGConstant.OP_DW_ADJPRICE;
                        newaccount.CTypeID        = NewDao <IDWDao>().GetTypeId(batch.BatchNO, batch.DrugID);
                        newaccount.LendRetailFee  = currentDetail.NewRetailPrice > currentDetail.OldRetailPrice ? (currentDetail.NewRetailPrice - currentDetail.OldRetailPrice) * currentDetail.AdjAmount : 0;
                        newaccount.DebitRetailFee = currentDetail.NewRetailPrice < currentDetail.OldRetailPrice ? (currentDetail.OldRetailPrice - currentDetail.NewRetailPrice) * currentDetail.AdjAmount : 0;
                        newaccount.OverRetailFee  = currentDetail.NewRetailPrice * currentDetail.AdjAmount;
                        newaccount.DebitAmount    = 0;
                        newaccount.LendAmount     = 0;
                        newaccount.OverAmount     = currentDetail.AdjAmount;
                        newaccount.OverStockFee   = batch.StockPrice * currentDetail.AdjAmount;
                        newaccount.DebitStockFee  = 0;
                        newaccount.LendStockFee   = 0;
                        newaccount.DeptID         = batch.DeptID;
                        newaccount.DetailID       = detailresult;
                        newaccount.DrugID         = batch.DrugID;
                        newaccount.UnitName       = currentDetail.PackUnitName;
                        newaccount.UnitID         = currentDetail.UnitID;
                        newaccount.StockPrice     = batch.StockPrice;
                        newaccount.RegTime        = DateTime.Now;
                        newaccount.RetailPrice    = currentDetail.NewRetailPrice;
                        this.BindDb(newaccount);
                        newaccount.save();
                    }
                }
            }
            else
            {
                DS_Batch batch = batchs as DS_Batch;
                currentDetail.AdjAmount = batch.BatchAmount;
                batch.RetailPrice       = currentDetail.NewRetailPrice;
                this.BindDb(batch);
                int dsresult = batch.save();
                if (dsresult > 0)
                {
                    this.BindDb(currentDetail);
                    int detailresult = currentDetail.save();
                    if (detailresult > 0)
                    {
                        if (!GetDSAccountTime(batch.DeptID, out errMsg, out actYear, out actMonth, out actId))
                        {
                            throw new Exception(errMsg);
                        }

                        DS_Account newaccount = new DS_Account();
                        newaccount.AccountType    = 0;
                        newaccount.BalanceFlag    = 0;
                        newaccount.BalanceID      = actId;
                        newaccount.BalanceMonth   = actMonth;
                        newaccount.BalanceYear    = actYear;
                        newaccount.BatchNO        = batch.BatchNO;
                        newaccount.BillNO         = currentDetail.BillNO;
                        newaccount.BusiType       = DGConstant.OP_DS_ADJPRICE;
                        newaccount.CTypeID        = NewDao <IDSDao>().GetTypeId(batch.BatchNO, batch.DrugID);
                        newaccount.LendRetailFee  = (currentDetail.NewRetailPrice > currentDetail.OldRetailPrice) ? ((currentDetail.NewRetailPrice - currentDetail.OldRetailPrice) * (currentDetail.AdjAmount / batch.UnitAmount)) : 0;
                        newaccount.DebitRetailFee = (currentDetail.NewRetailPrice < currentDetail.OldRetailPrice) ? ((currentDetail.OldRetailPrice - currentDetail.NewRetailPrice) * (currentDetail.AdjAmount / batch.UnitAmount)) : 0;
                        newaccount.OverRetailFee  = (currentDetail.NewRetailPrice * (currentDetail.AdjAmount / batch.UnitAmount));
                        newaccount.DebitAmount    = 0;
                        newaccount.LendAmount     = 0;
                        newaccount.OverAmount     = currentDetail.AdjAmount;
                        newaccount.OverStockFee   = (batch.StockPrice * (currentDetail.AdjAmount / batch.UnitAmount));
                        newaccount.DebitStockFee  = 0;
                        newaccount.LendStockFee   = 0;
                        newaccount.DeptID         = batch.DeptID;
                        newaccount.DetailID       = detailresult;
                        newaccount.DrugID         = batch.DrugID;
                        newaccount.UnitName       = currentDetail.UnitName;
                        newaccount.UnitID         = currentDetail.UnitID;
                        newaccount.StockPrice     = batch.StockPrice;
                        newaccount.RegTime        = DateTime.Now;
                        newaccount.RetailPrice    = currentDetail.NewRetailPrice;
                        this.BindDb(newaccount);
                        newaccount.save();
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 按批次增加库存
        /// </summary>
        /// <param name="storeParam">药品库存入参</param>
        /// <returns>库存处理结果</returns>
        public DGStoreResult AddStore(StoreParam storeParam)
        {
            DGStoreResult storeResult = new DGStoreResult();

            if (storeParam != null)
            {
                DW_Storage storage = NewDao <IDWDao>().GetStorageInfo(storeParam.DeptID, storeParam.DrugID);
                if (storage != null)
                {
                    //获取批次数据
                    DW_Batch batch = NewDao <IDWDao>().GetBatchAmount(storeParam.DeptID, storeParam.DrugID, storeParam.BatchNO);
                    if (batch != null)
                    {
                        //如果批次数量加退货数量大于0
                        if (batch.BatchAmount + storeParam.Amount >= 0)
                        {
                            bool addRtn = NewDao <IDWDao>().AddStoreAmount(storeParam.DeptID, storeParam.DrugID, storeParam.Amount);
                            addRtn = NewDao <IDWDao>().AddBatchAmount(storeParam.DeptID, storeParam.DrugID, storeParam.BatchNO, storeParam.Amount);
                            if (addRtn)
                            {
                                //添加成功
                                DGBatchAllot batchAllot = new DGBatchAllot();
                                batchAllot.BatchNO        = storeParam.BatchNO;
                                batchAllot.RetailPrice    = batch.RetailPrice;
                                batchAllot.StockPrice     = batch.StockPrice;
                                batchAllot.StoreAmount    = batch.BatchAmount + storeParam.Amount;
                                batchAllot.StorageID      = storage.StorageID;
                                storeResult.BatchAllot    = new DGBatchAllot[1];
                                storeResult.BatchAllot[0] = batchAllot;
                                storeResult.StoreAmount   = storage.Amount + storeParam.Amount;
                                storeResult.UnitAmount    = 1;
                                storeResult.StorageID     = storage.StorageID;
                                return(storeResult);
                            }
                            else
                            {
                                //添加失败
                                storeResult.Result      = 2;
                                storeResult.StoreAmount = storage.Amount;
                                storeResult.UnitAmount  = 1;
                                storeResult.StorageID   = storage.StorageID;
                                return(storeResult);
                            }
                        }
                        else
                        {
                            storeResult.Result      = 1;
                            storeResult.StoreAmount = storage.Amount;
                            storeResult.UnitAmount  = 1;
                            storeResult.StorageID   = storage.StorageID;
                            return(storeResult);
                        }
                    }
                    else
                    {
                        //批次不存在
                        if (storeParam.Amount < 0)
                        {
                            storeResult.Result = 1;
                            return(storeResult);
                        }

                        //新建批次
                        DW_Batch dwBatch = NewObject <DW_Batch>();
                        dwBatch.StorageID    = storage.StorageID;
                        dwBatch.BatchAmount  = storeParam.Amount;
                        dwBatch.BatchNO      = storeParam.BatchNO;
                        dwBatch.ValidityTime = storeParam.ValidityTime;
                        dwBatch.DelFlag      = 0;
                        dwBatch.DeptID       = storeParam.DeptID;
                        dwBatch.DrugID       = storeParam.DrugID;
                        dwBatch.DelFlag      = 0;
                        dwBatch.InstoreTime  = System.DateTime.Now;
                        dwBatch.UnitID       = storeParam.UnitID;
                        dwBatch.UnitName     = storeParam.UnitName;
                        dwBatch.RetailPrice  = storeParam.RetailPrice;
                        dwBatch.StockPrice   = storeParam.StockPrice;
                        dwBatch.save();
                        bool addRtn = NewDao <IDWDao>().AddStoreAmount(storeParam.DeptID, storeParam.DrugID, storeParam.Amount);//改库存
                        if (addRtn)
                        {
                            //构建返回值
                            DGBatchAllot batchAllot = new DGBatchAllot();
                            batchAllot.BatchNO        = storeParam.BatchNO;
                            batchAllot.RetailPrice    = dwBatch.RetailPrice;
                            batchAllot.StockPrice     = dwBatch.StockPrice;
                            batchAllot.StoreAmount    = dwBatch.BatchAmount;
                            batchAllot.StorageID      = storage.StorageID;
                            storeResult.BatchAllot    = new DGBatchAllot[1];
                            storeResult.BatchAllot[0] = batchAllot;
                            storeResult.StoreAmount   = storage.Amount + storeParam.Amount;
                            storeResult.UnitAmount    = 1;
                            storeResult.StorageID     = storage.StorageID;
                        }
                        else
                        {
                            //添加失败
                            storeResult.Result      = 2;
                            storeResult.StoreAmount = storage.Amount;
                            storeResult.UnitAmount  = 1;
                            storeResult.StorageID   = storage.StorageID;
                            return(storeResult);
                        }
                    }
                }
                else
                {
                    if (storeParam.Amount < 0)
                    {
                        storeResult.Result = 1;
                        return(storeResult);
                    }

                    //新建库存记录
                    DW_Storage dwStorage = NewObject <DW_Storage>();
                    dwStorage.DrugID      = storeParam.DrugID;
                    dwStorage.DeptID      = storeParam.DeptID;
                    dwStorage.DelFlag     = 0;
                    dwStorage.UnitID      = storeParam.UnitID;
                    dwStorage.UnitName    = storeParam.UnitName;
                    dwStorage.Amount      = storeParam.Amount;
                    dwStorage.UpperLimit  = 0;
                    dwStorage.LowerLimit  = 0;
                    dwStorage.LocationID  = 0;
                    dwStorage.Place       = string.Empty;
                    dwStorage.RegTime     = System.DateTime.Now;
                    dwStorage.LStockPrice = 0;
                    dwStorage.save();

                    //新建批次记录
                    DW_Batch dwBatch = NewObject <DW_Batch>();
                    dwBatch.StorageID    = dwStorage.StorageID;
                    dwBatch.BatchAmount  = storeParam.Amount;
                    dwBatch.BatchNO      = storeParam.BatchNO;
                    dwBatch.ValidityTime = storeParam.ValidityTime;
                    dwBatch.DelFlag      = 0;
                    dwBatch.DeptID       = storeParam.DeptID;
                    dwBatch.DrugID       = storeParam.DrugID;
                    dwBatch.DelFlag      = 0;
                    dwBatch.InstoreTime  = dwStorage.RegTime;
                    dwBatch.UnitID       = storeParam.UnitID;
                    dwBatch.UnitName     = storeParam.UnitName;
                    dwBatch.RetailPrice  = storeParam.RetailPrice;
                    dwBatch.StockPrice   = storeParam.StockPrice;
                    dwBatch.save();

                    //构建返回值
                    DGBatchAllot batchAllot = new DGBatchAllot();
                    batchAllot.BatchNO     = storeParam.BatchNO;
                    batchAllot.RetailPrice = storeParam.RetailPrice;
                    batchAllot.StockPrice  = storeParam.StockPrice;
                    batchAllot.StoreAmount = storeParam.Amount;
                    batchAllot.StorageID   = dwStorage.StorageID;
                    storeResult.BatchAllot = new DGBatchAllot[1] {
                        batchAllot
                    };
                    storeResult.StoreAmount = storeParam.Amount;
                    storeResult.UnitAmount  = 1;
                    storeResult.StorageID   = dwStorage.StorageID;
                    return(storeResult);
                }
            }

            return(storeResult);
        }
Exemple #3
0
        /// <summary>
        /// 按批次减少库存
        /// </summary>
        /// <param name="storeParam">库存处理入参</param>
        /// <returns>库存处理结果</returns>
        public DGStoreResult ReduceStore(StoreParam storeParam)
        {
            DGStoreResult storeResult = new DGStoreResult();

            if (storeParam != null)
            {
                DW_Storage storage = NewDao <IDWDao>().GetStorageInfo(storeParam.DeptID, storeParam.DrugID);

                if (storage != null)
                {
                    DW_Batch batch = NewDao <IDWDao>().GetBatchAmount(storeParam.DeptID, storeParam.DrugID, storeParam.BatchNO);

                    if (batch != null)
                    {
                        //本批次存量 和库存总量都必须大于出库数量
                        if (batch.BatchAmount >= storeParam.Amount && storage.Amount >= storeParam.Amount)
                        {
                            storage.Amount = storage.Amount - storeParam.Amount;
                            storage.BindDb(this as AbstractBusines);
                            storage.save();
                            batch.BatchAmount -= storeParam.Amount;
                            batch.BindDb(this as AbstractBusines);
                            batch.save();

                            DGBatchAllot batchAllot = new DGBatchAllot();
                            batchAllot.BatchNO        = storeParam.BatchNO;
                            batchAllot.RetailPrice    = batch.RetailPrice;
                            batchAllot.StockPrice     = batch.StockPrice;
                            batchAllot.StoreAmount    = batch.BatchAmount;
                            batchAllot.StorageID      = storage.StorageID;
                            storeResult.BatchAllot    = new DGBatchAllot[1];
                            storeResult.BatchAllot[0] = batchAllot;
                            storeResult.StoreAmount   = storage.Amount;
                            storeResult.UnitAmount    = storeParam.UnitAmount;
                            storeResult.StorageID     = storage.StorageID;
                            return(storeResult);
                        }
                        else
                        {
                            storeResult.Result      = 1;
                            storeResult.StoreAmount = storage.Amount;
                            storeResult.UnitAmount  = 1;
                            storeResult.StorageID   = storage.StorageID;
                            return(storeResult);
                        }
                    }
                    else
                    {
                        storeResult.Result      = 1;
                        storeResult.StoreAmount = storage.Amount;
                        storeResult.UnitAmount  = 1;
                        storeResult.StorageID   = storage.StorageID;
                        return(storeResult);
                    }
                }
                else
                {
                    storeResult.Result = 1;
                    return(storeResult);
                }
            }

            return(storeResult);
        }
        /// <summary>
        /// 审核药库单据
        /// </summary>
        /// <param name="headID">药库入库单表头ID</param>
        /// <param name="auditEmpID">审核人ID</param>
        /// <param name="auditEmpName">审核人姓名</param>
        /// <param name="workId">机构ID</param>
        /// <returns>单据处理结果</returns>
        public override DGBillResult AuditBill(int headID, int auditEmpID, string auditEmpName, int workId)
        {
            DW_InStoreHead          head       = (DW_InStoreHead)NewObject <DW_InStoreHead>().getmodel(headID);
            List <DW_InStoreDetail> lstDetails = NewObject <DW_InStoreDetail>().getlist <DW_InStoreDetail>("InHeadID=" + headID);

            head.AuditEmpID   = auditEmpID;
            head.AuditEmpName = auditEmpName;
            head.AuditTime    = System.DateTime.Now;
            head.AuditFlag    = 1;
            head.save();
            DGBillResult result = new DGBillResult();

            if (!NewObject <DrugDeptMgr>().IsDeptChecked(head.DeptID, workId))
            {
                result.Result = 1;
                result.ErrMsg = "当前科室处于盘点状态或者没有设置科室的盘点状态 不能处理业务操作";
                return(result);
            }

            foreach (DW_InStoreDetail detail in lstDetails)
            {
                //获取批次数据
                DW_Batch batch = NewDao <IDWDao>().GetBatchAmount(head.DeptID, detail.DrugID, detail.BatchNo);

                if (batch != null)
                {
                    if (detail.Amount < 0)
                    {
                        if ((batch.RetailPrice.Equals(detail.RetailPrice) == false) ||
                            (batch.StockPrice.Equals(detail.StockPrice) == false))
                        {
                            result.Result = 1;
                            result.ErrMsg = "编码【" + detail.DrugID.ToString() + "的(进货价/零售价)】与【" + batch.BatchNO + "】批次价格不一致(进货价:" + batch.StockPrice.ToString()
                                            + ",零售价:" + batch.RetailPrice.ToString() + "),请核查库存!";

                            return(result);
                        }
                    }
                    else
                    {
                        if ((batch.RetailPrice.Equals(detail.RetailPrice) == false) ||
                            (batch.StockPrice.Equals(detail.StockPrice) == false))
                        {
                            result.Result = 1;
                            result.ErrMsg = "编码【" + detail.DrugID.ToString() + "的(进货价/零售价)】与【" + batch.BatchNO + "】批次价格不一致(进货价:" + batch.StockPrice.ToString()
                                            + ",零售价:" + batch.RetailPrice.ToString() + "),请核查库存!";

                            return(result);
                        }
                    }
                }

                StoreParam storeParam = new StoreParam();
                storeParam.Amount       = detail.Amount;
                storeParam.BatchNO      = detail.BatchNo;
                storeParam.DeptID       = head.DeptID;
                storeParam.DrugID       = detail.DrugID;
                storeParam.RetailPrice  = detail.RetailPrice;
                storeParam.StockPrice   = detail.StockPrice;
                storeParam.UnitID       = detail.UnitID;
                storeParam.UnitName     = detail.UnitName;
                storeParam.ValidityTime = detail.ValidityDate;
                storeParam.BussConstant = head.BusiType;

                //storeParam.PackUnit = detail.PackUnit;
                DGStoreResult storeRtn = iStore.AddStore(storeParam);
                if (storeRtn.Result != 0)
                {
                    result.Result = 1;
                    if (storeRtn.Result == 1)
                    {
                        result.LstNotEnough = new List <DGNotEnough>();
                        DGNotEnough notEnough = new DGNotEnough();
                        notEnough.DeptID     = head.DeptID;
                        notEnough.DrugID     = detail.DrugID;
                        notEnough.LackAmount = storeRtn.StoreAmount + detail.Amount;
                        notEnough.DrugInfo   = "药品编号" + detail.DrugID + " 药品批次号:" + detail.BatchNo;
                        result.LstNotEnough.Add(notEnough);
                        result.ErrMsg = "【" + notEnough.DrugInfo + "】库存不足";
                    }
                    else
                    {
                        result.ErrMsg = "药品更新库存出错";
                    }

                    return(result);
                }
                else
                {
                    WriteAccount(head, detail, storeRtn);
                }
            }

            result.Result = 0;
            return(result);
        }