Esempio n. 1
0
        public async Task <IActionResult> CommentConsumptionAsync([FromBody] CommentConsumptionRequestDto requestDto)
        {
            var consumptionBiz   = new ConsumptionBiz();
            var consumptionModel = await consumptionBiz.GetModelAsync(requestDto.ConsumptionGuid);

            if (consumptionModel == null)
            {
                return(Failed(ErrorCode.Empty, "未查询到该消费记录"));
            }
            var goodsItemModel = await new GoodsItemBiz().GetModelAsync(consumptionModel.FromItemGuid);
            var projectModel   = await new ProjectBiz().GetModelAsync(goodsItemModel?.ProjectGuid);

            var commentModel = new CommentModel
            {
                CommentGuid   = Guid.NewGuid().ToString("N"),
                TargetGuid    = goodsItemModel?.ProjectGuid,
                Content       = requestDto.Content,
                Score         = requestDto.Score,
                Anonymous     = requestDto.Anonymous,
                CreatedBy     = UserID,
                LastUpdatedBy = UserID,
                OrgGuid       = string.Empty
            };

            consumptionModel.CommentGuid = commentModel.CommentGuid;
            consumptionModel.IsComment   = true;
            var result = await consumptionBiz.CommentConsumptionAsync(consumptionModel, commentModel);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "评价失败"));
        }
Esempio n. 2
0
        /// <summary>
        /// 用户预约的服务完成后发送微信模板消息通知
        /// </summary>
        /// <param name="consumptionGuid"></param>
        private void NotifyUser(string consumptionGuid)
        {
            Task.Run(() =>
            {
                if (string.IsNullOrWhiteSpace(PlatformSettings.UserAppointmentCompletedNotificationTemplate))
                {
                    return;
                }

                var userOpenId        = "";
                string controllerName = ControllerContext.ActionDescriptor.ControllerName;
                string actionName     = ControllerContext.ActionDescriptor.ActionName;
                try
                {
                    var model     = new ConsumptionBiz().GetModel(consumptionGuid);
                    var userModel = new UserBiz().GetModelAsync(model.UserGuid).Result;
                    Logger.Debug($"NotifyUser-用户预约的服务已完成-用户openid-{userModel?.WechatOpenid}");
                    if (string.IsNullOrWhiteSpace(userModel?.WechatOpenid ?? ""))
                    {
                        return;
                    }
                    var merchantModel = new MerchantBiz().GetAsync(model.MerchantGuid).Result;
                    var projectModel  = new ProjectBiz().GetAsync(model.ProjectGuid).Result;
                    var resToken      = WeChartApi.GetAccessToken(PlatformSettings.CDClientAppId, PlatformSettings.CDClientAppSecret).Result;
                    Logger.Debug($"NotifyUser-用户预约的服务已完成-获取token-{JsonConvert.SerializeObject(resToken)}");
                    if (string.IsNullOrWhiteSpace(resToken.AccessToken))
                    {
                        Common.Helper.Logger.Error($"GD.API.Controllers.Consumer.{controllerName}.{actionName}  openId:[{userOpenId}] {Environment.NewLine} error:用户预约后发送模板消息通知云医执行端公众号-获取token失败。{resToken.Errmsg}");
                        return;
                    }
                    userOpenId    = userModel.WechatOpenid;
                    var clientMsg = new WeChatTemplateMsg
                    {
                        Touser      = userModel.WechatOpenid,
                        Template_Id = PlatformSettings.UserAppointmentNotificationTemplate,
                        Data        = new
                        {
                            First = new { Value = "【您预约的服务已完成】" },
                            //完成时间
                            Keyword1 = new { Value = $"{model.ConsumptionEndDate.Value.ToString("MM月dd日 HH:mm")}" },
                            //服务项目
                            Keyword2 = new { Value = projectModel?.ProjectName },
                            //服务门店
                            Keyword3 = new { Value = merchantModel.MerchantName },
                            //备注
                            Remark = new { Value = "如对我们服务有什么建议,请及时与我们联系" },
                        }
                    };
                    var clientTempMsgRes = WeChartApi.SendTemplateMsg(clientMsg, resToken.AccessToken);
                    Logger.Debug($"NotifyUser-用户预约的服务已完成-发送模板消息-{JsonConvert.SerializeObject(clientTempMsgRes)}");
                }
                catch (Exception ex)
                {
                    Logger.Error($"GD.API.Controllers.Consumer.{controllerName}.{actionName}  openId:[{userOpenId}] {Environment.NewLine} error:用户预约服务完成后发送模板消息通知云医用户端公众号端失败。{ex.Message}");
                }
            });
        }
        public async Task <IActionResult> CancelOppointmentAsync([FromBody] UpdateOppointmentStatusRequestDto requestDto)
        {
            var consumptionBiz = new ConsumptionBiz();
            var model          = consumptionBiz.GetModel(requestDto.ConsumptionGuid);

            if (model == null || string.IsNullOrWhiteSpace(model.ConsumptionGuid))
            {
                return(Failed(ErrorCode.Empty, "找不到该预约记录!"));
            }

            if (!model.ConsumptionStatus.Equals(ConsumptionStatusEnum.Booked.ToString()))
            {
                return(Failed(ErrorCode.UserData, "该预约记录的状态不支持取消,请检查!"));
            }
            var projectModel           = await new ProjectBiz().GetAsync(model.ProjectGuid);
            var categoryExtensionModel = await new MerchantCategoryBiz().GetModelByClassifyGuidAsync(projectModel.ClassifyGuid, projectModel.MerchantGuid);
            var limitTime = (categoryExtensionModel?.LimitTime) ?? 30;

            if (requestDto.FromPoint == "Consumer")
            {
                if (DateTime.Now >= model.AppointmentDate)
                {
                    return(Failed(ErrorCode.UserData, $"当前已过预约时间,请联系门店处理!"));
                }
                else if ((model.AppointmentDate - DateTime.Now).TotalMinutes < limitTime)
                {
                    return(Failed(ErrorCode.UserData, $"当前离到店服务时间不足{limitTime}分钟,不可取消,请联系门店处理!"));
                }
            }
            model.ConsumptionStatus = ConsumptionStatusEnum.Canceled.ToString();
            model.LastUpdatedBy     = UserID;
            model.LastUpdatedDate   = DateTime.Now;

            //取消预约 须在个人产品数量上+1
            var goodsItemModel = await new GoodsItemBiz().GetAsync(model.FromItemGuid);

            if (goodsItemModel == null)
            {
                return(Failed(ErrorCode.Empty, "找不到该记录的个人商品项!"));
            }
            goodsItemModel.Remain++;
            goodsItemModel.Used--;
            goodsItemModel.Available = goodsItemModel.Remain > 0;

            //删除预约所占时间
            var merchantScheduleDetailModel = await new MerchantScheduleDetailBiz().GetModelAsyncByConsumptionGuid(model.ConsumptionGuid);

            if (merchantScheduleDetailModel == null)
            {
                return(Failed(ErrorCode.Empty, "找不到该预约所占用时间!"));
            }

            var isSuccess = await consumptionBiz.CancelOppointment(model, goodsItemModel, merchantScheduleDetailModel);

            return(Success(isSuccess));
        }
Esempio n. 4
0
        public IActionResult ChangeAppointmentStatus([FromBody] ChangeAppointmentStatusRequestDto requestDto)
        {
            var model = new ConsumptionBiz().GetModel(requestDto.ConsumptionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "没找到该预约信息!"));
            }

            var isSuccess = false;

            switch (requestDto.ConsumptionStatus)
            {
            case ConsumptionStatusEnum.Canceled:
                if (!model.ConsumptionStatus.Equals(ConsumptionStatusEnum.Booked.ToString()))
                {
                    return(Failed(ErrorCode.UserData, "该预约记录的状态不支持取消,请检查!"));
                }
                //取消预约 须在个人产品数量上+1
                isSuccess = ChangeStatus(model, ConsumptionStatusEnum.Canceled);
                break;

            case ConsumptionStatusEnum.Arrive:
                if (!model.ConsumptionStatus.Equals(ConsumptionStatusEnum.Booked.ToString()))
                {
                    return(Failed(ErrorCode.UserData, "该预约记录的状态不支持取消,请检查!"));
                }
                isSuccess = ChangeStatus(model, ConsumptionStatusEnum.Arrive);
                break;

            case ConsumptionStatusEnum.Completed:
                if (!model.ConsumptionStatus.Equals(ConsumptionStatusEnum.Arrive.ToString()))
                {
                    return(Failed(ErrorCode.UserData, "该预约记录的状态不支持取消,请检查!"));
                }
                isSuccess = ChangeStatus(model, ConsumptionStatusEnum.Arrive);
                break;

            default:
                return(Failed(ErrorCode.UserData, "该预约记录的状态不支持该操作,请检查!"));
            }
            return(Success(isSuccess));
        }
Esempio n. 5
0
        public async Task <IActionResult> CompleteConsumption([FromBody] CompleteConsumptionRequestDto requestDto)
        {
            var model = new ConsumptionBiz().GetModel(requestDto.ConsumptionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "没找到该预约信息!"));
            }
            if (!string.Equals(model.ConsumptionStatus.ToString(), ConsumptionStatusEnum.Arrive.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                return(Failed(ErrorCode.UserData, "该消费记录不处于[已到店开始]状态,不能执行开始操作"));
            }
            model.MerchantRemark     = requestDto.MerchantRemark;
            model.ConsumptionStatus  = ConsumptionStatusEnum.Completed.ToString();
            model.ConsumptionEndDate = DateTime.Now;
            model.LastUpdatedBy      = UserID;
            model.LastUpdatedDate    = DateTime.Now;
            var result = await new ConsumptionBiz().UpdateAsync(model);

            NotifyUser(model.ConsumptionGuid);
            return(result ? Success() : Failed(ErrorCode.DataBaseError, "完成操作失败"));
        }
Esempio n. 6
0
        public async Task <IActionResult> SetMissStautsForConsumptionAsync(string consumptionGuid)
        {
            var consumptionBiz = new ConsumptionBiz();
            var model          = consumptionBiz.GetModel(consumptionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "没找到该预约信息!"));
            }
            if (!string.Equals(model.ConsumptionStatus.ToString(), ConsumptionStatusEnum.Booked.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                return(Failed(ErrorCode.UserData, "该预约记录不处于[已预约]状态,不能修改状态为[已错过]"));
            }
            if (DateTime.Now < model.AppointmentDate)
            {
                return(Failed(ErrorCode.UserData, "当前还未到预约的时间,不能修改预约记录状态为[已错过]"));
            }
            model.LastUpdatedBy   = UserID;
            model.LastUpdatedDate = DateTime.Now;
            var result = await consumptionBiz.UpdateAsync(model);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "修改预约记录状态为[已错过]失败"));
        }
Esempio n. 7
0
        public async Task <IActionResult> StartConsumption(string consumptionGuid)
        {
            var consumptionBiz = new ConsumptionBiz();
            var model          = consumptionBiz.GetModel(consumptionGuid);

            if (model == null)
            {
                return(Failed(ErrorCode.Empty, "没找到该预约信息!"));
            }
            var checkWorking = await consumptionBiz.CheckHasWorkingConsumptionAsync(model.OperatorGuid);

            if (checkWorking)
            {
                return(Failed(ErrorCode.UserData, "尚有服务正在进行中,请先完成进行中的服务"));
            }
            if (!string.Equals(model.ConsumptionStatus.ToString(), ConsumptionStatusEnum.Booked.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                return(Failed(ErrorCode.UserData, "该消费记录不处于[已预约]状态,不能执行开始操作"));
            }
            var result = ChangeStatus(model, ConsumptionStatusEnum.Arrive);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "开始操作失败"));
        }