Exemplo n.º 1
0
        /// <summary>
        /// 公司库存缺货查询
        /// </summary>
        /// <param name="warehouseId"></param>
        /// <param name="hostingFilialeId"></param>
        /// <returns></returns>
        public static List <OutOfStockGridDTO> FilialeStockLackSearch(Guid warehouseId, Guid hostingFilialeId)
        {
            var data     = new List <OutOfStockGridDTO>();
            var dataList = _erpProxy.FilialeStockLackSearch(warehouseId, hostingFilialeId);

            if (dataList != null && dataList.Count > 0)
            {
                var centerSao       = new GoodsCenterSao();
                var realGoodsIds    = dataList.Select(act => act.RealGoodsId).Distinct().ToList();
                var goodsBaseInfos  = centerSao.GetGoodsBaseListByGoodsIdOrRealGoodsIdList(realGoodsIds);
                var goodsChildInfos = centerSao.GetRealGoodsListByGoodsId(goodsBaseInfos.Select(act => act.Key).ToList());
                data.AddRange(from dto in dataList
                              let baseInfo                         = goodsBaseInfos[dto.RealGoodsId]
                                                         let child = goodsChildInfos.FirstOrDefault(act => act.RealGoodsId == dto.RealGoodsId)
                                                                     select new OutOfStockGridDTO
                {
                    GoodsId          = baseInfo.GoodsId,
                    GoodsCode        = baseInfo.GoodsCode,
                    GoodsName        = baseInfo.GoodsName,
                    HostingFilialeId = dto.HostingFilialeId,
                    TransferFiliales = dto.HaveStockFiliales != null && dto.HaveStockFiliales.Count > 0 ? dto.HaveStockFiliales.Select(act => new FilialeQuantity
                    {
                        HostingFilialeId   = act.HostingFilialeId,
                        HostingFilialeName = act.HostingFilialeName,
                        Quantity           = Math.Abs(act.Quantity)
                    }).ToList() : new List <FilialeQuantity>(),
                    Sku         = child != null ? child.Specification : "",
                    RealGoodsId = dto.RealGoodsId,
                    Quantity    = Math.Abs(dto.Quantity),
                    Units       = baseInfo.Units
                });
            }
            return(data);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 将生成的商品毛利明细数据转移到Report库中的商品毛利明细表中
        /// </summary>
        /// <returns></returns>
        public void AddGoodsGrossProfitToReport(DateTime recordTime)
        {
            DateTime dayTime = recordTime.AddDays(-1);
            List <GoodsGrossProfitRecordDetailInfo> goodsGrossProfitRecordDetailList = new List <GoodsGrossProfitRecordDetailInfo>();
            int i = 0;

            while (true)
            {
                i++;
                #region 订单
                var goodsGrossProfitGoodsOrderList = _goodsOrderDetail.GetGoodsGrossProfit_GoodsOrder(dayTime, i, _grossProfitPageSize);
                if (goodsGrossProfitGoodsOrderList.Count > 0)
                {
                    goodsGrossProfitRecordDetailList.AddRange(goodsGrossProfitGoodsOrderList);
                }
                #endregion

                #region 门店采购出库单
                var goodsGrossProfitStorageRecordList = _goodsOrderDetail.GetGoodsGrossProfit_StorageRecord(dayTime, i, _grossProfitPageSize);
                if (goodsGrossProfitStorageRecordList.Count > 0)
                {
                    var goodsIdList            = goodsGrossProfitStorageRecordList.Select(act => act.GoodsId).Distinct().ToList();
                    var dicGoodsIdAndGoodsType = new GoodsCenterSao().GetGoodsListByGoodsIds(goodsIdList).ToDictionary(p => p.GoodsId, p => p.GoodsType);
                    foreach (var item in goodsGrossProfitStorageRecordList)
                    {
                        item.GoodsType = dicGoodsIdAndGoodsType.ContainsKey(item.GoodsId) ? dicGoodsIdAndGoodsType[item.GoodsId] : 0;
                    }
                    goodsGrossProfitRecordDetailList.AddRange(goodsGrossProfitStorageRecordList);
                }
                #endregion

                if (goodsGrossProfitGoodsOrderList.Count == 0 && goodsGrossProfitStorageRecordList.Count == 0)
                {
                    break;
                }
            }

            if (goodsGrossProfitRecordDetailList.Count > 0)
            {
                using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(10)))
                {
                    try
                    {
                        int j = 0;
                        while (true)
                        {
                            var companyGrossProfitRecordDetailInfoList = goodsGrossProfitRecordDetailList.Skip(j * _grossProfitPageSize).Take(_grossProfitPageSize).ToList();
                            if (companyGrossProfitRecordDetailInfoList.Count > 0)
                            {
                                _goodsGrossProfitRecordDetail.AddDataDetail(companyGrossProfitRecordDetailInfoList);
                            }
                            else
                            {
                                break;
                            }
                            j++;
                        }
                        ts.Complete();
                    }
                    finally
                    {
                        //释放资源
                        ts.Dispose();
                    }
                }
            }
        }