public ActionResult Void(StoreCouponDetailRequest request, int? authuid, UserModel authUser) { request.AuthUser = authUser; var coupon = _storecouponRepo.Get(sp => sp.Id == request.StoreCouponId && sp.UserId.Value == authUser.Id && sp.Status!=(int)CouponStatus.Used && sp.ValidEndDate >= DateTime.Now).FirstOrDefault(); if (coupon == null) return new RestfulResult { Data = new ExecuteResult { StatusCode = StatusCode.InternalServerError, Message = "代金券已失效或使用!" } }; using (var ts = new TransactionScope()) { // step1: void coupon coupon.Status = (int)CouponStatus.Deleted; _storecouponRepo.Update(coupon); //step2: rebate points of app var newPoint = _pointRepo.Insert(new PointHistoryEntity() { CreatedDate = DateTime.Now, CreatedUser = authUser.Id, Description = "取消代金券退回积点", Name = string.Format("取消代金券,返回{0}",ConfigManager.Point2GroupRatio * coupon.Points.Value), PointSourceId = request.StoreCouponId, PointSourceType = (int)PointSourceType.Group, Status = (int)DataStatus.Normal, UpdatedDate = DateTime.Now, UpdatedUser = authUser.Id, User_Id = authUser.Id, Type = (int)PointType.VoidCoupon, Amount = ConfigManager.Point2GroupRatio * coupon.Points.Value }); //step3: insert coupon log _couponlogRepo.Insert(new CouponLogEntity() { ActionType = (int)CouponActionType.Void, Code = coupon.Code, CreateDate = DateTime.Now, CreateUser = authUser.Id, Type = (int)CouponType.StorePromotion }); // step4: void action should call aws service directly to check the real time coupon status string message = string.Empty; bool isVoidSuccess = AwsHelper.SendHttpMessage(ConfigManager.AwsHttpUrlVoidCoupon, new { code = coupon.Code }, ConfigManager.AwsHttpPublicKey, ConfigManager.AwsHttpPrivateKey, r => message = r.message, null); // step3: commit if (newPoint != null && isVoidSuccess) { ts.Complete(); } else { return new RestfulResult { Data = new ExecuteResult { StatusCode = StatusCode.InternalServerError, Message = "取消代金券异常!" } }; } } return new RestfulResult { Data = new ExecuteResult { StatusCode = StatusCode.Success, Message = "取消代金券成功,积点将于1个工作日后返回会员卡账户!" } }; }
public ActionResult Detail(StoreCouponDetailRequest request, int? authuid, UserModel authUser) { request.AuthUser = authUser; if (request == null) return new RestfulResult { Data = new ExecuteResult<StoreCouponListRequest>(null) }; var linq = _storecouponRepo.Get(c => c.Id == request.StoreCouponId && c.UserId== authUser.Id && c.Status != (int)CouponStatus.Deleted); var linq2 = linq.Join(_storeproRepo.GetAll(), o => o.StorePromotionId, i => i.Id, (o, i) => new { SC = o, SP = i }) .Join(_storeproscopeRepo.Get(s => s.Status != (int)DataStatus.Deleted), o => new { o.SC.StorePromotionId, o.SC.StoreId }, i => new { i.StorePromotionId, i.StoreId }, (o, i) => new { SC=o.SC,SP=o.SP,SS=i}); ; var responseData = from l in linq2.ToList() select new StoreCouponDetailResponse().FromEntity<StoreCouponDetailResponse>(l.SC, c => { c.Promotion = new StorePromotionDetailResponse().FromEntity<StorePromotionDetailResponse>(l.SP, sp => { sp.InScopeNotice_S = new[] { new StorePromotionScopeDetailResponse(){ Excludes = l.SS.Excludes, StoreName = l.SS.StoreName }}; }); c.StoreName = l.SS.StoreName; c.Exclude = l.SS.Excludes; }); return new RestfulResult { Data = new ExecuteResult<StoreCouponDetailResponse>(responseData.FirstOrDefault()) }; }