示例#1
0
        /// <summary>
        /// 核销优惠劵
        /// </summary>
        /// <param name="pRequest"></param>
        /// <returns></returns>
        private string BestowCoupon(string pRequest)
        {
            RespData respData = new RespData();

            try
            {
                var reqObj = pRequest.DeserializeJSONTo <reqConunbondata>();
                if (string.IsNullOrEmpty(reqObj.userId))
                {
                    respData.ResultCode = "103";
                    respData.Message    = "登陆用户不能为空";
                }
                if (string.IsNullOrEmpty(reqObj.Parameters.doorID))
                {
                    respData.ResultCode = "103";
                    respData.Message    = "此APP版本无法核销,请升级到新版本。";
                    return(respData.ToJSON());
                }
                var loggingSessionInfo = Default.GetBSLoggingSession(reqObj.customerId, reqObj.userId);
                var couponUseBll       = new CouponUseBLL(loggingSessionInfo);             //优惠券使用BLL实例化
                var vcmBll             = new VipCouponMappingBLL(loggingSessionInfo);      //优惠券BLL实例化
                var couponTypeBll      = new CouponTypeBLL(loggingSessionInfo);            //优惠券类型
                var mappingBll         = new CouponTypeUnitMappingBLL(loggingSessionInfo); //优惠券和门店映射
                //var vcmEntity = new VipCouponMappingEntity();
                CouponBLL bll = new CouponBLL(loggingSessionInfo);



                //判断是否有权限核销优惠券
                CouponEntity couponEntity = null;
                if (!string.IsNullOrEmpty(reqObj.Parameters.couponCode))
                {
                    CouponEntity[] couponEntityArray = bll.QueryByEntity(new CouponEntity()
                    {
                        CouponCode = reqObj.Parameters.couponCode, CustomerID = reqObj.customerId
                    }, null);
                    if (couponEntityArray.Length != 0)
                    {
                        couponEntity = couponEntityArray[0];
                    }
                }
                else
                {
                    couponEntity = bll.GetByID(reqObj.Parameters.cuponID);
                }


                if (couponEntity != null)
                {
                    List <IWhereCondition> wheresOrderNo = new List <IWhereCondition>();
                    wheresOrderNo.Add(new EqualsCondition()
                    {
                        FieldName = "CouponID", Value = couponEntity.CouponID
                    });
                    var resultCouponVipID = vcmBll.Query(wheresOrderNo.ToArray(), null);

                    var couponTypeInfo = couponTypeBll.GetByID(couponEntity.CouponTypeID);
                    if (couponTypeInfo != null)
                    {
                        if (couponTypeInfo.SuitableForStore == 2)//下面的doorid传的是门店的id,如果等于1所有门店都能用,如果等于3所有分销商都能用
                        {
                            var couponTypeUnitMapping = mappingBll.QueryByEntity(new CouponTypeUnitMappingEntity()
                            {
                                CouponTypeID = new Guid(couponEntity.CouponTypeID.ToString()), ObjectID = reqObj.Parameters.doorID
                            }, null).FirstOrDefault();

                            if (couponTypeUnitMapping == null)
                            {
                                respData.ResultCode = "104";
                                respData.Message    = "请到指定门店/分销商使用";
                                return(respData.ToJSON());
                            }
                        }
                        if (couponTypeInfo.SuitableForStore == 3)//下面的doorid传的是门店的id,如果等于1所有门店都能用,如果等于3所有分销商都能用
                        {
                            //doorid必须是获取,分销商如果没数据,就报错。
                            RetailTraderBLL    _RetailTraderBLL = new RetailTraderBLL(loggingSessionInfo);
                            RetailTraderEntity en = _RetailTraderBLL.GetByID(reqObj.Parameters.doorID);
                            if (en == null)
                            {
                                respData.ResultCode = "104";
                                respData.Message    = "请到指定分销商使用";
                                return(respData.ToJSON());
                            }
                        }
                        if (couponTypeInfo.SuitableForStore == 1)//下面的doorid传的是门店的id,如果等于1所有门店都能用,如果等于3所有分销商都能用
                        {
                            //doorid必须是获取,门店如果没有数据,就报错。
                            TUnitBLL    _TUnitBLL = new TUnitBLL(loggingSessionInfo);
                            TUnitEntity en        = _TUnitBLL.GetByID(reqObj.Parameters.doorID);
                            if (en == null)
                            {
                                respData.ResultCode = "104";
                                respData.Message    = "请到指定门店使用";
                                return(respData.ToJSON());
                            }
                        }

                        int res = bll.BestowCoupon(couponEntity.CouponID, reqObj.Parameters.doorID);
                        if (res > 0) //如果没有影响一行,所以Coupon表里这条记录的status=1了,不能被使用了。
                        {
                            InoutService server = new InoutService(loggingSessionInfo);
                            var          tran   = server.GetTran();
                            using (tran.Connection)//事务
                            {
                                #region 优惠券使用记录
                                var couponUseEntity = new CouponUseEntity()
                                {
                                    CouponID = couponEntity.CouponID,
                                    VipID    = resultCouponVipID.Length == 0 ? "" : resultCouponVipID[0].VIPID,
                                    UnitID   = reqObj.Parameters.doorID,
                                    //OrderID = orderEntity.OrderID.ToString(),
                                    //CreateBy = reqObj.userId,
                                    Comment    = "核销电子券",
                                    CustomerID = reqObj.customerId
                                };
                                couponUseBll.Create(couponUseEntity);//生成优惠券使用记录
                                #endregion

                                //#region 修改优惠券数量   2016-06-03 使用了redis不用在这里更新数量
                                //couponTypeInfo.IsVoucher = couponTypeInfo.IsVoucher == null ? 1 : couponTypeInfo.IsVoucher + 1;
                                //couponTypeBll.Update(couponTypeInfo, tran);
                                //#endregion

                                respData.ResultCode = "200";
                                respData.Message    = "优惠劵使用成功";

                                tran.Commit();
                            }
                        }
                        else
                        {
                            respData.ResultCode = "103";
                            respData.Message    = "优惠劵已使用";
                        }
                    }
                }
                else
                {
                    respData.ResultCode = "104";
                    respData.Message    = "没有找到对应券。";
                    return(respData.ToJSON());
                }
            }
            catch (Exception)
            {
                respData.ResultCode = "103";
                respData.Message    = "数据库操作失败";
            }
            return(respData.ToJSON());
        }
示例#2
0
        protected override EmptyResponseData ProcessRequest(DTO.Base.APIRequest <SetCouponRP> pRequest)
        {
            var rd   = new EmptyResponseData();
            var para = pRequest.Parameters;
            var loggingSessionInfo       = new SessionManager().CurrentUserLoginInfo;
            var couponTypeBLL            = new CouponTypeBLL(loggingSessionInfo);
            var couponBLL                = new CouponBLL(loggingSessionInfo);
            var couponTypeUnitMappingBLL = new CouponTypeUnitMappingBLL(loggingSessionInfo);
            CouponTypeItemMappingBLL    bllCouponTypeItemMapping    = new CouponTypeItemMappingBLL(loggingSessionInfo);
            CouponTypeItemMappingEntity entityCouponTypeItemMapping = null;
            var redisCouponBLL = new JIT.CPOS.BS.BLL.RedisOperationBLL.Coupon.RedisCouponBLL();

            if (couponTypeBLL.ExistsCouponTypeName(para.CouponTypeName, loggingSessionInfo.ClientID) > 0)
            {
                throw new APIException(-1, "优惠券名称不可重复!");
            }
            var pTran = couponTypeBLL.GetTran();//事务

            using (pTran.Connection)
            {
                try
                {
                    CouponTypeEntity couponTypeEntity = null;
                    //保存券产品表
                    if (string.IsNullOrEmpty(para.CouponTypeID))//生成优惠券
                    {
                        couponTypeEntity = new CouponTypeEntity();

                        couponTypeEntity.CouponTypeName = para.CouponTypeName;
                        couponTypeEntity.CouponTypeDesc = para.CouponTypeDesc;
                        couponTypeEntity.CouponCategory = para.CouponCategory;
                        couponTypeEntity.ParValue       = para.ParValue;
                        couponTypeEntity.IsVoucher      = 0;
                        couponTypeEntity.UsableRange    = para.UsableRange;
                        if (para.BeginTime != DateTime.MinValue)
                        {
                            couponTypeEntity.BeginTime = para.BeginTime;
                        }
                        if (para.EndTime != DateTime.MinValue)
                        {
                            para.EndTime             = para.EndTime.AddHours(23).AddMinutes(59).AddSeconds(59);
                            couponTypeEntity.EndTime = para.EndTime;
                        }
                        couponTypeEntity.ServiceLife      = para.ServiceLife;
                        couponTypeEntity.ConditionValue   = para.ConditionValue;
                        couponTypeEntity.SuitableForStore = para.SuitableForStore;
                        couponTypeEntity.CustomerId       = loggingSessionInfo.ClientID;

                        couponTypeEntity.IsNotLimitQty = para.IsNotLimitQty;
                        if (para.IsNotLimitQty != null && para.IsNotLimitQty == 1)
                        {
                            couponTypeEntity.IssuedQty = 1000;
                        }
                        else
                        {
                            couponTypeEntity.IssuedQty = para.IssuedQty;
                        }

                        couponTypeEntity.IsRepeatable = 0;
                        couponTypeEntity.IsMixable    = 0;
                        couponTypeEntity.ValidPeriod  = 0;

                        couponTypeEntity.CouponTypeID = couponTypeBLL.CreateReturnID(couponTypeEntity, pTran);

                        redisCouponBLL.RedisSetSingleCoupon(new CC_Coupon()
                        {
                            CustomerId     = couponTypeEntity.CustomerId,
                            CouponTypeId   = couponTypeEntity.CouponTypeID.ToString(),
                            CouponTypeDesc = couponTypeEntity.CouponTypeDesc,
                            CouponTypeName = couponTypeEntity.CouponTypeName,
                            BeginTime      = couponTypeEntity.BeginTime.ToString(),
                            EndTime        = couponTypeEntity.EndTime.ToString(),
                            ServiceLife    = couponTypeEntity.ServiceLife ?? 0,
                            CouponLenth    = couponTypeEntity.IssuedQty ?? 0,
                            CouponCategory = couponTypeEntity.CouponCategory
                        });
                        //保存适用门店
                        if (para.SuitableForStore == 2)
                        {
                            CouponTypeUnitMappingEntity mapping = null;
                            foreach (var obj in para.ObjectIDList)
                            {
                                mapping = new CouponTypeUnitMappingEntity()
                                {
                                    CouponTypeID = couponTypeEntity.CouponTypeID,
                                    ObjectID     = obj.ObjectID,
                                    CustomerID   = loggingSessionInfo.ClientID
                                };
                                couponTypeUnitMappingBLL.Create(mapping, pTran);
                            }
                        }
                        if (!string.IsNullOrEmpty(para.BindType) && para.BindTypeIdList != null)
                        {
                            foreach (var objId in para.BindTypeIdList)
                            {
                                entityCouponTypeItemMapping = new CouponTypeItemMappingEntity()
                                {
                                    CouponTypeID = couponTypeEntity.CouponTypeID,
                                    BindType     = para.BindType,
                                    ObjectId     = objId.ObjectID
                                };
                                bllCouponTypeItemMapping.Create(entityCouponTypeItemMapping);
                            }
                        }
                    }
                    else//追加优惠券
                    {
                        couponTypeEntity            = couponTypeBLL.GetByID(para.CouponTypeID);
                        couponTypeEntity.IssuedQty += para.IssuedQty;
                        couponTypeBLL.Update(couponTypeEntity);


                        redisCouponBLL.RedisSetSingleCoupon(new CC_Coupon()
                        {
                            CustomerId     = couponTypeEntity.CustomerId,
                            CouponTypeId   = couponTypeEntity.CouponTypeID.ToString(),
                            CouponTypeDesc = couponTypeEntity.CouponTypeDesc,
                            CouponTypeName = couponTypeEntity.CouponTypeName,
                            BeginTime      = couponTypeEntity.BeginTime.ToString(),
                            EndTime        = couponTypeEntity.EndTime.ToString(),
                            ServiceLife    = couponTypeEntity.ServiceLife ?? 0,
                            CouponLenth    = para.IssuedQty,
                            CouponCategory = couponTypeEntity.CouponCategory
                        });
                    }

                    pTran.Commit();//提交事物

                    //批量生成券
                    //if (couponTypeEntity != null)
                    //{
                    //    Hashtable htCouponInfo = new Hashtable();
                    //    htCouponInfo["CouponTypeID"] = couponTypeEntity.CouponTypeID;
                    //    htCouponInfo["CouponName"] = couponTypeEntity.CouponTypeName;
                    //    htCouponInfo["CouponDesc"] = couponTypeEntity.CouponTypeDesc;
                    //    if (couponTypeEntity.BeginTime != DateTime.MinValue)
                    //        htCouponInfo["BeginTime"] = couponTypeEntity.BeginTime;
                    //    else
                    //        htCouponInfo["BeginTime"] = null;
                    //    if (couponTypeEntity.EndTime != DateTime.MinValue)
                    //        htCouponInfo["EndTime"] = couponTypeEntity.EndTime;
                    //    else
                    //        htCouponInfo["EndTime"] = null;
                    //    htCouponInfo["IssuedQty"] = para.IssuedQty;
                    //    couponBLL.GenerateCoupon(htCouponInfo);
                    //}
                }
                catch (Exception ex)
                {
                    pTran.Rollback();
                    throw new APIException(ex.Message);
                }
            }
            return(rd);
        }