public void BillWorkActCommit(WorkActCommit[] workActCommit)
 {
     Log.InfoFormat("Start of BillWorkActCommit");
     foreach (var workActItem in workActCommit)
     {
         using (var uow = UnitOfWorkHelper.GetUnit())
         {
             try
             {
                 uow.BeginChanges();
                 var mgr = IoC.Instance.Resolve <IBaseManager <BillWorkAct> >();
                 mgr.SetUnitOfWork(uow);
                 Log.Debug("Получены параметры:");
                 Log.DebugFormat("акт = '{0}', акт 1С = '{1}', фикс дата = '{2}'", workActItem.ActId,
                                 workActItem.ActIdIn1C, workActItem.FixDate1C);
                 var act = mgr.Get(workActItem.ActId);
                 if (act == null)
                 {
                     throw new KeyNotFoundException(string.Format("BillWorkAct = '{0}'", workActItem.ActId));
                 }
                 act.WORKACTHOSTREF = workActItem.ActIdIn1C;
                 //act.WORKACTFIXDATE = workActItem.FixDate1C;
                 act.WORKACTPOSTINGDATE   = workActItem.FixDate1C;
                 act.WORKACTPOSTINGNUMBER = workActItem.ActNumber1C;
                 act.STATUSCODE_R         = "WORKACT_COMPLETED";
                 SetXmlIgnore(act, false);
                 mgr.Update(act);
                 uow.CommitChanges();
             }
             catch (Exception ex)
             {
                 uow.RollbackChanges();
                 Log.Error(ex.Message, ex);
                 Log.Debug(ex);
                 throw new FaultException <string>(ex.Message, new FaultReason(ex.Message));
             }
             finally
             {
                 Log.Debug(workActItem.DumpToXML());
                 Log.InfoFormat("End of BillWorkActCommit = '{0}'", workActItem.ActId);
             }
         }
     }
     Log.InfoFormat("End of BillWorkActCommit");
 }
 public BillWorkActDetailWrapper[] BillWorkActDetailGet(string filter)
 {
     Log.InfoFormat("Start of BillWorkActDetailGet");
     Log.Debug("Получен параметр");
     Log.DebugFormat("фильтр = '{0}'", filter);
     try
     {
         using (var uow = UnitOfWorkHelper.GetUnit())
         {
             var bwaMgr = IoC.Instance.Resolve <IBaseManager <BillWorkAct> >();
             bwaMgr.SetUnitOfWork(uow);
             var filterWa = string.Format("{0} = '{1}'",
                                          SourceNameHelper.Instance.GetPropertySourceName(typeof(BillWorkAct), BillWorkAct.WORKACTHOSTREFPropertyName),
                                          filter);
             var billWorkActId = bwaMgr.GetFiltered(filterWa).FirstOrDefault().GetKey();
             var wad           = new List <BillWorkActDetailWrapper>();
             if (billWorkActId != null)
             {
                 using (var mgr = IoC.Instance.Resolve <IBaseManager <BillWorkActDetail> >())
                 {
                     var filterWad = string.Format("{0} = {1}",
                                                   SourceNameHelper.Instance.GetPropertySourceName(typeof(BillWorkActDetail), BillWorkActDetail.WorkActIDPropertyName),
                                                   billWorkActId);
                     var detailList = mgr.GetFiltered(filterWad);
                     wad.AddRange(from detail in detailList
                                  let wrap = new BillWorkActDetailWrapper()
                                             select MapTo(detail, wrap));
                 }
             }
             Log.Debug(wad.DumpToXML());
             return(wad.ToArray());
         }
     }
     catch (Exception ex)
     {
         Log.Error(ex.Message, ex);
         Log.Debug(ex);
         throw new FaultException <string>(ex.Message, new FaultReason(ex.Message));
     }
     finally
     {
         Log.InfoFormat("End of BillWorkActDetailGet");
     }
 }
Esempio n. 3
0
        public void MoreThanOneManagerCanWorkWithOneUoW()
        {
            using (var uow = UnitOfWorkHelper.GetUnit(false))
            {
                uow.BeginChanges();

                using (var mgr = IoC.Instance.Resolve <IBaseManager <TEType> >())
                {
                    mgr.SetUnitOfWork(uow);
                    var items = mgr.GetAll();
                }

                using (var mgr = IoC.Instance.Resolve <IBaseManager <Partner> >())
                {
                    mgr.SetUnitOfWork(uow);
                    var items = mgr.GetAll();
                }

                uow.RollbackChanges();
            }
        }
Esempio n. 4
0
        public void UowTest()
        {
            var cpvs = new List <CustomParamValue>
            {
                new CustomParamValue
                {
                    CPVID           = -1,
                    CPV2Entity      = "IWB",
                    CPVKey          = "7570",
                    CustomParamCode = "IWBTIRConosament",
                    CPVValue        = "Привет!"
                }
            };

            var productId = 495051;
            var packTE    = "ABRTESTPACK1";
            var prdCount  = 11;

            //using (var mgr = IoC.Instance.Resolve<BPProcessManagerOracle>())
            using (var mgr = IoC.Instance.Resolve <IBaseManager <BPProcess> >())
            {
                //((IBPProcessManager) mgr).SaveCpvs(cpvs, null);

                IUnitOfWork uow = null;
                try
                {
                    uow = UnitOfWorkHelper.GetUnit();
                    mgr.SetUnitOfWork(uow);
                    uow.BeginChanges();
                    ((BPProcessManager)mgr).PackProduct(productId, packTE, prdCount);
                    uow.RollbackChanges();
                    //uow.CommitChanges();
                }
                catch
                {
                    uow.RollbackChanges();
                    throw;
                }
            }
        }
Esempio n. 5
0
        public ErrorWrapper[] LabelsLoad(LabelWrapper[] labelPackage)
        {
            Contract.Requires(labelPackage != null);

            Log.InfoFormat("Start of LabelsLoad");
            Log.Debug(labelPackage.DumpToXML());
            var startAllTime = DateTime.Now;
            //Log.Debug(labelPackage.DumpToXML());
            var retMessage = new List <ErrorWrapper>();

            try
            {
                // проверяем наличие артикулов
                FillArtLabels(labelPackage, retMessage);

                // проверяем наличие этикеток
                FillCodeLabels(labelPackage, retMessage);

                //var processorCount = Environment.ProcessorCount;
                var parallelOptions = new ParallelOptions
                {
                    //MaxDegreeOfParallelism = (processorCount <= 1 ? 8 : processorCount)
                    MaxDegreeOfParallelism = 20
                };
                Parallel.ForEach(labelPackage, parallelOptions, item =>
                {
                    IUnitOfWork uow = null;
                    try
                    {
                        uow = UnitOfWorkHelper.GetUnit();

                        var startTime = DateTime.Now;
                        Log.DebugFormat("Загружаем этикетку «{0}» артикула «{1}» манданта «{2}»", item.LABELCODE, item.ARTNAME, item.MandantCode);

                        uow.BeginChanges();

                        LabelLoadInternal(item, retMessage, uow);

                        Log.DebugFormat("Этикетка «{0}» артикула «{1}» загружена за {2}", item.LABELCODE, item.ARTNAME, DateTime.Now - startTime);
                        uow.CommitChanges();
                        var ew = new ErrorWrapper
                        {
                            ERRORCODE    = MessageHelper.SuccessCode.ToString(),
                            ERRORMESSAGE = string.Format("Загружена этикетка «{0}» артикула «{1}»", item.LABELCODE, item.ARTNAME)
                        };
                        retMessage.Add(ew);
                    }
                    catch (IntegrationLogicalException iex)
                    {
                        if (uow != null)
                        {
                            uow.RollbackChanges();
                        }

                        var message = ExceptionHelper.ExceptionToString(iex);
                        Log.Error(message, iex);

                        var ew = new ErrorWrapper {
                            ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = message
                        };
                        retMessage.Add(ew);
                    }
                    catch (Exception ex)
                    {
                        if (uow != null)
                        {
                            uow.RollbackChanges();
                        }

                        var message = ExceptionHelper.ExceptionToString(ex);
                        Log.Error(message, ex);

                        var ew = new ErrorWrapper {
                            ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = "Системная ошибка: " + message
                        };
                        retMessage.Add(ew);
                    }
                    finally
                    {
                        if (uow != null)
                        {
                            uow.Dispose();
                        }
                    }
                });
            }
            catch (IntegrationLogicalException iex)
            {
                var message = ExceptionHelper.ExceptionToString(iex);
                Log.Error(message, iex);

                var ew = new ErrorWrapper {
                    ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = message
                };
                retMessage.Add(ew);
            }
            catch (Exception ex)
            {
                var message = ExceptionHelper.ExceptionToString(ex);
                Log.Error(message, ex);
                throw new FaultException <string>(message, new FaultReason(message));
            }
            finally
            {
                Log.DebugFormat("Общее время загрузки {0}", DateTime.Now - startAllTime);
                Log.InfoFormat("End of LabelsLoad");
            }
            return(retMessage.ToArray());
        }
        public ErrorWrapper[] KitLoad(KitWrapper[] item)
        {
            Contract.Requires(item != null);
            Log.InfoFormat("Start of KitLoad");
            var startAllTime = DateTime.Now;

            Log.Debug(item.DumpToXML());
            var retMessage = new List <ErrorWrapper>();

            if (item[0].MandantCode == null)
            {
                throw new Exception("Не указан MandantCode");
            }
            Log.DebugFormat("Мандант = {0}", item[0].MandantCode);

            try
            {
                foreach (var kit in item)
                {
                    IUnitOfWork uow = null;
                    try
                    {
                        uow = UnitOfWorkHelper.GetUnit();

                        var startTime = DateTime.Now;
                        Log.DebugFormat("Загружаем комплект '{0}' манданта '{1}'", kit.ARTNAME, kit.MandantCode);

                        uow.BeginChanges();

                        KitLoadInternal(kit, retMessage, uow);

                        Log.DebugFormat("Комплект '{0}' загружен за {1}", kit.ARTNAME, DateTime.Now - startTime);
                        uow.CommitChanges();
                    }
                    catch (IntegrationLogicalException iex)
                    {
                        if (uow != null)
                        {
                            uow.RollbackChanges();
                        }

                        var message = ExceptionHelper.ExceptionToString(iex);
                        Log.Error(message, iex);

                        var ew = new ErrorWrapper {
                            ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = message
                        };
                        retMessage.Add(ew);
                    }
                    catch (Exception ex)
                    {
                        if (uow != null)
                        {
                            uow.RollbackChanges();
                        }

                        var message = ExceptionHelper.ExceptionToString(ex);
                        Log.Error(message, ex);

                        var ew = new ErrorWrapper {
                            ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = "Системная ошибка: " + message
                        };
                        retMessage.Add(ew);
                    }
                    finally
                    {
                        if (uow != null)
                        {
                            uow.Dispose();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var message = ExceptionHelper.ExceptionToString(ex);
                Log.Error(message, ex);
                throw new FaultException <string>(message, new FaultReason(message));
            }
            finally
            {
                Log.DebugFormat("Общее время загрузки {0}", DateTime.Now - startAllTime);
                Log.InfoFormat("End of KitLoad");
            }
            return(retMessage.ToArray());
        }
Esempio n. 7
0
        public void YExternalTrafficLoad(YExternalTrafficWrapper item)
        {
            Log.InfoFormat("Start of YExternalTrafficLoad");
            Log.Debug("Получен объект");
            Log.Debug(item.DumpToXML());
            var startAllTime = DateTime.Now;

            try
            {
                using (var uow = UnitOfWorkHelper.GetUnit())
                {
                    try
                    {
                        uow.BeginChanges();
                        var isUpdate = false;

                        if (string.IsNullOrEmpty(item.EXTERNALTRAFFICPASSNUMBER))
                        {
                            throw new NullReferenceException("Не указан 'Номер пропуска'!");
                        }

                        var existFilter = string.Format("{0} = '{1}'",
                                                        SourceNameHelper.Instance.GetPropertySourceName(typeof(ExternalTraffic),
                                                                                                        ExternalTraffic.EXTERNALTRAFFICPASSNUMBERPropertyName), item.EXTERNALTRAFFICPASSNUMBER);
                        var extTrafficMgr = IoC.Instance.Resolve <IBaseManager <ExternalTraffic> >();
                        extTrafficMgr.SetUnitOfWork(uow);
                        var extTraffic = extTrafficMgr.GetFiltered(existFilter).FirstOrDefault();

                        // если рейс уже есть в системе, то просто обновим и выйдем
                        if (extTraffic != null)
                        {
                            if (item.STATUSCODE_R == "CAR_DEPARTED")
                            {
                                extTraffic = MapTo(item, extTraffic);
                                SetXmlIgnore(extTraffic, false);
                                extTrafficMgr.Update(extTraffic);
                                uow.CommitChanges();
                                Log.DebugFormat("ExternalTraffic '{0}' updated", extTraffic.GetKey());
                                return;
                            }
                            else
                            {
                                isUpdate = true;
                            }
                        }
                        else
                        {
                            extTraffic = extTrafficMgr.New();
                        }

                        item.MANDANTID = CheckMandant(item.MANDANTID, item.MandantCode, uow, false);
                        if (item.MANDANTID == null)
                        {
                            throw new NullReferenceException("Не указан MandantCode");
                        }

                        Log.DebugFormat("Мандант = {0}", item.MandantCode);

                        if (item.Vehicle == null)
                        {
                            throw new Exception("VEHICLE not set");
                        }

                        if (item.Vehicle.CARTYPE == null)
                        {
                            throw new Exception("CARTYPE not set");
                        }

                        if (item.EXTERNALTRAFFICCARRIER == null)
                        {
                            using (var mgr = IoC.Instance.Resolve <IBaseManager <Partner> >())
                            {
                                var filter = string.Format("{0} = '{1}'",
                                                           SourceNameHelper.Instance.GetPropertySourceName(typeof(Partner),
                                                                                                           Partner.PARTNERNAMEPropertyName),
                                                           item.CarrierName);
                                var carrier = mgr.GetFiltered(filter).FirstOrDefault();

                                if (carrier != null)
                                {
                                    item.EXTERNALTRAFFICCARRIER = carrier.PartnerId;
                                }
                                else
                                {
                                    Log.DebugFormat("Set EXTERNALTRAFFICCARRIER by code");
                                }
                            }
                        }
                        else
                        {
                            Log.DebugFormat("EXTERNALTRAFFICCARRIER already set");
                        }

                        var carTypeMgr = IoC.Instance.Resolve <IBaseManager <CarType> >();
                        carTypeMgr.SetUnitOfWork(uow);
                        var carTypefilter = string.Format("({0}='{1}' and nvl({2},0)=nvl('{3}',0))",
                                                          SourceNameHelper.Instance.GetPropertySourceName(typeof(CarType), CarType.CarTypeMarkPropertyName),
                                                          item.Vehicle.CARTYPE.CARTYPEMARK,
                                                          SourceNameHelper.Instance.GetPropertySourceName(typeof(CarType), CarType.CarTypeModelPropertyName),
                                                          item.Vehicle.CARTYPE.CARTYPEMODEL);

                        var carTypeObj = carTypeMgr.GetFiltered(carTypefilter).FirstOrDefault();
                        if (carTypeObj == null)
                        {
                            carTypeObj = new CarType();
                            carTypeObj = MapTo(item.Vehicle.CARTYPE, carTypeObj);
                            carTypeMgr.Insert(ref carTypeObj);
                            Log.DebugFormat("CarType added with code '{0}'", carTypeObj.GetKey());
                        }
                        else
                        {
                            Log.DebugFormat("CarType exists");
                        }

                        item.Vehicle.CARTYPEID_R = carTypeObj.GetKey().To <decimal>();

                        if (item.Vehicle.OWNERLEGAL != null)
                        {
                            var partnerMgr = IoC.Instance.Resolve <IBaseManager <Partner> >();
                            partnerMgr.SetUnitOfWork(uow);
                            var partnerFilter = string.Format("{0}='{1}'",
                                                              SourceNameHelper.Instance.GetPropertySourceName(typeof(Partner), Partner.PARTNERNAMEPropertyName),
                                                              item.Vehicle.OWNERLEGAL.PARTNERNAME);

                            var partnerObj = partnerMgr.GetFiltered(partnerFilter).FirstOrDefault();
                            if (partnerObj == null)
                            {
                                partnerObj = new Partner();
                                partnerObj = MapTo(item.Vehicle.OWNERLEGAL, partnerObj);
                                if (!partnerObj.MandantId.HasValue)
                                {
                                    partnerObj.MandantId = item.MANDANTID;
                                }

                                if (item.Vehicle.OWNERLEGAL.ADDRESS != null)
                                {
                                    partnerObj.Address = new WMSBusinessCollection <AddressBook>();
                                    foreach (var a in from addr in item.Vehicle.OWNERLEGAL.ADDRESS let a = new AddressBook() select MapTo(addr, a))
                                    {
                                        partnerObj.Address.Add(a);
                                    }
                                }
                                SetXmlIgnore(partnerObj, false);
                                partnerMgr.Insert(ref partnerObj);
                                Log.DebugFormat("Partner added with code '{0}'", partnerObj.GetKey());
                            }
                            item.Vehicle.VEHICLEOWNERLEGAL = partnerObj.GetKey().To <decimal>();
                        }
                        else // иначе - физическое
                        {
                            if (item.Vehicle.OWNERPERSON != null)
                            {
                                var workerMgr = IoC.Instance.Resolve <IBaseManager <Worker> >();
                                workerMgr.SetUnitOfWork(uow);
                                var workerFilter =
                                    string.Format("{0}='{1}' and {2}='{3}' and nvl({4},'*')=nvl('{5}','*')",
                                                  SourceNameHelper.Instance.GetPropertySourceName(typeof(Worker),
                                                                                                  Worker.WorkerLastNamePropertyName),
                                                  item.Vehicle.OWNERPERSON.WORKERLASTNAME,
                                                  SourceNameHelper.Instance.GetPropertySourceName(typeof(Worker),
                                                                                                  Worker.WorkerNamePropertyName),
                                                  item.Vehicle.OWNERPERSON.WORKERNAME,
                                                  SourceNameHelper.Instance.GetPropertySourceName(typeof(Worker),
                                                                                                  Worker.WorkerMiddleNamePropertyName),
                                                  item.Vehicle.OWNERPERSON.WORKERMIDDLENAME);

                                var workerObj = workerMgr.GetFiltered(workerFilter).FirstOrDefault();
                                if (workerObj == null)
                                {
                                    workerObj = new Worker();
                                    workerObj = MapTo(item.Vehicle.OWNERPERSON, workerObj);
                                    if (item.Vehicle.OWNERPERSON.WORKERADDRESS != null)
                                    {
                                        workerObj.WorkerAddress = new WMSBusinessCollection <AddressBook>();
                                        foreach (
                                            var a in
                                            from addr in item.Vehicle.OWNERPERSON.WORKERADDRESS
                                            let a = new AddressBook()
                                                    select MapTo(addr, a))
                                        {
                                            workerObj.WorkerAddress.Add(a);
                                        }
                                    }
                                    SetXmlIgnore(workerObj, false);
                                    workerMgr.Insert(ref workerObj);
                                    Log.DebugFormat("Worker added with code '{0}'", workerObj.GetKey());
                                }
                                item.Vehicle.VEHICLEPERSON = workerObj.GetKey().To <decimal>();
                            }
                            else
                            {
                                Log.DebugFormat("There is no owner or person for vehicle");
                            }
                        }

                        // ищем или создаем машину
                        var vehicleMgr = IoC.Instance.Resolve <IBaseManager <Vehicle> >();
                        vehicleMgr.SetUnitOfWork(uow);
                        var vehicleFilter =
                            string.Format(
                                "{0}='{1}' and nvl({2},0)=nvl('{3}',0) and nvl({4},0)=nvl('{5}',0) and {6}={7} and (nvl({8},0)=nvl({9},0) or nvl({10},0)=nvl({11},0))",
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.VehicleRNPropertyName), item.Vehicle.VEHICLERN,
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.VehicleVINPropertyName), item.Vehicle.VEHICLEVIN,
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.VehicleTrailerRNPropertyName), item.Vehicle.VEHICLETRAILERRN,
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.CarTypeIDPropertyName), item.Vehicle.CARTYPEID_R,
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.VehicleOwnerLegalPropertyName), item.Vehicle.VEHICLEOWNERLEGAL ?? 0,
                                SourceNameHelper.Instance.GetPropertySourceName(typeof(Vehicle), Vehicle.VehiclePersonPropertyName), item.Vehicle.VEHICLEPERSON ?? 0);
                        var vehicleObj = vehicleMgr.GetFiltered(vehicleFilter).FirstOrDefault();
                        if (vehicleObj == null)
                        {
                            vehicleObj = new Vehicle();
                            vehicleObj = MapTo(item.Vehicle, vehicleObj);
                            SetXmlIgnore(vehicleObj, false);
                            vehicleMgr.Insert(ref vehicleObj);
                            Log.DebugFormat("Vehicle added with code '{0}'", vehicleObj.GetKey());
                        }
                        else
                        {
                            Log.DebugFormat("Vehicle exists");
                        }

                        item.Vehicle.VEHICLEID = vehicleObj.GetKey().To <decimal>();
                        item.VEHICLEID_R       = item.Vehicle.VEHICLEID;

                        // ищем или создаем водителя
                        if (item.Driver != null)
                        {
                            var    driverMgr = IoC.Instance.Resolve <IBaseManager <Worker> >();
                            Worker driverObj = null;
                            driverMgr.SetUnitOfWork(uow);
                            var isDocsExists = item.Driver.WORKERPASSL != null && item.Driver.WORKERPASSL.Any();
                            if (isDocsExists)
                            {
                                var workerPass   = item.Driver.WORKERPASSL.First();
                                var driverFilter =
                                    string.Format(
                                        "{1} = '{2}' and {3} = '{4}' and nvl({5},'*') = nvl('{6}','*') and {0}.{7} = '{8}' and {0}.{9} = '{10}' and {0}.{11} = '{12}'",
                                        Worker.WorkerPassLPropertyName,
                                        Worker.WorkerLastNamePropertyName, item.Driver.WORKERLASTNAME,
                                        Worker.WorkerNamePropertyName, item.Driver.WORKERNAME,
                                        Worker.WorkerMiddleNamePropertyName, item.Driver.WORKERMIDDLENAME,
                                        WorkerPass.WORKERPASSTYPEPropertyName, workerPass.WORKERPASSTYPE,
                                        WorkerPass.WORKERPASSSERIESPropertyName, workerPass.WORKERPASSSERIES,
                                        WorkerPass.WORKERPASSNUMBERPropertyName, workerPass.WORKERPASSNUMBER);

                                driverObj = driverMgr.GetFiltered(driverFilter).FirstOrDefault();
                            }

                            if (driverObj == null)
                            {
                                driverObj = new Worker();
                                driverObj = MapTo(item.Driver, driverObj);

                                if (isDocsExists)
                                {
                                    driverObj.WorkerPassL = new WMSBusinessCollection <WorkerPass>();
                                    foreach (
                                        var newPas in
                                        from pas in item.Driver.WORKERPASSL
                                        let newPas = new WorkerPass()
                                                     select MapTo(pas, newPas))
                                    {
                                        driverObj.WorkerPassL.Add(newPas);
                                    }
                                }
                                if (item.Driver.WORKERADDRESS != null && item.Driver.WORKERADDRESS.Count > 0)
                                {
                                    driverObj.WorkerAddress = new WMSBusinessCollection <AddressBook>();
                                    foreach (
                                        var newAddr in
                                        from addr in item.Driver.WORKERADDRESS
                                        let newAddr = new AddressBook()
                                                      select MapTo(addr, newAddr))
                                    {
                                        driverObj.WorkerAddress.Add(newAddr);
                                    }
                                }

                                driverObj.CUSTOMPARAMVAL = new WMSBusinessCollection <WorkerCpv>();
                                // скажем что это водитель
                                //var isCardriver = new WorkerGpv {GlobalParamCode_R = "IsCarDriver"};

                                var workersIsDiriver = new List <WorkerCpv>();
                                var workerIsDiriver  = new WorkerCpv
                                {
                                    CPV2Entity      = "WORKER",
                                    CPVID           = -1,
                                    CustomParamCode = "WorkerType"
                                };
                                workersIsDiriver.Add(workerIsDiriver);

                                workerIsDiriver = new WorkerCpv
                                {
                                    CPV2Entity      = "WORKER",
                                    CPVParent       = -1,
                                    CPVValue        = "1",
                                    CustomParamCode = "IsCarDriver"
                                };
                                workersIsDiriver.Add(workerIsDiriver);

                                driverObj.CUSTOMPARAMVAL.AddRange(workersIsDiriver);

                                //if (item.Driver.GLOBALPARAMVAL != null && item.Driver.GLOBALPARAMVAL.Count > 0)
                                //{
                                //    foreach (
                                //        var newGpv in
                                //            from gpv in item.Driver.GLOBALPARAMVAL
                                //            let newGpv = new WorkerGpv()
                                //            select MapTo(gpv, newGpv))
                                //    {
                                //        driverObj.GlobalParamVal.Add(newGpv);
                                //    }
                                //}

                                SetXmlIgnore(driverObj, false);
                                driverMgr.Insert(ref driverObj);
                                Log.DebugFormat("Driver added with code '{0}'", driverObj.GetKey());
                            }
                            else
                            {
                                Log.DebugFormat("Driver exists");
                            }

                            item.Driver.WORKERID       = driverObj.GetKey().To <decimal>();
                            item.EXTERNALTRAFFICDRIVER = item.Driver.WORKERID;
                            if (driverObj.WorkerPassL != null && driverObj.WorkerPassL.Any())
                            {
                                item.WORKERPASSID_R = driverObj.WorkerPassL[0].GetKey <decimal>();
                            }
                        }

                        // создаем рейс
                        extTraffic = MapTo(item, extTraffic);
                        if (isUpdate)
                        {
                            SetXmlIgnore(extTraffic, true);
                            extTrafficMgr.Update(extTraffic);
                            item.EXTERNALTRAFFICID = extTraffic.GetKey().To <decimal>();
                            Log.DebugFormat("Обновлен рейс (ID = {0})", item.EXTERNALTRAFFICID);
                        }
                        else
                        {
                            SetXmlIgnore(extTraffic, false);
                            extTrafficMgr.Insert(ref extTraffic);
                            item.EXTERNALTRAFFICID = extTraffic.GetKey().To <decimal>();
                            Log.DebugFormat("Создан рейс (ID = {0})", item.EXTERNALTRAFFICID);
                        }

                        // создадим внутренний рейс
                        if (item.InternalTrafficList != null)
                        {
                            //Получим список всех целей визита
                            PurposeVisit[] purposeVisits;
                            using (var mgrPurposeVisit = IoC.Instance.Resolve <IBaseManager <PurposeVisit> >())
                            {
                                mgrPurposeVisit.SetUnitOfWork(uow);
                                purposeVisits = mgrPurposeVisit.GetAll(GetModeEnum.Partial).ToArray();
                            }

                            var dicPurposeVisit = new Dictionary <string, PurposeVisit>();
                            foreach (var p in purposeVisits)
                            {
                                dicPurposeVisit[p.GetProperty <string>(PurposeVisit.PURPOSEVISITNAMEPropertyName).ToUpper()] = p;
                            }

                            //Определяем ид неопределенной цели
                            var unknownPurposeVisit =
                                purposeVisits.FirstOrDefault(p =>
                                                             p.GetProperty <string>(PurposeVisit.PURPOSEVISITCODEPropertyName).ToUpper() ==
                                                             InternalTrafficPurposeVisitType.Unknown.ToString().ToUpper());
                            if (unknownPurposeVisit == null)
                            {
                                throw new DeveloperException("В сущности 'PurposeVisit' отсутствует цель с кодом '{0}'.", InternalTrafficPurposeVisitType.Unknown);
                            }

                            var unknownPurposeVisitId = unknownPurposeVisit.GetKey <decimal>();

                            var internalTrafficMgr = IoC.Instance.Resolve <IBaseManager <InternalTraffic> >();
                            internalTrafficMgr.SetUnitOfWork(uow);

                            foreach (var traffic in item.InternalTrafficList)
                            {
                                traffic.MANDANTID = CheckMandant(traffic.MANDANTID, traffic.MandantCode, uow);
                                if (traffic.MANDANTID == null)
                                {
                                    throw new NullReferenceException("Не указан MandantCode для внутреннего рейса");
                                }
                                Log.DebugFormat("Мандант внутреннего рейса = {0}", traffic.MandantCode);

                                //Ищем цель визита
                                decimal?trafficPurposeVisitId = null;
                                if (!string.IsNullOrEmpty(traffic.INTERNALTRAFFICPURPOSE))
                                {
                                    var key = traffic.INTERNALTRAFFICPURPOSE.ToUpper();
                                    if (dicPurposeVisit.ContainsKey(key))
                                    {
                                        trafficPurposeVisitId = dicPurposeVisit[key].GetKey <decimal>();
                                    }
                                }
                                if (!trafficPurposeVisitId.HasValue)
                                {
                                    trafficPurposeVisitId = unknownPurposeVisitId;
                                }

                                var filterIt = string.Format("{0} = {1} and {2} = {3} and {4} = {5}",
                                                             SourceNameHelper.Instance.GetPropertySourceName(typeof(InternalTraffic),
                                                                                                             InternalTraffic.ExternalTrafficIDPropertyName), item.EXTERNALTRAFFICID,
                                                             SourceNameHelper.Instance.GetPropertySourceName(typeof(InternalTraffic),
                                                                                                             InternalTraffic.MandantIDPropertyName), traffic.MANDANTID,
                                                             SourceNameHelper.Instance.GetPropertySourceName(typeof(InternalTraffic),
                                                                                                             InternalTraffic.PURPOSEVISITID_RPropertyName), trafficPurposeVisitId);
                                var internalObj = internalTrafficMgr.GetFiltered(filterIt).FirstOrDefault();

                                if (internalObj == null)
                                {
                                    //traffic.MANDANTID = CheckMandant(traffic.MANDANTID, traffic.MandantCode, uow);
                                    traffic.EXTERNALTRAFFICID_R = item.EXTERNALTRAFFICID;
                                    var internalTraffic = internalTrafficMgr.New(); //Код статуса внутреннего рейса задается по-умолчанию
                                    internalTraffic = MapTo(traffic, internalTraffic);
                                    internalTraffic.PURPOSEVISITID_R = trafficPurposeVisitId;
                                    SetXmlIgnore(internalTraffic, false);
                                    internalTrafficMgr.Insert(ref internalTraffic);
                                    traffic.INTERNALTRAFFICID = internalTraffic.GetKey <decimal>();
                                    Log.DebugFormat("Создан внутренний рейс (ID = {0})", traffic.INTERNALTRAFFICID);
                                }
                                else
                                {
                                    traffic.INTERNALTRAFFICID = internalObj.GetKey().To <decimal>();
                                    Log.DebugFormat("Внутренний рейс существует (ID = {0})", traffic.INTERNALTRAFFICID);
                                }

                                // создадим грузы
                                if (item.CargoIWBList != null && traffic.INTERNALTRAFFICPURPOSE == "РАЗГРУЗКА")
                                {
                                    var mgrIwb = IoC.Instance.Resolve <IBaseManager <CargoIWB> >();
                                    mgrIwb.SetUnitOfWork(uow);
                                    //var mgrPos = IoC.Instance.Resolve<IBaseManager<CargoIWBPos>>();
                                    //mgrPos.SetUnitOfWork(uow);
                                    foreach (var cargo in item.CargoIWBList)
                                    {
                                        var filterCiwb = string.Format("{0} = {1}",
                                                                       SourceNameHelper.Instance.GetPropertySourceName(typeof(CargoIWB),
                                                                                                                       CargoIWB.InternalTrafficIDPropertyName), traffic.INTERNALTRAFFICID);
                                        var cargoIwbObj = mgrIwb.GetFiltered(filterCiwb).FirstOrDefault();

                                        if (cargoIwbObj != null)
                                        {
                                            continue;
                                        }

                                        cargo.INTERNALTRAFFICID_R = traffic.INTERNALTRAFFICID;
                                        cargo.CARGOIWBCOUNT       = 1;
                                        var cargoIwb = new CargoIWB();
                                        cargoIwb = MapTo(cargo, cargoIwb);
                                        if (cargo.CARGOIWBLOADADDRESS == null)
                                        {
                                            cargo.CARGOIWBLOADADDRESS = new AddressBookWrapper
                                            {
                                                ADDRESSBOOKTYPECODE = AddressBookType.ADR_LEGAL
                                            };
                                        }
                                        cargoIwb.CargoIwbLoadAddress = MapTo(cargo.CARGOIWBLOADADDRESS,
                                                                             cargoIwb.CargoIwbLoadAddress);
                                        SetXmlIgnore(cargoIwb, false);
                                        mgrIwb.Insert(ref cargoIwb);
                                        Log.DebugFormat("Создан груз на приход (ID = {0})", cargoIwb.GetKey());
                                    }
                                }

                                // Груз на расход
                                if (item.CargoOWBList == null || traffic.INTERNALTRAFFICPURPOSE == "РАЗГРУЗКА")
                                {
                                    continue;
                                }
                                var mgrOwb = IoC.Instance.Resolve <IBaseManager <CargoOWB> >();
                                mgrOwb.SetUnitOfWork(uow);
                                foreach (var cargo in item.CargoOWBList)
                                {
                                    if (!CheckCpv(item.MANDANTID, uow))
                                    {
                                        var filterCowb = string.Format("{0} = {1}",
                                                                       SourceNameHelper.Instance.GetPropertySourceName(typeof(CargoOWB),
                                                                                                                       CargoOWB.INTERNALTRAFFICID_RPropertyName), traffic.INTERNALTRAFFICID);
                                        var cargoOwbObj = mgrOwb.GetFiltered(filterCowb).FirstOrDefault();

                                        if (cargoOwbObj != null)
                                        {
                                            continue;
                                        }

                                        cargo.INTERNALTRAFFICID_R = traffic.INTERNALTRAFFICID;
                                        cargo.CARGOOWBCOUNT       = 1;
                                        var cargoOwb = new CargoOWB();
                                        cargoOwb = MapTo(cargo, cargoOwb);
                                        if (cargo.CARGOOWBUNLOADADDRESS == null)
                                        {
                                            cargo.CARGOOWBUNLOADADDRESS = new AddressBookWrapper
                                            {
                                                ADDRESSBOOKTYPECODE = AddressBookType.ADR_LEGAL
                                            };
                                        }
                                        cargoOwb.CargoOwbUnloadAddress = MapTo(cargo.CARGOOWBUNLOADADDRESS,
                                                                               cargoOwb.CargoOwbUnloadAddress);
                                        SetXmlIgnore(cargoOwb, false);
                                        mgrOwb.Insert(ref cargoOwb);
                                        Log.DebugFormat("Создан груз на расход (ID = {0})", cargoOwb.GetKey());
                                    }
                                    else
                                    {
                                        Log.DebugFormat("Груз на расход не создается");
                                    }
                                }
                            }
                        }
                        uow.CommitChanges();
                    }
                    catch (Exception)
                    {
                        uow.RollbackChanges();
                        throw;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message, ex);
                Log.Debug(ex);
                throw new FaultException <string>(ex.Message, new FaultReason(ex.Message));
            }
            finally
            {
                Log.DebugFormat("YExternalTrafficLoad - общее время загрузки {0}", (DateTime.Now - startAllTime));
                Log.InfoFormat("End of YExternalTrafficLoad");
            }
        }
        protected override void Execute(NativeActivityContext context)
        {
            var methodName = Value.Get(context);

            if (ActivityHelpers.UseActivityStackTrace(context))
            {
                var tracking = new CustomTrackingRecord(DisplayName);
                tracking.Data.Add("Value", string.Format("Method='{0}'", methodName));
                context.Track(tracking);
            }

            IUnitOfWork uow = null;
            var         isNeedDisposeUoW = false;

            try
            {
                // определяем был ли объявлен UoW
                uow = BeginTransactionActivity.GetUnitOfWork(context);

                int?timeOut = TimeOut.Get(context);
                // если не создали - делаем сами
                if (uow == null)
                {
                    uow = UnitOfWorkHelper.GetUnit(true);
                    isNeedDisposeUoW = true;
                }

                if (timeOut.HasValue)
                {
                    uow.TimeOut = timeOut;
                }

                var mgr = IoC.Instance.Resolve <T>();
                if (uow != null)
                {
                    mgr.SetUnitOfWork(uow);
                }

                // вызываем нужный метод
                var isResultParamExists = Parameters.ContainsKey(ResultParamName);

                var argsCount    = Parameters.Count - (isResultParamExists ? 1 : 0);
                var args         = new object[argsCount];
                var methodInfo   = mgr.GetType().GetMethod(methodName);
                var methodParams = methodInfo.GetParameters();
                for (var i = 0; i < argsCount; i++)
                {
                    args[i] = Parameters[methodParams[i].Name].Get(context);
                }

                var isNeedResult = methodInfo.ReturnType != typeof(void);
                if (!isNeedResult && isResultParamExists)
                {
                    throw new DeveloperException(
                              "Метод {0} не возвращает результат, однако найден параметр с именем {1}", methodName,
                              ResultParamName);
                }

                // запускаем метод
                var resultValue = methodInfo.Invoke(mgr, args);

                // получаем результаты
                if (isNeedResult)
                {
                    Parameters[ResultParamName].Set(context, resultValue);
                }

                for (int i = 0; i < args.Length; i++)
                {
                    var element  = Parameters.ElementAt(i);
                    var argument = Parameters.ElementAt(i).Value;
                    if ((argument.Direction == ArgumentDirection.Out ||
                         argument.Direction == ArgumentDirection.InOut) & !element.Key.EqIgnoreCase(ResultParamName))
                    {
                        argument.Set(context, args[i]);
                    }
                }

                Result.Set(context, true);
            }
            catch (Exception ex)
            {
                Result.Set(context, false);
                Exception.Set(context, ex);
                _log.Warn("Ошибка запуска метода. Причина: " + ExceptionHelper.GetErrorMessage(ex), ex);
            }
            finally
            {
                if (isNeedDisposeUoW && uow != null)
                {
                    try
                    {
                        uow.Dispose();
                    }
                    catch (Exception ex)
                    {
                        _log.Warn("Не удалось закрыть сессию UoW. Причина: " + ExceptionHelper.GetErrorMessage(ex), ex);
                    }
                }
            }
        }
Esempio n. 9
0
        public ErrorWrapper[] PartnerLoad(PartnerWrapper item)
        {
            Contract.Requires(item != null);

            var retMessage = new List <ErrorWrapper>();

            Log.InfoFormat("Start of PartnerLoad");
            Log.Debug(item.DumpToXML());
            var startAllTime = DateTime.Now;

            try
            {
                IUnitOfWork uow = null;
                try
                {
                    uow = UnitOfWorkHelper.GetUnit();

                    item.MANDANTID = CheckMandant(item.MANDANTID, item.MandantCode, uow);
                    if (item.MANDANTID == null)
                    {
                        throw new NullReferenceException("MandantCode");
                    }
                    Log.DebugFormat("Мандант = {0}", item.MandantCode);

                    var isPermit = item.PARTNERLOCKED;
                    if (isPermit)
                    {
                        item.PARTNERLOCKED = false;
                    }

                    var lockobj = LockPartnerLoadPerMandant.GetOrAdd(item.MANDANTID.Value, new object());

                    lock (lockobj)
                    {
                        Log.InfoFormat("Process PartnerLoad locked = {0:hh:mm:ss.fff}", DateTime.Now);

                        uow.BeginChanges();

                        //var partner = new Partner();
                        var partnerType   = typeof(Partner);
                        var partnername   = FilterHelper.ValidateFilterString(item.PARTNERNAME);
                        var partnerFilter = string.Format("{0} = {1} AND (upper({2}) = '{3}' or upper({4}) = '{5}')",
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.MANDANTIDPropertyName),
                                                          item.MANDANTID,
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.PARTNERNAMEPropertyName),
                                                          string.IsNullOrEmpty(partnername) ? null : partnername.ToUpper(),
                                                          SourceNameHelper.Instance.GetPropertySourceName(partnerType, Partner.PARTNERHOSTREFPropertyName),
                                                          string.IsNullOrEmpty(item.PARTNERHOSTREF) ? null : item.PARTNERHOSTREF.ToUpper());

                        //Получим не пустые адреса, исключая ADR_CLIENTRECIPIENT
                        var addresstypes = AddressHelper.GetAddressTypes(AddressBookType.ADR_CLIENTRECIPIENT);
                        var wrapperaddrs = AddressHelper.GetNotEmptyAddressBookByTypes(item.ADDRESS, addresstypes);

                        //Преобразуем в wms-адреса
                        var wmsaddresscol = new List <AddressBook>();
                        if (wrapperaddrs != null && wrapperaddrs.Length > 0)
                        {
                            foreach (var ad in wrapperaddrs)
                            {
                                var wmsadr = new AddressBook();
                                MapTo(ad, wmsadr);
                                if (!AddressHelper.IsAddressEmpty(wmsadr))
                                {
                                    wmsaddresscol.Add(wmsadr);
                                }
                            }
                        }

                        using (var mgr = IoC.Instance.Resolve <IBaseManager <Partner> >())
                        {
                            mgr.SetUnitOfWork(uow);

                            var     partners = mgr.GetFiltered(partnerFilter).ToArray();
                            decimal?partnerId;
                            if (partners.Length == 0)
                            {
                                partnerId = PartnerLoadInternal(item, wmsaddresscol, retMessage, mgr, uow);
                            }
                            else
                            {
                                partnerId = PartnerUpdateInternal(item, partners, wmsaddresscol, isPermit, retMessage, mgr, uow);
                            }

                            if (partnerId.HasValue)
                            {
                                if (!ProcessPartnerGroup(item, partnerId.Value, uow))
                                {
                                    Log.DebugFormat("Для партнера «{0}» не требуется привязка к группе",
                                                    item.PARTNERNAME);
                                }
                            }
                        }
                        uow.CommitChanges();
                        Log.InfoFormat("Process PartnerLoad unlocked = {0:hh:mm:ss.fff}", DateTime.Now);
                    }
                }
                catch (IntegrationLogicalException iex)
                {
                    if (uow != null)
                    {
                        uow.RollbackChanges();
                    }

                    var message = ExceptionHelper.ExceptionToString(iex);
                    Log.Error(message, iex);

                    var ew = new ErrorWrapper {
                        ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = message
                    };
                    retMessage.Add(ew);
                    throw;
                }
                catch (Exception ex)
                {
                    if (uow != null)
                    {
                        uow.RollbackChanges();
                    }

                    var message = ExceptionHelper.ExceptionToString(ex);
                    Log.Error(message, ex);

                    var ew = new ErrorWrapper {
                        ERRORCODE = MessageHelper.ErrorCode.ToString(), ERRORMESSAGE = "Системная ошибка: " + message
                    };
                    retMessage.Add(ew);
                    throw;
                }
                finally
                {
                    if (uow != null)
                    {
                        uow.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                var message = ExceptionHelper.ExceptionToString(ex);
                Log.Error(message, ex);
                throw new FaultException <string>(message, new FaultReason(message));
            }
            finally
            {
                Log.DebugFormat("PartnerLoad - общее время загрузки {0}", (DateTime.Now - startAllTime));
                Log.InfoFormat("End of PartnerLoad");
            }
            return(retMessage.ToArray());
        }
Esempio n. 10
0
        private void SaveImage(bool sourceIsNew, ref Art entity)
        {
            if (!ValidateArtImage())
            {
                return;
            }

            var artImage = (ArtImage)Source;

            //Сохраняем Image
            try
            {
                using (var mgr = GetEntityFileManager())
                {
                    using (var uow = UnitOfWorkHelper.GetUnit())
                    {
                        try
                        {
                            mgr.SetUnitOfWork(uow);
                            var artmgr = IoC.Instance.Resolve <IBaseManager <Art> >();
                            artmgr.SetUnitOfWork(uow);

                            uow.BeginChanges();

                            if (artImage.ARTPICTURE.HasValue)
                            {
                                //Сохраняем артикул
                                artmgr.Update(Source);
                                if (artImage.Image == null)
                                {
                                    //Удаляем Image
                                    mgr.DeleteByKey(artImage.ARTPICTURE.Value);
                                }
                                else
                                {
                                    //Update Image
                                    mgr.SetFileData(artImage.ARTPICTURE.Value, ConvertByteArrayToString(artImage.Image));
                                }
                            }
                            else
                            {
                                //insert image
                                var entityFile = mgr.New();
                                entityFile.File2Entity = "ART";
                                entityFile.FileName    =
                                    entityFile.FileKey =
                                        sourceIsNew
                                            ? string.Format("{0}_{1}", artImage.MANDANTID, artImage.ArtName)
                                            : artImage.GetKey <string>();
                                entityFile.SetProperty(EntityFile.FileDataPropertyName, null);
                                mgr.Insert(ref entityFile);
                                var entityFileKey = entityFile.GetKey <decimal>();

                                //Сохраняем art
                                artImage.ARTPICTURE = entityFileKey;

                                if (sourceIsNew)
                                {
                                    artmgr.Insert(ref entity);

                                    entityFile.FileName    =
                                        entityFile.FileKey = entity.GetKey <string>();
                                    mgr.Update(entityFile);

                                    //OnSetSource(entity);
                                }
                                else
                                {
                                    artmgr.Update(Source);
                                }

                                mgr.SetFileData(entityFileKey, ConvertByteArrayToString(artImage.Image));
                            }

                            uow.CommitChanges();
                        }
                        catch
                        {
                            uow.RollbackChanges();
                            throw;
                        }
                    }
                }

                artImage.AcceptChanges();
                artImage.IsImageChanged = false;
            }
            catch
            {
                artImage.SetError();
                throw;
            }
        }
Esempio n. 11
0
        private void RunCreateProduct(List <IWBPosInput> itemsToProcess, ref ConcurrentQueue <IWBPosInput> ask,
                                      int?timeOut, IUnitOfWork wfUow, string operationCode, decimal iwbId, int isMigration, string placeCode,
                                      bool isNeedControlOver)
        {
            if (itemsToProcess == null)
            {
                throw new ArgumentNullException("itemsToProcess");
            }

            var queue = ask;

            itemsToProcess
            .GroupBy(i => i.ArtCode)
            .AsParallel()
            .ForAll(items =>
            {
                var uow = wfUow ?? UnitOfWorkHelper.GetUnit();
                try
                {
                    if (timeOut.HasValue)
                    {
                        uow.TimeOut = timeOut;
                    }

                    using (var mgr = IoC.Instance.Resolve <IBPProcessManager>())
                    {
                        mgr.SetUnitOfWork(uow);
                        foreach (var item in items)
                        {
                            try
                            {
                                // сообщаем, что все проверили на нашей стороне
                                var manageFlag         = item.ManageFlag;
                                string manageFlagParam = null;

                                // создаем товары
                                var products =
                                    mgr.CreateProductByPos(ref manageFlag, ref manageFlagParam, operationCode, iwbId,
                                                           item, isMigration, placeCode).ToArray();
                                if ("OVERASK".Equals(manageFlag))
                                {
                                    manageFlag += (!string.IsNullOrEmpty(manageFlag) ? "," : string.Empty) +
                                                  "OVERASK_OK";

                                    if (isNeedControlOver)
                                    {
                                        item.ManageFlag = manageFlag;
                                        queue.Enqueue(item);
                                        continue;
                                    }

                                    Array.Clear(products, 0, products.Length);
                                    products =
                                        mgr.CreateProductByPos(ref manageFlag, ref manageFlagParam, operationCode,
                                                               iwbId, item, isMigration, placeCode).ToArray();
                                }

                                if (!string.IsNullOrEmpty(manageFlag))
                                {
                                    throw new OperationException(
                                        "Все параметры приемки должны были быть обработаны до создания товара. Пожалуйста, свяжитесь со службой поддержки");
                                }

                                foreach (var t in products)
                                {
                                    _productList.Enqueue(t);
                                }

                                //HACK: Делаем допущение, что мы всегда принимаем то кол-во, которое запросили. Частично принять мы не можем.
                                //Обновляем приятое и оставшееся кол-во здесь для возможности последующего использования данного объекта
                                //var acceptedCount = (double)item.RequiredSKUCount;
                                //item.ProductCountSKU += acceptedCount;
                                //item.RemainCount -= acceptedCount;
                                //item.RequiredSKUCount = item.RemainCount < item.ProductCountSKU ? 0 : (decimal) (item.RemainCount - item.ProductCountSKU);
                            }
                            catch (Exception ex)
                            {
                                SkipItem(item, ExceptionHelper.GetErrorMessage(ex));
                                _exceptionList.Enqueue(ex);
                            }
                        }
                    }
                }
                finally
                {
                    if (wfUow == null)
                    {
                        uow.Dispose();
                    }
                }
            });

            ask = queue;
        }