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"); } }
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(); } }
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; } } }
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()); }
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); } } } }
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()); }
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; } }
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; }