예제 #1
0
        public EnumApiStatus Modify(RequestConsultationInfoUpdateDTO model, ref ResponseConsultationLogDTO logDto, DBEntities db = null)
        {
            bool dbPrivateFlag = false;

            if (db == null)
            {
                db            = CreateDb();
                dbPrivateFlag = true;
            }
            //主诊医生
            var attendingDoctor = model.Doctors.Where(i => i.IsAttending == true).FirstOrDefault();

            if (attendingDoctor == null)
            {
                //当前用户为主诊医生
                if (model.CurrUserAttending == true && !string.IsNullOrEmpty(model.ConsultationDoctorID))
                {
                    attendingDoctor = new RequestConsultationDoctorDTO {
                        DoctorID = model.ConsultationDoctorID, IsAttending = true
                    };
                    model.Doctors.Add(attendingDoctor);
                }
            }

            #region 病历
            UserMedicalRecord userMedical = null;
            if (model.MedicalRecord != null)
            {
                userMedical = model.MedicalRecord.Map <RequestUserMedicalRecordDTO, UserMedicalRecord>();
            }
            else
            {
                userMedical = new UserMedicalRecord();
            }
            userMedical.UserID   = model.CurrentOperatorUserID;
            userMedical.MemberID = model.MemberID;
            userMedical.DoctorID = attendingDoctor == null?model.Doctors.Select(i => i.DoctorID).First() : attendingDoctor.DoctorID;

            #endregion


            ConsultationLog operationLog;

            RemoteConsultation entity = null;
            if (!string.IsNullOrEmpty(model.ConsultationID))
            {
                #region 编辑(删除再添加)
                //订单不存在
                entity = db.RemoteConsultations.Where(i => i.ConsultationID == model.ConsultationID && i.IsDeleted == false).FirstOrDefault();
                if (entity == null)
                {
                    return(EnumApiStatus.ConsultationNotExists);
                }

                //该状态不能修改
                if (entity.ConsultationProgress == EnumConsultationProgress.Arranged ||
                    entity.ConsultationProgress == EnumConsultationProgress.InProgress ||
                    entity.ConsultationProgress == EnumConsultationProgress.Finished ||
                    entity.ConsultationProgress == EnumConsultationProgress.Invalid)
                {
                    return(EnumApiStatus.CurrStatusNotModify);
                }

                //已取消,已付款,已完成的订单不能再修改
                var opdRegister = db.UserOPDRegisters.Where(i => i.OPDRegisterID == entity.OPDRegisterID).FirstOrDefault();
                if (opdRegister != null && (opdRegister.OPDState != EnumOPDState.NoPay))
                {
                    return(EnumApiStatus.CurrOrderStatusNotModify);
                }

                //修改会诊单
                entity.Requirement          = model.Requirement;
                entity.Purpose              = model.Purpose;
                entity.StartTime            = model.StartTime;
                entity.FinishTime           = model.FinishTime;
                entity.ConsultationProgress = model.ConsultationProgress;
                entity.Address              = model.Address;
                db.Update(entity);

                //修改预约记录
                //opdRegister.OPDRegisterID = entity.OPDRegisterID;
                opdRegister = CreateOpdRegister(model, opdRegister, attendingDoctor);
                db.Update(opdRegister);

                //修改病例
                userMedical.UserMedicalRecordID = db.UserMedicalRecords.Where(i => i.OPDRegisterID == opdRegister.OPDRegisterID).Select(i => i.UserMedicalRecordID).First();
                userMedical.OPDRegisterID       = opdRegister.OPDRegisterID;
                db.Update(userMedical);

                //删除医生
                var consultationDoctors = db.ConsultationDoctors.Where(i => i.ConsultationID == entity.ConsultationID);
                db.ConsultationDoctors.RemoveRange(consultationDoctors);

                //删除文件
                var userFiles = db.UserFiles.Where(i => i.OutID == userMedical.UserMedicalRecordID);
                db.UserFiles.RemoveRange(userFiles);

                //操作日志
                var operation = GetOperationType(entity, model);
                operationLog = CreateOperationLog(model.ConsultationID, operation.OperationType, EnumOPDState.NoPay, model.ConsultationProgress, operation.Message, model.CurrentOperatorUserID, model.OrgID);

                #endregion
            }
            else
            {
                // 添加会诊单
                entity = model.Map <RequestConsultationInfoUpdateDTO, RemoteConsultation>();
                entity.ConsultationID = Guid.NewGuid().ToString("N");
                entity.OPDRegisterID  = entity.ConsultationID;
                entity.ConsultationNo = CreateConsultationNo();
                entity.CreateTime     = DateTime.Now;
                entity.CreateUserID   = model.CurrentOperatorUserID;
                db.RemoteConsultations.Add(entity);

                //添加预约记录
                var opdRegister = CreateOpdRegister(model, null, attendingDoctor);
                opdRegister.CreateTime    = DateTime.Now;
                opdRegister.OPDDate       = DateTime.Now;
                opdRegister.OrgnazitionID = model.OrgID;
                opdRegister.OPDRegisterID = entity.OPDRegisterID;

                db.UserOPDRegisters.Add(opdRegister);

                #region 是否进入导诊系统分诊,否则分诊状态设为不分诊
                db.DoctorTriages.Add(new DoctorTriage
                {
                    OPDRegisterID  = opdRegister.OPDRegisterID,
                    TriageDoctorID = model.IsToGuidance ? "" : opdRegister.DoctorID,
                    TriageStatus   = model.IsToGuidance ? EnumTriageStatus.None : EnumTriageStatus.Triaged,
                    IsToGuidance   = model.IsToGuidance
                });
                #endregion

                //添加病历
                userMedical.UserMedicalRecordID = Guid.NewGuid().ToString("N");
                userMedical.OPDRegisterID       = opdRegister.OPDRegisterID;
                db.UserMedicalRecords.Add(userMedical);

                //操作日志
                operationLog = CreateOperationLog(entity.ConsultationID, EnumConsultationOperationType.Create, EnumOPDState.NoPay, model.ConsultationProgress, "创建会诊订单", model.CurrentOperatorUserID, model.OrgID);
            }

            #region 添加医生
            if (model.Doctors != null && model.Doctors.Count > 0)
            {
                //会诊医生会诊服务价格
                decimal totalPrice = 0;
                model.Doctors.ForEach(item =>
                {
                    totalPrice += item.ServicePrice;
                    db.ConsultationDoctors.Add(new ConsultationDoctor
                    {
                        ConsultationDoctorID = Guid.NewGuid().ToString("N"),
                        ConsultationID       = entity.ConsultationID,
                        DoctorID             = item.DoctorID,
                        IsAttending          = item.IsAttending,
                        Amount = item.ServicePrice
                    });
                });

                //平台服务费用
                totalPrice   += model.PlatServicePrice;
                entity.Amount = totalPrice;
            }
            #endregion

            #region 添加文件
            if (model.Files != null)
            {
                model.Files.ForEach(i =>
                {
                    db.UserFiles.Add(new UserFile()
                    {
                        FileID   = Guid.NewGuid().ToString("N"),
                        FileName = i.FileUrl,
                        FileUrl  = i.FileUrl,
                        FileType = 0,
                        Remark   = i.Remark,
                        OutID    = userMedical.UserMedicalRecordID,
                        UserID   = model.CurrentOperatorUserID
                    });
                });
            }
            #endregion

            #region 添加影像资料
            if (model.InspectResult != null)
            {
                //只保存新资料
                var inspectList = model.InspectResult.Where(i => string.IsNullOrEmpty(i.InspectResultID)).ToList();
                inspectList.ForEach(i =>
                {
                    var inspectEntity             = i.Map <RequestUserInspectResultDTO, UserInspectResult>();
                    inspectEntity.InspectResultID = Guid.NewGuid().ToString("N");
                    db.UserInspectResults.Add(inspectEntity);
                });

                UploadInspect(inspectList);
            }
            #endregion

            logDto = operationLog.Map <ConsultationLog, ResponseConsultationLogDTO>();

            var ret = true;

            if (dbPrivateFlag)
            {
                ret = db.SaveChanges() > 0;
                db.Dispose();
            }

            if (ret)
            {
                return(EnumApiStatus.BizOK);
            }
            else
            {
                return(EnumApiStatus.BizError);
            }
        }
예제 #2
0
        private UserOPDRegister CreateOpdRegister(RequestConsultationInfoUpdateDTO model, UserOPDRegister entity, RequestConsultationDoctorDTO attendingDoctor)
        {
            if (entity == null)
            {
                entity = new UserOPDRegister();
            }

            entity.UserID       = model.CurrentOperatorUserID;
            entity.MemberID     = model.MemberID;
            entity.OPDType      = EnumDoctorServiceType.Consultation;
            entity.Fee          = model.Amount;
            entity.CreateUserID = model.CurrentOperatorUserID;
            entity.OPDBeginTime = "";
            entity.OPDEndTime   = "";
            entity.DoctorID     = attendingDoctor == null ? "" : attendingDoctor.DoctorID;
            entity.DoctorName   = attendingDoctor == null ? "" : attendingDoctor.DoctorName;
            entity.RegDate      = model.StartTime == null ? DateTime.Now : model.StartTime.Value;
            entity.MemberName   = model.MemberName;
            entity.Gender       = model.Gender;
            entity.Marriage     = model.Marriage;
            entity.Age          = ToolHelper.GetAgeFromBirth(model.Birthday);
            entity.IDNumber     = string.IsNullOrEmpty(model.IDNumber) ? "" : model.IDNumber;
            entity.IDType       = model.IDType;
            entity.Mobile       = model.Mobile;
            entity.Address      = model.PatientAddress;
            entity.Birthday     = model.Birthday;

            return(entity);
        }