Exemple #1
0
        public async Task <dynamic> ReservateDoctor([FromBody] ReservateDoctorModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    throw new ModelStateException(ModelState);
                }

                if (!model.OpId.HasValue)
                {
                    model.OpId  = TryGet <int?>(() => UserSelf.OpId);
                    model.OpMan = TryGet <string>(() => UserSelf.OpManFullMsg);
                }

                //姓名
                var cust = await _cusSvr.GetCustomerById(model.CustomerId);

                //科室
                var depart = _stationSvr.GetDepartmentById(model.DepartmentId);
                //医生
                var doctor   = _docrSvr.Find(model.DoctorId);
                var workInfo = _docrSvr.GetDoctorOnDutyInfo(model.DoctorId, model.DepartmentId, model.ReservationDate, model.ReservationSlot);
                var timestr  = $"{workInfo.FromTime?.ToString(@"hh\:mm")}—{workInfo.ToTime?.ToString(@"hh\:mm")}";

                var add = await _resSvr.AddOneRegister(cust.CustomerID, depart.DepartmentID, model.DoctorId, depart.StationID.Value, model.ReservationDate, model.ReservationSlot, RegistFrom.V20Web
                                                       , opId : model.OpId, opMan : model.OpMan, rxDoctorId : model.RxDoctorId
                                                       );

                //给用户发送短信
                StringBuilder b = new StringBuilder();
                b.Append($"尊敬的{cust.CustomerName},请于{model.ReservationDate.ToString("yyyy年MM月dd日")} {timestr} 至{depart.DepartmentName}({doctor.DoctorName})医生处就诊,感谢您的预约。【天使健康】");
                Codes.Utility.SMS sms = new Codes.Utility.SMS();
                //await new SendVCodeCBL(this).SendVCode(cust.Telephone, b.ToString());
                var rlt = await sms.PostSmsInfoAsync(cust.CustomerMobile, b.ToString());

                var d = MyDynamicResult(true, "");
                d.rltCode          = add.HaveRegisted ? "REPET_REGIST" : "";
                d.registStatus     = add.HaveRegisted ? "请注意,您已经预约了,不能重复预约。先前预约信息如下。" : "";
                d.registerId       = add.RegisterID;
                d.registerSeq      = add.RegisterSeq;
                d.customerId       = cust.CustomerID;
                d.customerName     = cust.CustomerName;
                d.customerGender   = cust.Gender;
                d.customerBirthday = cust.Birthday;
                d.customerPicUrl   = cust.PhotoUrlDef.ahDtUtil().GetCustomerImg(cust.Gender);
                d.stationName      = depart.StationName;
                d.departmentName   = depart.DepartmentName;
                d.doctorName       = doctor.DoctorName;
                d.doctorGender     = doctor.Gender;
                d.doctorTitle      = doctor.PostTitleName;
                d.doctorId         = doctor.DoctorId;
                d.doctorPicUrl     = doctor.DoctorPhotoUrl.ahDtUtil().GetDoctorImg(doctor.Gender, imgSizeTypes.HorizThumb);
                d.reservationDate  = model.ReservationDate.ToString("yyyy-MM-dd");
                d.timeInfo         = timestr;
                return(d);
            }
            catch (Exception ex) { return(MyDynamicResult(ex)); }
        }
        /// <summary>
        /// 手机预约信息,并返回给用户
        /// <returns>成功则返回用户信息</returns>
        /// </summary>
        public async Task <IActionResult> Json_GetReservationInfo(int customerID, int departmentID, int doctorId,
                                                                  DateTime reservationDate, int reservationSlot, int?registOpId = null, string registOpMan = "", int?rxDoctorId = null)
        {
            try
            {
                if (!registOpId.HasValue)
                {
                    try { registOpId = UserSelf.OpId; registOpMan = UserSelf.OpManFullMsg; }
                    catch { }
                }
                //var u = UserLoginData;
                //姓名
                var cust = _db.CHIS_Code_Customer.FirstOrDefault(m => m.CustomerID == customerID);
                //科室
                var depart = _db.vwCHIS_Code_Department.FirstOrDefault(m => m.DepartmentID == departmentID);
                if (depart == null)
                {
                    throw new Exception("科室没有找到");
                }
                //医生
                var employee = _db.vwCHIS_Code_Doctor.FirstOrDefault(m => m.DoctorId == doctorId);
                var workInfo = new DoctorCBL(this).GetEmployeeOnDutyInfo(doctorId, reservationDate, reservationSlot);
                if (workInfo == null)
                {
                    workInfo = new DoctorCBL(this).InitalEmployeeOnDutyInfo(doctorId, depart.DepartmentID, reservationDate, reservationDate.AddDays(7)).FirstOrDefault();
                }
                var timestr = $"{workInfo.FromTime?.ToString(@"hh\:mm")}—{workInfo.ToTime?.ToString(@"hh\:mm")}";

                var add = await _resSvr.AddOneRegister(cust.CustomerID, depart.DepartmentID, doctorId, depart.StationID.Value, reservationDate, reservationSlot, RegistFrom.V20Web
                                                       , opId : registOpId, opMan : registOpMan, rxDoctorId : rxDoctorId
                                                       );


                //给用户发送短信
                StringBuilder b = new StringBuilder();
                b.Append($"尊敬的{cust.CustomerName},请于{reservationDate.ToString("yyyy年MM月dd日")} {timestr} 至{depart.DepartmentName}({employee.DoctorName})医生处就诊,感谢您的预约。【天使健康】");
                Codes.Utility.SMS sms = new Codes.Utility.SMS();
                //await new SendVCodeCBL(this).SendVCode(cust.Telephone, b.ToString());
                var rlt = await sms.PostSmsInfoAsync(cust.CustomerMobile, b.ToString());

                return(Json(new
                {
                    rlt = true,
                    msg = "",
                    rltCode = add.HaveRegisted ? "REPET_REGIST" : "",
                    registStatus = add.HaveRegisted ? "请注意,您已经预约了,不能重复预约。先前预约信息如下。" : "",
                    registerId = add.RegisterID,
                    registerSeq = add.RegisterSeq,
                    customer = cust,
                    stationName = depart.StationName,
                    departmentName = depart.DepartmentName,
                    employee = employee,
                    reservationDate = reservationDate.ToString("yyyy-MM-dd"),
                    timeInfo = timestr
                }));
            }
            catch (Exception ex) { return(Json(new { rlt = false, msg = ex.Message })); }
        }
Exemple #3
0
 public JsonResult SendLoginVCode(string loginName)
 {
     try
     {
         var items = GetLoginInfoItems(loginName);
         if (items.Count() <= 0)
         {
             throw new Exception("不存在该账户,请输入正确登录账号");
         }
         var st = loginName.GetStringType();
         if (st.IsEmpty)
         {
             throw new Exception("没有输入邮箱、手机号、身份证号");
         }
         if (st.IsEmail)
         {
             //6为随机数并存数据库
             var random    = CHIS.Code.Utility.ComTools.GenerateRandomNumber(6);
             var emailData = new CHIS_DataTemp_SendMailVCode
             {
                 CreatTime    = DateTime.Now,
                 EmailAddress = loginName,
                 VCode        = random,
                 VCodeProp    = "DPWD"
             };
             _db.CHIS_DataTemp_SendMailVCode.Add(emailData);
             _db.SaveChanges();
             //向邮箱发送一份验证邮件
             CHIS.Codes.Utility.EmailHelper email = new CHIS.Codes.Utility.EmailHelper();
             string sub = "天使健康医生工作站";
             string msg = $"{random}本次登录验证码";
             email.SendEmail(loginName, msg, sub);
         }
         if (st.IsMobile)
         {
             //6为随机数并存数据库
             var random  = CHIS.Code.Utility.ComTools.GenerateRandomNumber(6);
             var smsData = new CHIS_DataTemp_SMS()
             {
                 CreatTime = DateTime.Now,
                 PhoneCode = loginName,
                 VCodeProp = "DPWD",
                 VCode     = random
             };
             _db.CHIS_DataTemp_SMS.Add(smsData);
             _db.SaveChanges();
             //向手机发送一份验证码
             Codes.Utility.SMS sms     = new Codes.Utility.SMS();
             string            content = $"{random}为动态登录验证码,有效时间为1分钟【天使健康】";
             sms.PostSmsInfoAsync(loginName, content).ToString();
         }
         return(Json(new { rlt = true }));
     }
     catch (Exception ex) { return(Json(new { rlt = false, msg = ex.Message })); }
 }
Exemple #4
0
        /// <summary>
        /// 给第三方推送订单
        /// </summary>
        /// <remarks>方法:Json_SendOrderToNet(int treatId)</remarks>
        /// <param name="treatId">接诊ID</param>
        /// <returns></returns>
        public bool SendDrug_SendOrderToNetJK(long treatId, string sendRmk)
        {
            var vwTreat    = _db.vwCHIS_DoctorTreat.AsNoTracking().FirstOrDefault(m => m.TreatId == treatId);
            var vwExtraFee = _db.vwCHIS_Doctor_ExtraFee.AsNoTracking().Where(m => m.TreatId == treatId && m.TreatFeeTypeId == (int)ExtraFeeTypes.TransFee && m.MailForSupplierId == MPS.SupplierId_JK && m.ChargeStatus == ChargeStatus.Payed).ToList();
            int custId     = vwTreat.CustomerId;//客户Id

            /*
             *获取第三方药品的总金额
             */
            var formed = _db.vwCHIS_DoctorAdvice_Formed_Detail.AsNoTracking().Where(m => m.TreatId == treatId &&
                                                                                    m.SourceFrom == (int)DrugSourceFrom.WebNet &&
                                                                                    m.SupplierId == MPS.SupplierId_JK &&
                                                                                    m.ChargeStatus == ChargeStatus.Payed &&
                                                                                    m.DispensingStatus == (int)DispensingStatus.NeedSend).ToList();
            var herbs = _db.vwCHIS_DoctorAdvice_Herbs_Detail.AsNoTracking().Where(m => m.TreatId == treatId &&
                                                                                  m.SourceFrom == (int)DrugSourceFrom.WebNet &&
                                                                                  m.SupplierId == MPS.SupplierId_JK &&
                                                                                  m.ChargeStatus == ChargeStatus.Payed &&
                                                                                  m.DispensingStatus == (int)DispensingStatus.NeedSend).ToList();

            if (formed.Count + herbs.Count == 0)
            {
                throw new NotProcessException();                      //抛出不需要处理的错误
            }
            long selectedAddressId = (long)vwTreat.TransferAddressId; //选择邮寄地址Id
            var  moblie            = vwTreat.CustomerMobile;          //客户手机号
            var  orderId           = Guid.NewGuid().ToString();       //给第三方的订单Id

            var     formedAmout = formed.Sum(e => e.Amount);
            var     herbsAmout  = herbs.Sum(e => e.Amount);
            var     ext         = vwExtraFee.Sum(m => m.Amount);
            decimal totalamount = formedAmout + ext;
            var     sendAddr    = _db.vwCHIS_Code_Customer_AddressInfos.AsNoTracking().FirstOrDefault(m => m.AddressId == selectedAddressId);

            if (custId == 0 && orderId == null)
            {
                throw new Exception("用户的ID和订单编号不能为空");
            }

            var FormedDoctorAdvices = new List <vwCHIS_DoctorAdvice_Formed_Detail>(); //发送成药的信息记录
                                                                                      //查询是否已经存在该订单号
            var netOrderItem = _db.CHIS_Shipping_NetOrder.AsNoTracking().FirstOrDefault(m => m.SendOrderId == orderId);

            //IsSendedSuccess 0:默认是0.表示未发送订单,1表示发送成功订单,2表示发送失败
            if (netOrderItem != null && netOrderItem.SendedStatus == (int)SendState.SendSucces)
            {
                throw new Exception("该订单已经发送了");
            }
            else if (netOrderItem == null)
            {
                //4.将查询到的数据存入netOrderEntity对象中
                netOrderItem = new Models.CHIS_Shipping_NetOrder
                {
                    StationId       = vwTreat.StationId,
                    TreatId         = treatId,
                    CreatTime       = DateTime.Now,
                    SendTime        = DateTime.Now,
                    TreatTime       = vwTreat.TreatTime,
                    SendOrderId     = orderId,
                    CustomerId      = custId,
                    SendAddressId   = selectedAddressId,
                    TotalAmount     = totalamount,
                    ContainTransFee = ext,
                    IsRdOrder       = _env.IsDevelopment(),//是否是测试数据
                    SupplierId      = MPS.SupplierId_JK
                };

                netOrderItem = _db.Add(netOrderItem).Entity;
                _db.SaveChanges();
                var netdrugs = _db.vwCHIS_DoctorAdvice_Formed_Detail.AsNoTracking().Where(
                    m => m.TreatId == treatId && m.SourceFrom == (int)DrugSourceFrom.WebNet && m.SupplierId == MPS.SupplierId_JK && m.DispensingStatus == (int)DispensingStatus.NeedSend).ToList();
                foreach (var item in netdrugs)
                {
                    var detailEnty = new Models.CHIS_Shipping_NetOrder_Formed_Detail
                    {
                        DrugId         = item.DrugId,
                        PrescriptionNo = item.PrescriptionNo.ToString(),
                        Qty            = item.Qty,
                        Price          = item.Price,
                        Amount         = item.Amount,
                        UnitName       = item.UnitName,
                        NetOrderId     = netOrderItem.NetOrderId,
                        DoctorAdviceId = item.AdviceFormedId //医生接诊开药的Id
                    };
                    _db.Add(detailEnty);
                    FormedDoctorAdvices.Add(item);//方便发送成功后写入日志
                }
                _db.SaveChanges();
            }
            if (!sendAddr.Mobile.IsMobileNumber())
            {
                throw new Exception("手机号码格式错误!");
            }

            //发送给健客信息
            string FromJKSavedOrderNo = "";
            var    bStatus            = _jkSvr.SendJKWebNetOrder(totalamount, orderId, selectedAddressId, sendRmk, out FromJKSavedOrderNo);

            if (!bStatus)
            {
                throw new Exception("发送给三方健客信息没有成功");
            }


            var enty = _db.CHIS_Shipping_NetOrder.FirstOrDefault(m => m.SendOrderId == orderId);

            //更新数据库
            if (bStatus && FromJKSavedOrderNo.IsNotEmpty())
            {
                enty.SendedStatus = (int)SendState.SendSucces;
                enty.NetOrderNO   = FromJKSavedOrderNo;
                enty.SendTime     = DateTime.Now;
                _db.SaveChanges();

                //回写状态和日志
                foreach (var item in FormedDoctorAdvices)
                {
                    //修改发药的状态
                    // MainDbContext.CHIS_DoctorAdvice_Formed_Detail.Find(item.AdviceFormedId).DispensingStatus = 1;//发药
                    var afd = _db.CHIS_DoctorAdvice_Formed_Detail.FirstOrDefault(m => m.AdviceFormedId == item.AdviceFormedId);
                    afd.DispensingStatus = 1;
                    _db.SaveChanges();
                    //记录一份发药日志
                    AddSendDrugLog(item.AdviceFormedId, item.DrugId, item.PrescriptionNo.Value, item.Price, item.Qty, item.TreatId);
                }



                //给该用户发送短信通知
                Codes.Utility.SMS sms      = new Codes.Utility.SMS();
                string            getormsg = $"尊敬的{sendAddr.ContactName}您好,你的药品已发货,请保持电话畅通,祝您身体健康。【天使健康】"; //收件人的
                sms.PostSmsInfoAsync(sendAddr.Mobile, getormsg).ToString();
                //if (sendAddr.Mobile != payOrderInfor.Telephone)
                //{ //账号所有者
                //    string ownermsg = $"尊敬的{payOrderInfor.CustomerName}您好,您于{payOrderInfor.PayedTime.ToString("yyyy年MM月dd日")}在{payOrderInfor.StationName}就诊药品已发货,请注意查收,发货地址:{sendAddr.FullAddress},收件人:{sendAddr.ContactName},联系电话:{sendAddr.Mobile},请保持电话畅通,祝您身体健康。【天使健康】";
                //    sms.PostSmsInfoAsync(payOrderInfor.Telephone, ownermsg).ToString();
                //}
            }
            else
            {
                enty.SendedStatus = (int)SendState.SendFail;
                enty.SendTime     = DateTime.Now;
                _db.SaveChanges();
                throw new Exception("发送数据给健客失败!");
            }

            return(true);
        }
Exemple #5
0
        /// <summary>
        /// 发送验证码
        /// </summary>
        /// <param name="account">账号或者手机号</param>
        /// <param name="sendTemplate">验证码的模板 [code]</param>
        /// <returns></returns>
        public async Task <bool> SendVCode(string account, string sendTemplate, string vCodeProp = null, bool bCheckVrifyed = true, bool bCheckExists = true)
        {
            var st = account.GetStringType();

            if (st.IsEmpty)
            {
                throw new Exception("没有输入邮箱、手机号、身份证号");
            }

            Func <string, IEnumerable <vwCHIS_Sys_Login> > GetLoginInfoItems = (loginName) =>
            {
                if ((loginName.GetStringType().IsEmail))
                {
                    return(_db.vwCHIS_Sys_Login.Where(m => m.Email == loginName).ToList());
                }
                if (loginName.GetStringType().IsMobile)
                {
                    return(_db.vwCHIS_Sys_Login.Where(m => m.Mobile == loginName).ToList());
                }
                if (loginName.GetStringType().IsIdCardNumber)
                {
                    return(_db.vwCHIS_Sys_Login.Where(m => m.IdCardNumber == loginName).ToList());
                }
                return(null);
            };

            if (bCheckExists || bCheckVrifyed) // 检测账户是否存在
            {
                var items = GetLoginInfoItems(account);
                if (items.Count() <= 0)
                {
                    throw new Exception("不存在该账户,请输入正确登录账号");
                }
                if (items.Count() > 1)
                {
                    throw new Exception("检测到多账户,违反账户唯一性要求");
                }

                if (bCheckVrifyed)
                {
                    var item = items.FirstOrDefault();
                    if (st.IsMobile)
                    {
                        if (item.MobileIsAuthenticated != true)
                        {
                            throw new Exception("该手机号没有通过验证");
                        }
                    }
                    else if (st.IsEmail)
                    {
                        if (item.EmailIsAuthenticated != true)
                        {
                            throw new Exception("该邮箱没有通过验证");
                        }
                    }
                }
            }



            if (st.IsEmail)
            {
                //6为随机数并存数据库
                var random    = CHIS.Code.Utility.ComTools.GenerateRandomNumber(6);
                var emailData = new CHIS_DataTemp_SendMailVCode
                {
                    CreatTime    = DateTime.Now,
                    EmailAddress = account,
                    VCode        = random,
                    VCodeProp    = null
                };
                await _db.CHIS_DataTemp_SendMailVCode.AddAsync(emailData);

                await _db.SaveChangesAsync();

                //向邮箱发送一份验证邮件
                CHIS.Codes.Utility.EmailHelper email = new CHIS.Codes.Utility.EmailHelper();
                string sub = "天使健康医生工作站-(验证码,不用回复)";
                string msg = sendTemplate.Replace("[code]", random);//  $"{random}本次操作验证码";
                email.SendEmail(account, msg, sub);
            }
            if (st.IsMobile)
            {
                //6为随机数并存数据库
                var random  = CHIS.Code.Utility.ComTools.GenerateRandomNumber(6);
                var smsData = new CHIS_DataTemp_SMS()
                {
                    CreatTime = DateTime.Now,
                    PhoneCode = account,
                    VCodeProp = null,
                    VCode     = random
                };
                await _db.CHIS_DataTemp_SMS.AddAsync(smsData);

                await _db.SaveChangesAsync();

                //向手机发送一份验证码
                Codes.Utility.SMS sms     = new Codes.Utility.SMS();
                string            content = sendTemplate.Replace("[code]", random);// $"{random}为本次操作验证码,有效时间为1分钟【天使健康】";
                await sms.PostSmsInfoAsync(account, content);
            }

            return(true);
        }