Пример #1
0
        public string ClonePriceChange(List <int> sysNos)
        {
            List <BatchActionItem <int> > items = sysNos.Select(p => new BatchActionItem <int>
            {
                ID   = p.ToString(),
                Data = p
            }).ToList();

            var bp = ObjectFactory <PriceChangeProcessor> .Instance;

            BatchActionResult <int> resutl = BatchActionManager.DoBatchAction <int>(items, (sysno) =>
            {
                PriceChangeMaster item = GetPriceChangeBySysNo(sysno);

                if (item == null)
                {
                    //throw new BizException(string.Format("没有找到记录编号为{0}的记录", sysno));
                    throw new BizException(string.Format(ResouceManager.GetMessageString("Invoice.PriceChange", "PriceChange_NotFounTheRecord"), sysno));
                }

                if (item.Status != RequestPriceStatus.Finished && item.Status != RequestPriceStatus.Aborted)
                {
                    //throw new BizException(string.Format("记录编号为{0}的记录的状态不是终止状态或已完成状态", sysno));
                    throw new BizException(string.Format(ResouceManager.GetMessageString("Invoice.PriceChange", "PriceChange_NotStopOrFinshedStatus"), sysno));
                }

                item.Status = RequestPriceStatus.Auditting;
                bp.ClonePriceChange(item);
            });

            return(resutl.PromptMessage);
        }
Пример #2
0
        /// <summary>
        /// 执行批量操作
        /// </summary>
        /// <typeparam name="T">批量操作项类型</typeparam>
        /// <param name="request">执行批量操作请求数据列表</param>
        /// <param name="doAction">需要对每个数据项执行的操作</param>
        /// <returns>批量操作结果</returns>
        public static BatchActionResult <T> DoBatchAction <T>(List <BatchActionItem <T> > request, Action <T> doAction)
        {
            if (request == null || request.Count == 0)
            {
                return(new BatchActionResult <T>(0));
            }
            var         result      = new BatchActionResult <T>(request.Count);
            string      cultureName = Thread.CurrentThread.CurrentCulture.Name;
            List <Task> tasks       = new List <Task>();

            request.ForEach(r =>
            {
                var item   = r;
                IContext c = ServiceContext.Current;
                var task   = Task.Factory.StartNew(() =>
                {
                    try
                    {
                        ServiceContext.Current.Attach(c);
                        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
                        doAction(item.Data);
                        result.SuccessList.Add(item);
                    }
                    catch (ECCentral.BizEntity.BizException exp)
                    {
                        lock (result.FaultList)
                        {
                            result.FaultList.Add(new FaultTask <BatchActionItem <T> >(item, exp));
                        }
                    }
                    catch (Exception e)
                    {
                        lock (result.FaultList)
                        {
                            //记录异常信息
                            ECCentral.Service.Utility.ExceptionHelper.HandleException(e);
                            result.FaultList.Add(new FaultTask <BatchActionItem <T> >(item, e));
                        }
                    }
                });
                tasks.Add(task);
            });
            //阻塞,直到所有任务完成
            Task.WaitAll(tasks.ToArray());

            return(result);
        }
Пример #3
0
        public string BatchVoidPriceChange(List <int> sysNos)
        {
            List <BatchActionItem <PriceChangeMaster> > items = sysNos.Select(p => new BatchActionItem <PriceChangeMaster>
            {
                ID   = p.ToString(),
                Data = new PriceChangeMaster {
                    SysNo = p
                }
            }).ToList();

            var bl = ObjectFactory <PriceChangeProcessor> .Instance;

            BatchActionResult <PriceChangeMaster> resutl = BatchActionManager.DoBatchAction(items, (request) =>
            {
                bl.VoidPriceChange(request);
            });

            return(resutl.PromptMessage);
        }
Пример #4
0
        /// <summary>
        /// Job中止变价单
        /// </summary>
        /// <returns></returns>
        public string BatchAbortedPriceChangeByJob()
        {
            List <PriceChangeMaster> infos = ObjectFactory <PriceChangeProcessor> .Instance.GetRunningProceChangeInfos();

            List <BatchActionItem <PriceChangeMaster> > items = infos.Select(p => new BatchActionItem <PriceChangeMaster>
            {
                ID   = p.SysNo.ToString(),
                Data = p
            }).ToList();

            var bl = ObjectFactory <PriceChangeProcessor> .Instance;

            BatchActionResult <PriceChangeMaster> result = BatchActionManager.DoBatchAction(items, (request) =>
            {
                bl.AbortedPriceChange(request, true);
            });

            return(result.PromptMessage);
        }
Пример #5
0
        private void ProcessAutoConfirm(List <SOIncomeInfo> normalSaleIncomeList, List <SOIncomeInfo> masterSaleIncomeList, DataTable dataTable,
                                        out List <int> successSysNoList, out List <int> failedSysNoList, StringBuilder errorMessage)
        {
            var BL = ObjectFactory <SOIncomeProcessor> .Instance;
            BatchActionResult <SOIncomeInfo> batchResult = new BatchActionResult <SOIncomeInfo>(0);

            if (normalSaleIncomeList.Count > 0)
            {
                var request = normalSaleIncomeList
                              .Select(x => new BatchActionItem <SOIncomeInfo>
                {
                    ID   = x.SysNo.ToString(),
                    Data = x
                }).ToList();
                batchResult = BatchActionManager.DoBatchAction(request.ToList(), data => BL.Confirm(data));
            }
            if (masterSaleIncomeList.Count > 0)
            {
                BL.UpdateToProcessedStatus(masterSaleIncomeList);
            }
            if (batchResult.TotalCount != 0)
            {
                errorMessage.AppendLine("======== 收款单确认信息 ========");
                errorMessage.AppendLine(batchResult.PromptMessage);
            }

            //获取成功或失败的列表
            successSysNoList = (batchResult.SuccessList.Select(s => s.Data.OrderSysNo.Value)).ToList();
            if (masterSaleIncomeList != null && masterSaleIncomeList.Count > 0)
            {
                successSysNoList.Union(masterSaleIncomeList.Select(s => s.OrderSysNo.Value)).ToList();
            }
            int orderSysNo;

            failedSysNoList = dataTable.AsEnumerable().Where(r => int.TryParse(r["OrderSysNo"].ToString(), out orderSysNo))
                              .Select(r => int.Parse(r["OrderSysNo"].ToString()))
                              .Except(successSysNoList)
                              .ToList();
        }
Пример #6
0
        /// <summary>
        /// 人工中止变价单
        /// </summary>
        /// <param name="sysNo"></param>
        /// <returns></returns>
        public string BatchAbortedPriceChangeByManual(List <int> sysNo)
        {
            List <PriceChangeMaster> infos = new List <PriceChangeMaster>();

            sysNo.ForEach(p =>
            {
                infos.Add(GetPriceChangeBySysNo(p));
            });

            List <BatchActionItem <PriceChangeMaster> > items = infos.Select(p => new BatchActionItem <PriceChangeMaster>
            {
                ID   = p.SysNo.ToString(),
                Data = p
            }).ToList();

            var bl = ObjectFactory <PriceChangeProcessor> .Instance;

            BatchActionResult <PriceChangeMaster> result = BatchActionManager.DoBatchAction(items, (request) =>
            {
                bl.AbortedPriceChange(request, false);
            });

            return(result.PromptMessage);
        }