Beispiel #1
0
        /// <summary>
        /// 减少库存
        /// </summary>
        /// <param name="storeParam">库存参数</param>
        /// <returns>处理结果</returns>
        public DGStoreResult ReduceStore(StoreParam storeParam)
        {
            DGStoreResult storeResult = new DGStoreResult();

            if (storeParam != null)
            {
                DS_Storage storage = NewDao <IDSDao>().GetStorageInfo(storeParam.DeptID, storeParam.DrugID);
                if (storage != null)
                {
                    DS_Batch batch = NewDao <IDSDao>().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.save();
                            batch.BatchAmount -= storeParam.Amount;
                            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;
                    storeResult.StoreAmount = storage.Amount;
                    storeResult.UnitAmount  = 1;
                    storeResult.StorageID   = storage.StorageID;
                    return(storeResult);
                }
            }

            return(storeResult);
        }
        /// <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();
                    }
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 按批次增加库存
        /// </summary>
        /// <param name="storeParam">药品库存入参</param>
        /// <returns>库存处理结果</returns>
        public DGStoreResult AddStore(StoreParam storeParam)
        {
            DGStoreResult storeResult = new DGStoreResult();

            if (storeParam != null)
            {
                DS_Storage storage = NewDao <IDSDao>().GetStorageInfo(storeParam.DeptID, storeParam.DrugID);
                if (storage != null)
                {
                    storeParam.StorageId = storage.StorageID;

                    //获取批次数据
                    DS_Batch batch = NewDao <IDSDao>().GetBatchAmount(storeParam.DeptID, storeParam.DrugID, storeParam.BatchNO);
                    if (batch != null)
                    {
                        //如果批次数量加退货数量大于0
                        if (batch.BatchAmount + storeParam.Amount >= 0 && storage.Amount + storeParam.Amount >= 0)
                        {
                            if ((batch.BatchAmount + storeParam.Amount) == 0)
                            {
                                //当库存量为零时,把批次记录标记为已删除,新增加该批次库存,然后再标记为有效
                                batch.DelFlag = 1;
                            }
                            else
                            {
                                batch.DelFlag = 0;
                            }

                            batch.BatchAmount += storeParam.Amount;
                            batch.BindDb(this as AbstractBusines);
                            batch.save();

                            storage.Amount += storeParam.Amount;
                            storage.BindDb(this as AbstractBusines);
                            storage.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    = 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.BussConstant == DGConstant.OP_DS_RETURNSOTRE)
                        {
                            //退库业务
                            storeResult.Result = 1;
                            return(storeResult);
                        }

                        if (storeParam.BussConstant == DGConstant.OP_DS_FIRSTIN)
                        {
                            if (storeParam.Amount < 0)
                            {
                                storeResult.Result = 1;
                                return(storeResult);
                            }
                        }

                        //新建批次
                        DS_Batch dwBatch = NewObject <DS_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.UnitAmount   = storeParam.PackAmount;//单位系数
                        dwBatch.InstoreTime  = System.DateTime.Now;
                        dwBatch.PackUnit     = storeParam.PackUnit;
                        dwBatch.UnitID       = storeParam.UnitID;
                        dwBatch.UnitName     = storeParam.UnitName;
                        dwBatch.RetailPrice  = storeParam.RetailPrice;
                        dwBatch.StockPrice   = storeParam.StockPrice;
                        dwBatch.save();
                        bool addRtn = NewDao <IDSDao>().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    = storeParam.PackAmount;
                            storeResult.StorageID     = storage.StorageID;
                        }
                        else
                        {
                            //添加失败
                            storeResult.Result      = 2;
                            storeResult.StoreAmount = storage.Amount;
                            storeResult.UnitAmount  = storeParam.PackAmount;
                            storeResult.StorageID   = storage.StorageID;
                            return(storeResult);
                        }
                    }
                }
                else
                {
                    if (storeParam.BussConstant == DGConstant.OP_DS_RETURNSOTRE)
                    {
                        //如果返库业务
                        storeResult.Result = 1;
                        return(storeResult);
                    }

                    if (storeParam.Amount < 0)
                    {
                        storeResult.Result = 1;
                        return(storeResult);
                    }

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

                    //新建批次记录
                    DS_Batch dwBatch = NewObject <DS_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.UnitAmount   = storeParam.PackAmount;
                    dwBatch.UnitID       = storeParam.UnitID;
                    dwBatch.PackUnit     = storeParam.PackUnit;
                    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  = storeParam.PackAmount;
                    storeResult.StorageID   = dwStorage.StorageID;
                    return(storeResult);
                }
            }

            return(storeResult);
        }