Example #1
0
        public IHttpActionResult MergeOrder([FromBody] MergeObjectDto mergInfo)
        {
            var user   = base.CurrentUser();
            var result = _QCService.MergeOrder(mergInfo);

            return(Ok(result));
        }
Example #2
0
        //合并检查申请单
        public bool MergeOrder(MergeObjectDto mergeInfo)
        {
            if (mergeInfo == null)
            {
                return(false);
            }
            try
            {
                //验证检查
                var queryPatient   = _dbContext.Set <Patient>();
                var queryOrder     = _dbContext.Set <Order>();
                var queryProcedure = _dbContext.Set <Procedure>();

                var srcOrder   = queryOrder.Where(o => o.UniqueID == mergeInfo.SrcOrderID).FirstOrDefault();
                var targeOrder = queryOrder.Where(o => o.UniqueID == mergeInfo.TargetOrderID).FirstOrDefault();
                if (srcOrder == null || targeOrder == null)
                {
                    return(false);
                }
                //合并申请单
                if (mergeInfo.IsMergeRequisition)
                {
                    MergeRequisition(srcOrder.AccNo, targeOrder.AccNo);
                }
                //合并费用
                if (mergeInfo.IsMergeOrderCharge)
                {
                    MergeOrderCharge(mergeInfo.SrcOrderID, mergeInfo.TargetOrderID);
                }
                var srcp    = queryPatient.Where(p => p.UniqueID == srcOrder.PatientID).FirstOrDefault();
                var targetp = queryPatient.Where(p => p.UniqueID == targeOrder.PatientID).FirstOrDefault();
                if (srcp == null || targetp == null)
                {
                    return(false);
                }

                //更新 检查的 orderid
                var procedures = queryProcedure.Where(p => p.OrderID == mergeInfo.SrcOrderID);
                foreach (var pro in procedures)
                {
                    pro.OrderID = mergeInfo.TargetOrderID;
                }
                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required,
                                                                  new TransactionOptions()
                {
                    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                }))
                {
                    //删除被合检查
                    queryOrder.Remove(srcOrder);
                    _dbContext.SaveChanges();
                    ts.Complete();
                }
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
Example #3
0
        public void When05ReceiveSaveLinesThenNoMessageSent()
        {
            // arrange
            When03ReceiveWriteHeaderAndNoExceptionsThenHeaderCreatedMessageSent();
            var merge = new MergeObjectDto {
                DataId = 1
            };

            // act
            _sut.Tell(new FileWriterMessages.SaveWebResponse(merge));

            // assert
            NoMessageSent();
        }
        public void When01ReceiveGetDataThenResponseMessageSent()
        {
            // arrange
            SetupValidResponse();
            var mergeDto = new MergeObjectDto {
                DataId = 1
            };

            // act
            _sut.Tell(new CrawlerMessages.GetData(mergeDto, "", DateTime.UtcNow));

            // assert
            _testProbe.ExpectMsg <FlowControlMessages.WebApiGotValidResponse>(TimeSpan.FromSeconds(1));
            _testProbe.ExpectMsg <FileWriterMessages.SaveWebResponse>(a => { a.MergeObjectDto.DataId.ShouldEqual(1); }, TimeSpan.FromSeconds(1));
        }
Example #5
0
        //移动检查项目
        public bool MoveCheckingItem(MergeObjectDto moveInfo)
        {
            if (moveInfo == null)
            {
                return(false);
            }
            try
            {
                //验证检查
                var queryProcedure = _dbContext.Set <Procedure>();
                var queryOrder     = _dbContext.Set <Order>();
                var queryPatient   = _dbContext.Set <Patient>();
                var srcProcedure   = queryProcedure.Where(o => o.UniqueID == moveInfo.SrcProcedureID).FirstOrDefault();
                var targeProcedure = queryProcedure.Where(o => o.UniqueID == moveInfo.TargetProcedureID).FirstOrDefault();
                if (srcProcedure == null || targeProcedure == null)
                {
                    return(false);
                }
                //同一检查下面的检查项目不用移动
                if (srcProcedure.OrderID == targeProcedure.OrderID)
                {
                    return(false);
                }

                var srcOrder   = queryOrder.Where(o => o.UniqueID == srcProcedure.OrderID).FirstOrDefault();
                var targeOrder = queryOrder.Where(o => o.UniqueID == targeProcedure.OrderID).FirstOrDefault();
                if (srcOrder == null || targeOrder == null)
                {
                    return(false);
                }

                var srcp    = queryPatient.Where(p => p.UniqueID == srcOrder.PatientID).FirstOrDefault();
                var targetp = queryPatient.Where(p => p.UniqueID == targeOrder.PatientID).FirstOrDefault();
                if (srcp == null || targetp == null)
                {
                    return(false);
                }

                //更新 检查项目的 orderid
                srcProcedure.OrderID = targeProcedure.OrderID;
                _dbContext.SaveChanges();
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
        public void When02ReceiveGetDataAndNo200BackThenBadResponseMessageSent()
        {
            // arrange
            SetupInvaldResponse();

            var mergeDto = new MergeObjectDto {
                DataId = 1
            };

            // act
            _sut.Tell(new CrawlerMessages.GetData(mergeDto, "", DateTime.UtcNow));

            // assert
            _testProbe.ExpectMsg <FileWriterMessages.SaveWebResponse>(TimeSpan.FromSeconds(1));
            _testProbe.ExpectMsg <FlowControlMessages.WebApiGotBadResponse>(TimeSpan.FromSeconds(1));
        }
        /// <summary>The parse by regex.</summary>
        /// <param name="line">The line.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        private bool ParseByRegex(string line)
        {
            var match = _lineValidator.Match(line);

            if (match.Success)
            {
                var mergeObject = new MergeObjectDto {
                    DataId = int.Parse(match.Groups[1].Value)
                };

                _linesReadByRegex++;
                SendMessage(mergeObject);
                return(true);
            }

            return(false);
        }
Example #8
0
        //验证order是否被锁定 Sync ReportLockService
        //public SyncDto GetLock(string orderID, LockType lockType)
        //合并病人
        public bool MergePatients(MergeObjectDto mergePatientInfo)
        {
            if (mergePatientInfo == null)
            {
                return(false);
            }
            try
            {
                //验证病人
                var queryPatient = _dbContext.Set <Patient>();
                var srcp         = queryPatient.Where(p => p.UniqueID == mergePatientInfo.SrcPatientID).FirstOrDefault();
                var targetp      = queryPatient.Where(p => p.UniqueID == mergePatientInfo.TargetPatientID).FirstOrDefault();
                if (srcp == null || targetp == null)
                {
                    return(false);
                }
                //更新order 的 PatientGuid
                var queryOrder = _dbContext.Set <Order>();
                var orders     = queryOrder.Where(o => o.PatientID == mergePatientInfo.SrcPatientID);
                foreach (var order in orders)
                {
                    order.PatientID = mergePatientInfo.TargetPatientID;
                }
                if (mergePatientInfo.AfterDelPatient)
                {
                    queryPatient.Remove(srcp);
                }
                //是否删除被合并掉的病人

                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required,
                                                                  new TransactionOptions()
                {
                    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                }))
                {
                    _dbContext.SaveChanges();
                    ts.Complete();
                }
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
        public void When04ReceiveWebApiErrorResponseAndNo200BackThenBadResponseMessageSent()
        {
            // arrange
            SetupInvaldResponse();
            var mergeDto = new MergeObjectDto {
                DataId = 1
            };
            var message = new CrawlerMessages.WebApiErrorResponse
            {
                MergeObjectDto = mergeDto,
                url            = $"{_systemConfiguration.ApiEndPoint}/1",
                attempt        = 1,
            };

            // act
            _sut.Tell(message);

            // assert
            _testProbe.ExpectMsg <FileWriterMessages.SaveWebResponse>(TimeSpan.FromSeconds(1));
            _testProbe.ExpectMsg <FlowControlMessages.WebApiGotBadResponse>(TimeSpan.FromSeconds(1));
        }
        public void When03ReceiveWebApiErrorResponseAndGetValidResponseThenResponseMessageSent()
        {
            // arrange
            SetupValidResponse();
            var mergeDto = new MergeObjectDto {
                DataId = 1
            };
            var message = new CrawlerMessages.WebApiErrorResponse
            {
                MergeObjectDto = mergeDto,
                url            = $"{_systemConfiguration.ApiEndPoint}/1",
                attempt        = 1,
            };

            // act
            _sut.Tell(message);

            // assert
            _testProbe.ExpectMsg <FlowControlMessages.WebApiGotValidResponse>(TimeSpan.FromSeconds(1));
            _testProbe.ExpectMsg <FileWriterMessages.SaveWebResponse>(a => { a.MergeObjectDto.DataId.ShouldEqual(1); }, TimeSpan.FromSeconds(1));
        }
        /// <summary>The parse by text parser.</summary>
        /// <param name="line">The line.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        private bool ParseByTextParser(string line)
        {
            // check if we have quotes first
            if (!line.Contains("\""))
            {
                return(false); // fail fast
            }

            var quotesMatch = MatchInQuotes(line);

            if (quotesMatch.Any())
            {
                var mergeObject = new MergeObjectDto {
                    DataId = int.Parse(quotesMatch[0])
                };

                SendMessage(mergeObject);
                return(true);
            }

            return(false);
        }
Example #12
0
        /// <summary>
        /// 移动检查
        /// </summary>
        /// <param name="mergePatientInfo"></param>
        /// <returns></returns>
        public bool MoveOrder(MergeObjectDto moveInfo)
        {
            if (moveInfo == null)
            {
                return(false);
            }
            try
            {
                //验证病人 和检查
                var queryPatient = _dbContext.Set <Patient>();
                var queryOrder   = _dbContext.Set <Order>();
                var targetp      = queryPatient.Where(p => p.UniqueID == moveInfo.TargetPatientID).FirstOrDefault();
                var srcOrder     = queryOrder.Where(o => o.UniqueID == moveInfo.SrcOrderID).FirstOrDefault();
                if (srcOrder == null || targetp == null)
                {
                    return(false);
                }
                //order>procedure>patient
                //更新order 的 PatientGuid
                srcOrder.PatientID = moveInfo.TargetPatientID;

                using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required,
                                                                  new TransactionOptions()
                {
                    IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
                }))
                {
                    _dbContext.SaveChanges();
                    ts.Complete();
                }
                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
Example #13
0
 /// <summary>The add line to list.</summary>
 /// <param name="data">The data.</param>
 private void AddLineToList(MergeObjectDto data)
 {
     _lines.Add($"{data.DataId},{data.SaleValue},{data.ActorName}");
 }
 /// <summary>Initializes a new instance of the <see cref="SaveWebResponse"/> class.</summary>
 /// <param name="mergeObjectDto">The merge object dto.</param>
 public SaveWebResponse(MergeObjectDto mergeObjectDto)
 {
     MergeObjectDto = mergeObjectDto;
 }
Example #15
0
        public IHttpActionResult MoveCheckingItem([FromBody] MergeObjectDto moveInfo)
        {
            var result = _QCService.MoveCheckingItem(moveInfo);

            return(Ok(result));
        }
Example #16
0
 /// <summary>The send bad response.</summary>
 /// <param name="mergeObject">The merge object.</param>
 /// <param name="status">The status.</param>
 private void SendBadResponse(MergeObjectDto mergeObject, string status = "none")
 {
     _actorDictionary["FileWriterActor"].Tell(new FileWriterMessages.SaveWebResponse(mergeObject));
     _actorDictionary["FlowControlActor"].Tell(new FlowControlMessages.WebApiGotBadResponse());
 }
Example #17
0
 /// <summary>Initializes a new instance of the <see cref="PipedRequest"/> class.</summary>
 /// <param name="requestResult">The request result.</param>
 /// <param name="mergeObject">The merge object.</param>
 public PipedRequest(WebApiResponseDto requestResult, MergeObjectDto mergeObject)
 {
     RequestResult = requestResult;
     MergeObject   = mergeObject;
 }
Example #18
0
 /// <summary>Initializes a new instance of the <see cref="GetData"/> class.</summary>
 /// <param name="mergeObject">The merge object.</param>
 /// <param name = "apiEndPoint" ></param>
 /// <param name = "utcNow" ></param>
 public GetData(MergeObjectDto mergeObject, string apiEndPoint, DateTime utcNow)
 {
     MergeObject = mergeObject;
     ApiEndPoint = apiEndPoint;
     UtcNow      = utcNow;
 }
 private void SendMessage(MergeObjectDto mergeObject)
 {
     _log.Debug($"Sending to crawler: {mergeObject.DataId}");
     _crawler.Tell(new CrawlerMessages.GetData(mergeObject, _systemConfiguration.ApiEndPoint, DateTime.UtcNow));
     _flowControl.Tell(new FlowControlMessages.ValidLine());
 }