/// <summary> /// 判断出库单是否库存充足 /// </summary> /// <param name="Ids">一组出库单Id</param> /// <returns></returns> public static OpResult IsOutboundHasCommodity(string Ids) { var re = new OpResult(); try { var ids = Ids.Split(',').Select(o => int.Parse(o)).ToList(); var goods = BaseService <OutboundGoods> .FindList(o => ids.Contains(o.Id)); var outboundGoodIds = goods.Select(o => o.OutboundId).ToList(); var list = BaseService <OutboundList> .FindList(o => outboundGoodIds.Contains(o.OutboundId)); var storeIds = goods.GroupBy(o => o.StoreId).Select(o => o.Key).ToList(); var barcodes = new List <string>(); foreach (var storeId in storeIds) { var outgoodsGroupbyStore = goods.Where(o => o.StoreId == storeId).ToList(); var outboundGoodIdsGroupbyStore = outgoodsGroupbyStore.Select(o => o.OutboundId).ToList(); var outBoundListGroupbyStore = list.Where(o => outboundGoodIdsGroupbyStore.Contains(o.OutboundId)).ToList(); var datas = (from a in outBoundListGroupbyStore group a by a.Barcode into g select new { g.Key, OutboundNum = g.Sum(o => o.OutboundNumber) }).ToDictionary(o => o.Key, o => o.OutboundNum); //判断出库的商品是否在库存中 var stockNums = CommodityService.GetStockNumsByStoreId(storeId); foreach (var d in datas) { var barcode = d.Key; var bar = list.FirstOrDefault(o => o.Barcode == d.Key); if (bar != null && !bar.AssistBarcode.IsNullOrEmpty()) { barcode = bar.AssistBarcode; } var stockNum = stockNums.FirstOrDefault(o => o.Key == d.Key); if (stockNum.Value < d.Value) { barcodes.Add(barcode); } } } if (barcodes.Any()) { re.Message = string.Format("条码[{0}],出货数量大于库存量,是否继续?", string.Join(",", barcodes)); return(re); } re.Successed = true; } catch (Exception ex) { re.Message = ex.Message; } return(re); }
/// <summary> /// 设置出库单为已审状态 /// </summary> /// <param name="Ids"></param> /// <returns></returns> public static OpResult SetOutboundStateToChecked(string Ids) { var re = new OpResult(); try { var ids = Ids.Split(',').Select(o => int.Parse(o)).ToList(); var goods = BaseService <OutboundGoods> .FindList(o => ids.Contains(o.Id)); var outboundGoodIds = goods.Select(o => o.OutboundId).ToList(); var list = BaseService <OutboundList> .FindList(o => outboundGoodIds.Contains(o.OutboundId)); if (goods.Any(o => o.State == 1)) { var goodsChecked = goods.Where(o => o.State == 1).FirstOrDefault(); re.Message = string.Format("出库单:{0} 已为已审状态", goodsChecked.OutboundId); return(re); } #region 从商品库中扣除相应库存 var storeIds = goods.GroupBy(o => o.StoreId).Select(o => o.Key).ToList(); var invents = new List <InventoryRecord>(); foreach (var storeId in storeIds) { foreach (var oid in outboundGoodIds) { var outgoodsGroupbyStore = goods.Where(o => o.StoreId == storeId && o.OutboundId == oid).ToList(); var outboundGoodIdsGroupbyStore = outgoodsGroupbyStore.Select(o => o.OutboundId).ToList(); var outgoods = outgoodsGroupbyStore.FirstOrDefault(); var source = outgoods.Channel == 0 ? 2 : 13; var outboundType = outgoods.OutboundType; var applyOrg = !outgoods.ApplyOrgId.IsNullOrEmpty(); var outBoundListGroupbyStore = list.Where(o => o.OutboundId == oid).ToList(); var datas = (from a in outBoundListGroupbyStore group a by a.Barcode into g select new { g.Key, OutboundNum = g.Sum(o => o.OutboundNumber) }).ToDictionary(o => o.Key, o => o.OutboundNum); //判断出库的商品是否有库存记录 var stockNums = CommodityService.GetStockNumsByStoreId(storeId); foreach (var d in datas) { //var stockNum = stockNums.FirstOrDefault(o => o.Key == d.Key); //if (stockNum.Value == 0 && string.IsNullOrEmpty(stockNum.Key)) //{ // re.Message = string.Format("条码:{0} 不存在库存记录,无法出库", d.Key); // return re; //} var bar = outBoundListGroupbyStore.FirstOrDefault(o => o.Barcode == d.Key); invents.Add(new InventoryRecord() { Barcode = bar.Barcode, StoreId = storeId, Number = d.Value, Source = source, OperatId = oid }); if ((source == 2 && outboundType == 1) || (source == 2 && outboundType == 2 && outgoods.ApplyOrgId != "-1"))//出库 { invents.Add(new InventoryRecord() { Barcode = bar.Barcode, StoreId = outgoods.ApplyOrgId, Number = d.Value, Source = 1, OperatId = oid }); } } } } goods.ForEach(o => { o.State = 1; o.VerifyTime = DateTime.Now; }); re = BaseService <OutboundGoods> .Update(goods); if (re.Successed) { InventoryRecordService.SaveLog(invents); } #endregion //re.Successed = true; } catch (Exception ex) { re.Message = ex.Message; } return(re); }