public void TestAddToStockRequirementDetail() { var storageRecordInfo = new StorageRecordInfo { FilialeId = new Guid("7AE62AF0-EB1F-49C6-8FD1-128D77C84698"), WarehouseId = new Guid("B5BCDF6E-95D5-4AEE-9B19-6EE218255C05") }; IList <StorageRecordDetailInfo> storageRecordDetailInfos = new List <StorageRecordDetailInfo> { new StorageRecordDetailInfo { RealGoodsId = new Guid("D2F69F05-C02F-4549-93C8-D3CE768D82E2") } }; _stockCenterSao.GetGoodsQuantityByRealGoodsIdsIEnumerableOfGuidGuidGuid = (guids, guid, arg3) => new List <GoodsStockQuantityInfo> { new GoodsStockQuantityInfo { RealGoodsId = new Guid("D2F69F05-C02F-4549-93C8-D3CE768D82E2") } }; try { _goodsStockCurrent = new GoodsStockCurrent(_stubIGoodsStockCurrent, _stockCenterSao); _goodsStockCurrent.AddToStockRequirementDetail(storageRecordInfo, storageRecordDetailInfos, string.Empty, string.Empty, true); Assert.IsTrue(true); } catch (Exception) { Assert.IsFalse(false); } }
/// <summary> /// 确认收获异常,原采购完成,生成新采购 /// </summary> /// <param name="applyId"></param> /// <param name="storageRecord"></param> /// <param name="storageRecordDetail"></param> /// <param name="applyStock"></param> /// <param name="stockDetailInfos"></param> /// <param name="list"></param> /// <returns></returns> public int ShopConfirmPurchaseOrder(Guid applyId, StorageRecordInfo storageRecord, IList <StorageRecordDetailInfo> storageRecordDetail, ApplyStockInfo applyStock, IList <ApplyStockDetailInfo> stockDetailInfos, IList <ReckoningInfo> list) { string msg; return(ApplyStockBLL.WriteInstance.ShopConfirmPurchaseOrder(applyId, storageRecord, storageRecordDetail, applyStock, stockDetailInfos, list, out msg)); }
public ResultInfo InsertStorageRecord(StorageRecordInfo storageRecord, IList <StorageRecordDetailInfo> storageRecordDetails) { try { _storageManager.NewInsertStockAndGoods(storageRecord, storageRecordDetails); return(ResultInfo.Success()); } catch (Exception ex) { return(ResultInfo.Failure(ex.Message)); } }
public void ShopConfirmPurchaseOrderTest() { var applyId = new Guid(""); StorageRecordInfo storageRecord = null; IList <StorageRecordDetailInfo> storageRecordDetail = null; ApplyStockInfo applyStock = null; IList <ApplyStockDetailInfo> stockDetailInfos = null; string msg; int actual = _target.ShopConfirmPurchaseOrder(applyId, storageRecord, storageRecordDetail, applyStock, stockDetailInfos, out msg); Assert.IsNull(actual >= 0); //Assert.AreEqual(expected, actual); //Assert.Inconclusive("验证此测试方法的正确性。"); }
public void UpdateStorageRecord() { var flag = false; var stockList = _storageManager.GetStorageRecordListByOriginalCode("04SPH1408270940"); var stockInfo = stockList.FirstOrDefault(act => act.StockState == (int)StorageState.Pass); if (stockInfo != null && stockInfo.StockId != Guid.Empty) { var stockDtailList = _storageManager.GetStorageRecordDetailListByStockId(stockInfo.StockId); //联盟店生成调拨出库 异常差额 已审核 var allianceOutStorage = new StockDTO() { CompanyID = new Guid(""), DateCreated = DateTime.Now, Description = "调拨异常差额出库", OriginalTradeCode = "" }; var allianceOutStorageDetails = new List <StockDetailDTO>(); //ERP生成调拨入库 异常差额 已审核 var erpInStoreageInfo = new StorageRecordInfo(); var erpInStorageDetails = new List <StorageRecordDetailInfo>(); foreach (var storageRecordDetailInfo in stockDtailList) { storageRecordDetailInfo.Quantity = storageRecordDetailInfo.Quantity + 1; var detail = storageRecordDetailInfo.DeepCopy() as StorageRecordDetailInfo; var detailDto = new StockDetailDTO(); erpInStorageDetails.Add(detail); allianceOutStorageDetails.Add(detailDto); } using (var ts = new TransactionScope(TransactionScopeOption.Required)) { //修改原调拨出库单据 string msg; _storageManager.InsertStockAndGoods(erpInStoreageInfo, erpInStorageDetails); ShopSao.InsertStock(allianceOutStorage.StockID, allianceOutStorage, allianceOutStorageDetails, false, null, 0, out msg); var result = _target.UpdateApplyStockState(new Guid("842B65D2-3892-43DA-8BE5-99B0F8F0E68D"), (int)ApplyStockState.Pended, false, out msg); if (result) { ts.Complete(); } } } Assert.IsTrue(flag); }
/// <summary> /// 确认收获异常,原采购完成,生成新采购 /// </summary> /// <param name="applyId"></param> /// <param name="storageRecord"></param> /// <param name="storageRecordDetail"></param> /// <param name="applyStock"></param> /// <param name="stockDetailInfos"></param> /// <param name="list"></param> /// <param name="msg"> </param> /// <returns></returns> public int ShopConfirmPurchaseOrder(Guid applyId, StorageRecordInfo storageRecord, IList <StorageRecordDetailInfo> storageRecordDetail, ApplyStockInfo applyStock, IList <ApplyStockDetailInfo> stockDetailInfos, IList <ReckoningInfo> list, out string msg) { int state = 0; //获取商品特定时间下最近的结算价存档 var applyInfo = _applyStockDao.FindById(applyId); if (applyInfo == null) { msg = "门店要货申请记录未找到!"; return(-1); } IDictionary <Guid, decimal> dicAvgSettlePrice; using (var scope = new TransactionScope()) { var isError = storageRecord != null && storageRecordDetail != null && storageRecordDetail.Count != 0; var stockState = isError ? (int)ApplyStockState.CheckPending : (int)ApplyStockState.Finished; var flag = UpdateApplyStockState(applyInfo, stockState, false, out dicAvgSettlePrice, out msg); if (flag) { if (isError) { try { _storageManager.NewAddStorageRecordAndDetailList(storageRecord, storageRecordDetail, out msg); } catch (Exception ex) { state = -1; SAL.LogCenter.LogService.LogError(string.Format("ERP服务门店确认收获添加库存记录失败,applyID={0},storageRecord={1},storageRecordDetail={2},applyStock={3},stockDetailInfos={4},reckoningList={5}", applyId, new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecord), new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecordDetail), new Framework.Core.Serialize.JsonSerializer().Serialize(applyStock), new Framework.Core.Serialize.JsonSerializer().Serialize(stockDetailInfos), new Framework.Core.Serialize.JsonSerializer().Serialize(list)), "门店管理", ex); } } if (state == 0 && applyStock != null && stockDetailInfos != null && stockDetailInfos.Count != 0) { state = AddNewApplyStock(applyStock, stockDetailInfos, dicAvgSettlePrice, out msg); } if (state >= 0) { bool result = true; if (list != null && list.Count > 0) { foreach (var reckoningInfo in list) { string error; var sucess = _reckoning.Insert(reckoningInfo, out error); if (!sucess) { result = false; msg = "插入往来帐失败!"; break; } } } if (result) { scope.Complete(); } else { state = -1; SAL.LogCenter.LogService.LogError(string.Format("ERP服务门店确认收获更改状态失败,applyID={0},storageRecord={1},storageRecordDetail={2},applyStock={3},stockDetailInfos={4},reckoningList={5}", applyId, new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecord), new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecordDetail), new Framework.Core.Serialize.JsonSerializer().Serialize(applyStock), new Framework.Core.Serialize.JsonSerializer().Serialize(stockDetailInfos), new Framework.Core.Serialize.JsonSerializer().Serialize(list)), "门店管理"); } } } else { state = -1; SAL.LogCenter.LogService.LogError(string.Format("ERP服务门店确认收获更改状态失败,applyID={0},storageRecord={1},storageRecordDetail={2},applyStock={3},stockDetailInfos={4},reckoningList={5}", applyId, new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecord), new Framework.Core.Serialize.JsonSerializer().Serialize(storageRecordDetail), new Framework.Core.Serialize.JsonSerializer().Serialize(applyStock), new Framework.Core.Serialize.JsonSerializer().Serialize(stockDetailInfos), new Framework.Core.Serialize.JsonSerializer().Serialize(list)), "门店管理"); } } return(state); }
/// <summary> /// 按指定计算日期、销售公司、物流配送公司、仓库、储位,生成销售公司的采购单和采购入库单 /// </summary> /// <param name="calculateDate"></param> /// <param name="saleFilialeThirdCompanyId">销售公司往来单位Id</param> /// <param name="hostingFilialeId">物流公司ID</param> /// <param name="warehouseId"></param> /// <param name="storageType"></param> internal static void GenerateSaleFilialeStockInAndPurchasing(DateTime calculateDate, Guid saleFilialeThirdCompanyId, Guid hostingFilialeId, Guid warehouseId, int storageType) { var hostingFilialeThirdCompany = _companyCussent.GetCompanyByRelevanceFilialeId(hostingFilialeId); //根据物流公司获取往来单位 if (hostingFilialeThirdCompany == null) { return; } var saleFilialeId = _companyCussent.GetRelevanceFilialeIdByCompanyId(saleFilialeThirdCompanyId); //根据往来单位获取公司 if (saleFilialeId == Guid.Empty) { return; } if (saleFilialeId == hostingFilialeId) { return; } bool isGenerated = SaleFilialeStorageInDal.IsGenerated(calculateDate, saleFilialeId, hostingFilialeThirdCompany.CompanyId, warehouseId, storageType); if (!isGenerated) { var simpleStockRecordDetails = SaleFilialeStorageInDal.GetSaleFilialeStockInDetailList(calculateDate, saleFilialeThirdCompanyId, hostingFilialeId, warehouseId, storageType); if (!simpleStockRecordDetails.Any()) { return; } // 不重新获取采购价,直接取对应的物流配送公司给销售公司的的销售出库单里计算即可得到 var purchasePriceDict = (from item in simpleStockRecordDetails.GroupBy(g => g.GoodsId) select new KeyValuePair <Guid, decimal>(item.Key, item.Sum(s => s.Amount) / item.Sum(s => s.Quantity))) .ToDictionary(kv => kv.Key, kv => kv.Value); //销售公司采购单 var purchasingRecord = new PurchasingInfo { PurchasingID = Guid.NewGuid(), PurchasingNo = _codeManager.GetCode(CodeType.PH), CompanyID = hostingFilialeThirdCompany.CompanyId, CompanyName = hostingFilialeThirdCompany.CompanyName, FilialeID = saleFilialeId, WarehouseID = warehouseId, PurchasingState = (int)PurchasingState.AllComplete, PurchasingType = (int)PurchasingType.AutoInternal, StartTime = calculateDate, EndTime = DateTime.Now, Description = "[内部采购]", PmId = Guid.Empty, PmName = string.Empty, Director = "系统", PersonResponsible = Guid.Empty, ArrivalTime = calculateDate.Date, PurchasingFilialeId = saleFilialeId }; var purchasingRecordDetailList = simpleStockRecordDetails.Select(m => new PurchasingDetailInfo { PurchasingGoodsID = Guid.NewGuid(), PurchasingID = purchasingRecord.PurchasingID, GoodsID = m.RealGoodsId, GoodsName = m.GoodsName, GoodsCode = m.GoodsCode, Specification = m.Specification, CompanyID = hostingFilialeThirdCompany.CompanyId, Price = purchasePriceDict.ContainsKey(m.GoodsId) ? purchasePriceDict[m.GoodsId] : 0, PlanQuantity = m.Quantity, PurchasingGoodsType = (int)PurchasingGoodsType.NoGift, RealityQuantity = m.Quantity, State = 1, Description = "[内部采购]", Units = string.Empty }).ToList(); //销售公司采购进货入库单 var stockRecord = new StorageRecordInfo { StockId = Guid.NewGuid(), TradeCode = _codeManager.GetCode(CodeType.RK), FilialeId = saleFilialeId, WarehouseId = warehouseId, ThirdCompanyID = hostingFilialeThirdCompany.CompanyId, DateCreated = calculateDate.Date, Transactor = "系统操作", Description = "[内部采购]", LogisticsCode = string.Empty, StockType = (int)StorageRecordType.BuyStockIn, StockState = (int)StorageRecordState.Finished, LinkTradeType = (int)StorageRecordLinkTradeType.Purchasing, LinkTradeCode = purchasingRecord.PurchasingNo, LinkTradeID = purchasingRecord.PurchasingID, RelevanceFilialeId = Guid.Empty, RelevanceWarehouseId = Guid.Empty, StockValidation = false, StorageType = storageType, SubtotalQuantity = 0, AccountReceivable = 0, TradeBothPartiesType = (int)TradeBothPartiesType.HostingToSale }; var stockRecordDetailList = simpleStockRecordDetails.Select(m => new StorageRecordDetailInfo { StockId = stockRecord.StockId, GoodsId = m.GoodsId, Specification = m.Specification, Quantity = m.Quantity, UnitPrice = purchasePriceDict.ContainsKey(m.GoodsId) ? purchasePriceDict[m.GoodsId] : 0, GoodsName = m.GoodsName, GoodsCode = m.GoodsCode, RealGoodsId = m.RealGoodsId, Description = "[内部采购]", NonceWarehouseGoodsStock = 0, Units = string.Empty, ShelfType = 1 }).ToList(); List <ReckoningInfo> reckoningInfos = new List <ReckoningInfo>(); var accountReceivable = Math.Round(Math.Abs(stockRecordDetailList.Sum(act => act.Quantity * act.UnitPrice)), 2); //可得采购应付款 var saleFilialeReckoning = new ReckoningInfo(Guid.NewGuid(), stockRecord.FilialeId, stockRecord.ThirdCompanyID, _codeManager.GetCode(CodeType.PY), stockRecord.Description, -accountReceivable, (int)ReckoningType.Defray, (int)ReckoningStateType.Currently, (int)CheckType.NotCheck, (int)AuditingState.Yes, stockRecord.TradeCode, stockRecord.WarehouseId) { LinkTradeType = (int)ReckoningLinkTradeType.StockIn, IsOut = stockRecord.IsOut }; //可镜销售出库应收款 var hostingFilialeReckoning = new ReckoningInfo(Guid.NewGuid(), hostingFilialeId, saleFilialeThirdCompanyId, _codeManager.GetCode(CodeType.PY), stockRecord.Description, accountReceivable, (int)ReckoningType.Income, (int)ReckoningStateType.Currently, (int)CheckType.NotCheck, (int)AuditingState.Yes, stockRecord.TradeCode, stockRecord.WarehouseId) { LinkTradeType = (int)ReckoningLinkTradeType.GoodsOrder, IsOut = stockRecord.IsOut }; reckoningInfos.Add(saleFilialeReckoning); reckoningInfos.Add(hostingFilialeReckoning); using (var tran = new TransactionScope(TransactionScopeOption.Required)) { try { var result = _purchasingManager.Insert(purchasingRecord, purchasingRecordDetailList); if (!result) { LogError(string.Format("生成采购单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType)); return; } result = _storageManager.AddStorageRecord(stockRecord, stockRecordDetailList); if (!result) { LogError(string.Format("生成采购入库单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType)); return; } foreach (var reckoningInfo in reckoningInfos) { string errorMessage; result = _reckoning.Insert(reckoningInfo, out errorMessage); if (!result) { LogError(string.Format("生成往来账失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4},{5}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType, errorMessage)); return; } } // 计算即时结算价 var items = _realTimeGrossSettlementManager.CreateByPurchaseStockIn(stockRecord.StockId, calculateDate).ToList(); items.ForEach(m => _realTimeGrossSettlementManager.Calculate(m)); tran.Complete(); LogInfo(string.Format("生成成功!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType)); } catch (Exception ex) { LogError(string.Format("生成采购单和采购入库单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType), ex); return; } } } }
/// <summary>Grid操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void SemiStockGrid_OnItemCommand(object sender, GridCommandEventArgs e) { var item = e.Item as GridDataItem; if (item != null) { var dataItem = item; var stockId = new Guid(dataItem.GetDataKeyValue("StockId").ToString()); var storageInfo = _storageRecordDao.GetStorageRecord(stockId); //作废 if (e.CommandName == "Cancellation") { #region --> Cancellation var personnelInfo = CurrentSession.Personnel.Get(); if (storageInfo.StockType == (int)StorageRecordType.LendOut) { string description = "[借出单作废] " + personnelInfo.RealName + "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]"; var borrowLendInfo = _borrowLendDao.GetBorrowLendInfo(stockId); if (borrowLendInfo != null) { var outStorageInfo = _storageRecordDao.GetStorageRecord(borrowLendInfo.BorrowLendId); if (outStorageInfo != null) { //作废借出返回单 _storageManager.NewSetStateStorageRecord(outStorageInfo.StockId, StorageRecordState.Canceled, description); } } //作废借出单 _storageManager.NewSetStateStorageRecord(stockId, StorageRecordState.Canceled, description); //入库单作废操作记录添加 WebControl.AddOperationLog(personnelInfo.PersonnelId, personnelInfo.RealName, stockId, storageInfo.TradeCode, OperationPoint.StorageInManager.Cancel.GetBusinessInfo(), string.Empty); } else { string description = "[出库作废] " + CurrentSession.Personnel.Get().RealName + "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]"; _storageManager.NewSetStateStorageRecord(stockId, StorageRecordState.Canceled, description); //入库单作废操作记录添加 WebControl.AddOperationLog(personnelInfo.PersonnelId, personnelInfo.RealName, stockId, storageInfo.TradeCode, OperationPoint.StorageInManager.Cancel.GetBusinessInfo(), string.Empty); } #endregion } else if (e.CommandName == "Validation") { //售后确认 #region -->Validation StorageRecordInfo storageRecordInfo = _storageRecordDao.GetStorageRecord(stockId); var stockValidation = (CheckBox)dataItem.FindControl("CB_StockValidation"); bool stockValidationType = stockValidation.Checked; _storageRecordDao.UpdateStorageRecordDetailByStockId(stockId, stockValidationType); var personnelInfo = CurrentSession.Personnel.Get(); //出库确认添加操作记录添加 WebControl.AddOperationLog(personnelInfo.PersonnelId, personnelInfo.RealName, stockId, storageRecordInfo.TradeCode, OperationPoint.StorageOutManager.Confirm.GetBusinessInfo(), string.Empty); #endregion } RAM.ResponseScripts.Add("setTimeout(function(){ refreshGrid(); }, " + GlobalConfig.PageAutoRefreshDelayTime + ");"); } }
/// <summary> /// 联盟店出库审核 /// </summary> /// <param name="stockId"></param> /// <param name="goodsStockList"></param> /// <param name="semiStock"></param> /// <param name="dicGoods"></param> /// <param name="goodsInfoList"></param> /// <param name="errorMsg"></param> /// <returns></returns> public bool IsSuccess(Guid stockId, IList <StorageRecordDetailInfo> goodsStockList, StorageRecordInfo semiStock, Dictionary <Guid, ERP.Model.Goods.GoodsInfo> dicGoods, List <ERP.Model.Goods.GoodsInfo> goodsInfoList, out string errorMsg) { var isSuccess = false; using (var ts = new TransactionScope(TransactionScopeOption.Required)) { try { foreach (StorageRecordDetailInfo gsi in goodsStockList) { gsi.Quantity = -gsi.Quantity; _current.AddToStockRequirementDetail(semiStock, new[] { gsi }, "调拨出库-[编辑]", "操作人:111202", -Math.Abs(gsi.Quantity)); } string description = "[受理通过] 111202" + "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]"; var stockInfo = semiStock; stockInfo.DateCreated = DateTime.Now; stockInfo.StockType = (int)StorageType.TransferStockOut; stockInfo.Transactor = "111202"; _storageManager.Insert(stockInfo, goodsStockList, semiStock.TradeCode, dicGoods); _storageManager.SetStateStorageRecord(stockId, StorageState.Pass, description); //更新结算价 foreach (var goodsInfo in goodsInfoList) { _storageManager.UpdateStorageRecordDetailToSettlementPrice(stockId, goodsInfo.GoodsId, goodsInfo.ExpandInfo.SettlementPrice, goodsInfo.ExpandInfo.JoinPrice); } //同步新增门店的入库申请 ApplyStockInfo shopApplyStockInfo = null; ShopExchangedApplyInfo exchangedApplyInfo = null; if (semiStock.OriginalCode.Contains("HH-SH")) //换货出库 { exchangedApplyInfo = _exchangedApplyBll.GetShopExchangedApplyInfoByApplyNo(semiStock.OriginalCode); } else //采购出库 { shopApplyStockInfo = _target.GetApplyInfoByTradeCode(semiStock.OriginalCode); } if (shopApplyStockInfo != null || exchangedApplyInfo != null) { if (shopApplyStockInfo != null) { //修改采购申请状态 isSuccess = _target.UpdateApplyStockState(shopApplyStockInfo.ApplyId, (int)ApplyStockState.Finishing, false, out errorMsg); } else { isSuccess = _exchangedApplyBll.SetShopExchangedState(exchangedApplyInfo.ApplyID, (byte)ExchangedState.Bartering, "换货出库", out errorMsg) > 0; } if (isSuccess) { //提交事务操作 ts.Complete(); } } else { errorMsg = "找不到与之相对应的采购/换货申请记录"; } } catch (Exception ex) { errorMsg = string.Format("审核失败!{0}", ex.Message); } } return(isSuccess); }
public bool IsAudit() { var stockId = new Guid("208CA9A1-7458-420A-93C4-5A4CE1179D81"); StorageRecordInfo semiStock = _storageManager.GetStorageRecord(stockId); if (semiStock == null) { return(false); } else { if (semiStock.StockState != (int)StorageState.Normal) { return(false); } IList <StorageRecordDetailInfo> goodsStockList = _storageManager.GetStorageRecordDetailListByStockId(stockId); List <Guid> goodsIdOrRealGoodsIdList = goodsStockList.Select(w => w.RealGoodsId).Distinct().ToList(); Dictionary <Guid, ERP.Model.Goods.GoodsInfo> dicGoods = _goodsManager.GetGoodsBaseListByGoodsIdOrRealGoodsIdList(goodsIdOrRealGoodsIdList); if (dicGoods == null) { return(false); } if (goodsStockList.Select(gsi => dicGoods.ContainsKey(gsi.RealGoodsId)).Any(hasKey => hasKey == false)) { return(false); } var shopFilialeInfo = CacheCollection.Filiale.Get(semiStock.RelevanceFilialeId); if (shopFilialeInfo != null) { #region --> 检查加盟价 var msg = string.Empty; foreach (StorageRecordDetailInfo storageDetailInfo in goodsStockList) { var goodsBaseInfo = new ERP.Model.Goods.GoodsInfo(); if (dicGoods.Count > 0) { bool hasKey = dicGoods.ContainsKey(storageDetailInfo.RealGoodsId); if (hasKey) { goodsBaseInfo = dicGoods.FirstOrDefault(w => w.Key == storageDetailInfo.RealGoodsId).Value; } } if (goodsBaseInfo != null && goodsBaseInfo.ExpandInfo != null) { if (goodsBaseInfo.ExpandInfo.JoinPrice == 0) { if (!msg.Contains(storageDetailInfo.GoodsCode)) { msg += "[" + storageDetailInfo.GoodsCode + "]" + storageDetailInfo.GoodsName + "\n"; } } } else { if (!msg.Contains(storageDetailInfo.GoodsCode)) { msg += "[" + storageDetailInfo.GoodsCode + "]" + storageDetailInfo.GoodsName + "\n"; } } } if (!string.IsNullOrEmpty(msg)) { return(false); } #endregion } var goodsInfoList = new List <ERP.Model.Goods.GoodsInfo>(); foreach (var keyValuePair in dicGoods) { if (goodsInfoList.Any(w => w.GoodsId == keyValuePair.Value.GoodsId) == false) { goodsInfoList.Add(keyValuePair.Value); } } string errorMsg; return(IsSuccess(stockId, goodsStockList, semiStock, dicGoods, goodsInfoList, out errorMsg)); } }