/// <summary> /// 入充值订单队列 /// </summary> /// <param name="loggingSessionInfo"></param> /// <param name="orderInfo"></param> public void SetRedisToRechargeOrder(LoggingSessionInfo loggingSessionInfo, RechargeOrderEntity orderInfo) { var response = RedisOpenAPI.Instance.CCRechargeOrder().SetRechargeOrder(new CC_Order { CustomerID = loggingSessionInfo.ClientID, OrderId = orderInfo.OrderID.ToString(), OrderInfo = orderInfo.JsonSerialize() }); if (response.Code == ResponseCode.Fail) { //直接计算 RechargeOrderBLL rechargeOrderBll = new RechargeOrderBLL(loggingSessionInfo); rechargeOrderBll.CalculateRechargeOrder(loggingSessionInfo, orderInfo); } }
protected override SetRechargeOrderRD ProcessRequest(APIRequest <SetRechargeOrderRP> pRequest) { SetRechargeOrderRP rp = pRequest.Parameters; SetRechargeOrderRD rd = new SetRechargeOrderRD(); var rechargeOrderBll = new RechargeOrderBLL(CurrentUserInfo); TUnitExpandBLL serviceUnitExpandBll = new TUnitExpandBLL(CurrentUserInfo); var vipBll = new VipBLL(CurrentUserInfo); var vipCardVipMappingBll = new VipCardVipMappingBLL(CurrentUserInfo); var vipCardBll = new VipCardBLL(CurrentUserInfo); var sysVipCardTypeBll = new SysVipCardTypeBLL(CurrentUserInfo); var vipCardUpgradeRuleBll = new VipCardUpgradeRuleBLL(CurrentUserInfo); //获取会员信息 VipEntity vipInfo; string userId = ""; //微信 if (pRequest.ChannelId == "2") { vipInfo = vipBll.GetByID(pRequest.UserID); UnitService unitServer = new UnitService(CurrentUserInfo); rp.UnitId = unitServer.GetUnitByUnitTypeForWX("OnlineShopping", null).Id; //获取在线商城的门店标识 } //掌柜App else { vipInfo = vipBll.GetByID(rp.VipId); userId = pRequest.UserID; } string OrderDesc = "ReRecharge"; //"升级","充值" int? VipCardTypeId = null; //会员卡类型 decimal returnAmount = 0; //赠送金额 //会员卡类型条件 List <IWhereCondition> complexConditionOne = new List <IWhereCondition> { }; //获取会员与会员卡关系表 var vipCardVipMappingEntity = vipCardVipMappingBll.QueryByEntity(new VipCardVipMappingEntity() { CustomerID = CurrentUserInfo.ClientID, VIPID = vipInfo.VIPID }, null).FirstOrDefault(); //该会员有会员卡 if (vipCardVipMappingEntity != null) { //获取该会员会员卡信息 var vipCardEntity = vipCardBll.QueryByEntity(new VipCardEntity() { CustomerID = CurrentUserInfo.ClientID, VipCardID = vipCardVipMappingEntity.VipCardID }, null).FirstOrDefault(); //获取该会员卡类型 var sysVipCardTypeEntity = sysVipCardTypeBll.GetByID(vipCardEntity.VipCardTypeID); VipCardTypeId = vipCardEntity.VipCardTypeID; //获取会员卡的会员活动 var rechargeStrategyBLL = new RechargeStrategyBLL(CurrentUserInfo); var RechargeActivityDS = rechargeStrategyBLL.GetRechargeActivityList(CurrentUserInfo.ClientID, VipCardTypeId.ToString(), 3); var RechargeStrategy = new RechargeStrategyInfo(); if (RechargeActivityDS != null && RechargeActivityDS.Tables[0].Rows.Count > 0) { var RechargeStrategyList = DataTableToObject.ConvertToList <RechargeStrategyInfo>(RechargeActivityDS.Tables[0]); //获取与充值金额最接近的活动 RechargeStrategy = RechargeStrategyList.Where(n => n.RechargeAmount <= rp.ActuallyPaid).OrderByDescending(n => n.RechargeAmount).FirstOrDefault(); if (RechargeStrategy != null) { //梯度 if (RechargeStrategy.RuleType == "Step") { //赠送金额 = 会员活动梯度设置赠送金额 returnAmount = RechargeStrategy.GiftAmount; } //叠加 if (RechargeStrategy.RuleType == "Superposition") { //赠送金额与满赠条件金额比例 decimal discount = RechargeStrategy.GiftAmount / RechargeStrategy.RechargeAmount; //赠送金额 = 充值金额 * (设置赠送金额 / 设置满赠条件金额) returnAmount = rp.ActuallyPaid * RechargeStrategy.GiftAmount / RechargeStrategy.RechargeAmount; } } } //获取等级高的会员卡类型条件 complexConditionOne.Add(new MoreThanCondition() { FieldName = "VipCardLevel", Value = sysVipCardTypeEntity.VipCardLevel, IncludeEquals = false }); complexConditionOne.Add(new EqualsCondition() { FieldName = "CustomerID", Value = CurrentUserInfo.ClientID }); } //该会员没有会员卡 else { //获取所有的会员卡类型条件 complexConditionOne.Add(new EqualsCondition() { FieldName = "CustomerID", Value = CurrentUserInfo.ClientID }); } var sysVipCardTypeList = sysVipCardTypeBll.Query(complexConditionOne.ToArray(), null).ToList(); if (sysVipCardTypeList == null) { throw new APIException("没有建立会员体系") { ErrorCode = 200 }; } //获取会员卡类型升级规则 List <IWhereCondition> complexConditionTwo = new List <IWhereCondition> { }; complexConditionTwo.Add(new EqualsCondition() { FieldName = "CustomerID", Value = CurrentUserInfo.ClientID }); complexConditionTwo.Add(new EqualsCondition() { FieldName = "IsRecharge", Value = 1 }); var vipCardUpgradeRuleList = vipCardUpgradeRuleBll.Query(complexConditionTwo.ToArray(), null); //将升级卡规则和可升级的会员卡匹配 var vipCardTypeDetailList = vipCardUpgradeRuleList.Join(sysVipCardTypeList, n => n.VipCardTypeID, m => m.VipCardTypeID, (n, m) => new { n, m }).OrderByDescending(t => t.m.VipCardLevel).ToList(); //判断是否满充值条件 bool isUpgrade = false; for (int i = 0; i < vipCardTypeDetailList.Count; i++) { //实付金额 >= 可升级金额 if (vipCardTypeDetailList[i].n.OnceRechargeAmount <= rp.ActuallyPaid) { isUpgrade = true; VipCardTypeId = vipCardTypeDetailList[i].n.VipCardTypeID ?? 0; break; } } if (isUpgrade) { OrderDesc = "Upgrade"; //升级 } //充值订单 var rechargeOrderEntity = new RechargeOrderEntity() { OrderID = Guid.NewGuid(), OrderNo = serviceUnitExpandBll.GetUnitOrderNo(), OrderDesc = OrderDesc, VipID = vipInfo.VIPID, VipCardNo = vipInfo.VipCode, UnitId = rp.UnitId, UserId = userId, TotalAmount = rp.ActuallyPaid, ActuallyPaid = rp.ActuallyPaid, PosSourceName = rp.PosSourceName, ReturnAmount = returnAmount, PayerID = vipInfo.VIPID, Status = 0, CustomerID = CurrentUserInfo.ClientID, VipCardTypeId = VipCardTypeId }; rechargeOrderBll.Create(rechargeOrderEntity); rd.orderId = rechargeOrderEntity.OrderID.ToString(); //支付完成 if (rp.PayStatus == 1) { //获取门店信息 t_unitBLL unitBLL = new t_unitBLL(CurrentUserInfo); t_unitEntity unitInfo = null; if (!string.IsNullOrEmpty(rechargeOrderEntity.UnitId)) { unitInfo = unitBLL.GetByID(rechargeOrderEntity.UnitId); } //充值 rechargeOrderBll.Recharge(rechargeOrderEntity, vipInfo, unitInfo, ""); } return(rd); }
/// <summary> /// 计算充值分润 /// </summary> /// <param name="loggingSessionInfo"></param> /// <param name="rechargeOrderInfo"></param> public void CalculateRechargeOrder(LoggingSessionInfo loggingSessionInfo, RechargeOrderEntity rechargeOrderInfo) { VipCardProfitRuleBLL bllVipCardProfitRule = new VipCardProfitRuleBLL(loggingSessionInfo); VipCardProfitRuleEntity[] entityVipCardProfitRule = null; entityVipCardProfitRule = bllVipCardProfitRule.QueryByEntity(new VipCardProfitRuleEntity() { VipCardTypeID = rechargeOrderInfo.VipCardTypeId, IsDelete = 0 }, null); if (entityVipCardProfitRule != null) { var bllVipCardGradeChangeLog = new VipCardGradeChangeLogBLL(loggingSessionInfo); VipAmountBLL bllVipAmount = new VipAmountBLL(loggingSessionInfo); VipAmountDetailBLL bllVipAmountDetail = new VipAmountDetailBLL(loggingSessionInfo); VipAmountEntity entityVipAmount = new VipAmountEntity(); string connString = string.Empty; foreach (var ProfitRule in entityVipCardProfitRule) { decimal amount = 0; string strAmountSourceId = string.Empty; string strVipId = string.Empty; string strUserType = string.Empty; if (ProfitRule.IsApplyAllUnits == 0) { VipCardProfitRuleUnitMappingBLL bllVipCardProfitRuleUnitMapping = new VipCardProfitRuleUnitMappingBLL(loggingSessionInfo); var vipCardProfitRuleUnitMapping = bllVipCardProfitRuleUnitMapping.QueryByEntity(new VipCardProfitRuleUnitMappingEntity() { CardBuyToProfitRuleId = ProfitRule.CardBuyToProfitRuleId, UnitID = rechargeOrderInfo.UnitId, IsDelete = 0, CustomerID = loggingSessionInfo.ClientID }, null).SingleOrDefault(); if (vipCardProfitRuleUnitMapping == null) { continue; } } if (ProfitRule.ProfitOwner == "Employee") { strAmountSourceId = "38"; strVipId = rechargeOrderInfo.UserId; strUserType = "User"; } if (ProfitRule.ProfitOwner == "Unit") { strAmountSourceId = "42"; strVipId = rechargeOrderInfo.UnitId; strUserType = "Unit"; } var entityVipCardGradeChangeLog = bllVipCardGradeChangeLog.QueryByEntity(new VipCardGradeChangeLogEntity() { OrderId = rechargeOrderInfo.OrderID.ToString() }, null).SingleOrDefault(); if (entityVipCardGradeChangeLog != null)//首充 { amount = (decimal)ProfitRule.FirstRechargeProfitPct * (decimal)rechargeOrderInfo.ActuallyPaid * (decimal)0.01; } else//续充 { VipCardReRechargeProfitRuleBLL bllVipCardReRechargeProfitRule = new VipCardReRechargeProfitRuleBLL(loggingSessionInfo); var entityVipCardReRechargeProfitRule = bllVipCardReRechargeProfitRule.QueryByEntity(new VipCardReRechargeProfitRuleEntity() { VipCardTypeID = rechargeOrderInfo.VipCardTypeId, IsDelete = 0 }, null); if (entityVipCardReRechargeProfitRule != null) { decimal discount = 0; foreach (var ReRechargeProfitRule in entityVipCardReRechargeProfitRule) { if (ReRechargeProfitRule.ProfitType == "Superposition") { discount = ((decimal)rechargeOrderInfo.ActuallyPaid / (decimal)ReRechargeProfitRule.LimitAmount) * (decimal)ReRechargeProfitRule.ProfitPct * (decimal)0.01; } if (ReRechargeProfitRule.ProfitType == "Step") { if (rechargeOrderInfo.ActuallyPaid >= ReRechargeProfitRule.LimitAmount) { discount = (decimal)ReRechargeProfitRule.ProfitPct; } } } amount = (decimal)rechargeOrderInfo.ActuallyPaid * discount; } } //入库 if (amount > 0) { IDbTransaction tran = new DataAccess.Base.TransactionHelper(loggingSessionInfo).CreateTransaction(); VipAmountDetailEntity entityVipAmountDetail = new VipAmountDetailEntity { VipAmountDetailId = Guid.NewGuid(), VipId = strVipId, Amount = amount, UsedReturnAmount = 0, EffectiveDate = DateTime.Now, DeadlineDate = Convert.ToDateTime("9999-12-31 23:59:59"), AmountSourceId = strAmountSourceId, ObjectId = rechargeOrderInfo.OrderID.ToString(), CustomerID = loggingSessionInfo.ClientID, Reason = "超级分销商" }; bllVipAmountDetail.Create(entityVipAmountDetail, (SqlTransaction)tran); T_SplitProfitRecordBLL bllSplitProfitRecord = new T_SplitProfitRecordBLL(loggingSessionInfo); T_SplitProfitRecordEntity entitySplitProfitRecord = new T_SplitProfitRecordEntity() { ID = Guid.NewGuid().ToString(), SourceType = "Amount", SourceId = strAmountSourceId, ObjectId = rechargeOrderInfo.OrderID.ToString(), UserType = strUserType, UserId = rechargeOrderInfo.UserId, SplitAmount = amount, SplitSattus = "10", CustomerID = loggingSessionInfo.ClientID, IsDelete = 0 }; bllSplitProfitRecord.Create(entitySplitProfitRecord); entityVipAmount = bllVipAmount.QueryByEntity(new VipAmountEntity() { VipId = strVipId, IsDelete = 0, CustomerID = loggingSessionInfo.ClientID }, null).SingleOrDefault(); if (entityVipAmount == null) { entityVipAmount = new VipAmountEntity { VipId = strVipId, BeginAmount = 0, InAmount = amount, OutAmount = 0, EndAmount = amount, TotalAmount = amount, BeginReturnAmount = 0, InReturnAmount = 0, OutReturnAmount = 0, ReturnAmount = 0, ImminentInvalidRAmount = 0, InvalidReturnAmount = 0, ValidReturnAmount = 0, TotalReturnAmount = 0, IsLocking = 0, CustomerID = loggingSessionInfo.ClientID, VipCardCode = "" }; bllVipAmount.Create(entityVipAmount, tran); } else { entityVipAmount.InReturnAmount = (entityVipAmount.InReturnAmount == null ? 0 : entityVipAmount.InReturnAmount.Value) + amount; entityVipAmount.TotalReturnAmount = (entityVipAmount.TotalReturnAmount == null ? 0 : entityVipAmount.TotalReturnAmount.Value) + amount; entityVipAmount.ValidReturnAmount = (entityVipAmount.ValidReturnAmount == null ? 0 : entityVipAmount.ValidReturnAmount.Value) + amount; entityVipAmount.ReturnAmount = (entityVipAmount.ReturnAmount == null ? 0 : entityVipAmount.ReturnAmount.Value) + amount; bllVipAmount.Update(entityVipAmount); } } } } }
/// <summary> /// 创建对象,返回ID /// </summary> /// <param name="pEntity">实体实例</param> /// <param name="pTran">事务实例,可为null,如果为null,则不使用事务来更新</param> public Guid CreateReturnID(RechargeOrderEntity pEntity, IDbTransaction pTran) { return(_currentDAO.CreateReturnID(pEntity, pTran)); }
/// <summary> /// 充值 /// </summary> /// <param name="rechargeOrderInfo"></param> /// <param name="vipInfo"></param> /// <param name="unitInfo"></param> /// <param name="paymentTypeId"></param> public void Recharge(RechargeOrderEntity rechargeOrderInfo, VipEntity vipInfo, t_unitEntity unitInfo, string paymentTypeId) { var rechargeOrderBll = new RechargeOrderBLL(CurrentUserInfo); //会员 var vipCardVipMappingBll = new VipCardVipMappingBLL(CurrentUserInfo); var vipAmountBll = new VipAmountBLL(CurrentUserInfo); //门店 var unitBLL = new t_unitBLL(CurrentUserInfo); rechargeOrderInfo.Status = 1;//已支付 rechargeOrderInfo.PayID = paymentTypeId; rechargeOrderInfo.PayDateTime = DateTime.Now; rechargeOrderBll.Update(rechargeOrderInfo); //获取会员卡绑卡信息 var vipCardVipMappingList = vipCardVipMappingBll.QueryByEntity(new VipCardVipMappingEntity() { VIPID = vipInfo.VIPID }, null); //会员无卡并且是续费充值的 if (vipCardVipMappingList.Count() == 0 && rechargeOrderInfo.OrderDesc == "ReRecharge") { vipCardVipMappingBll.BindVipCard(vipInfo.VIPID, vipInfo.VipCardCode, rechargeOrderInfo.UnitId); } var vipAmountEntity = vipAmountBll.QueryByEntity(new VipAmountEntity() { VipId = vipInfo.VIPID, VipCardCode = vipInfo.VipCode }, null).FirstOrDefault(); //充值 var amountDetailInfo = new VipAmountDetailEntity() { Amount = rechargeOrderInfo.TotalAmount.Value, AmountSourceId = "4", ObjectId = rechargeOrderInfo.OrderID.ToString() }; var vipAmountDetailId = vipAmountBll.AddVipAmount(vipInfo, unitInfo, ref vipAmountEntity, amountDetailInfo, null, CurrentUserInfo); if (!string.IsNullOrWhiteSpace(vipAmountDetailId) && rechargeOrderInfo.TotalAmount.Value != 0) { //发送账户余额变动微信模板消息 var CommonBLL = new CommonBLL(); CommonBLL.BalanceChangedMessage(rechargeOrderInfo.OrderNo, vipAmountEntity, amountDetailInfo, vipInfo.WeiXinUserId, vipInfo.VIPID, CurrentUserInfo); } //赠送 if (rechargeOrderInfo.ReturnAmount.Value != 0) { var returnAmountInfo = new VipAmountDetailEntity() { Amount = rechargeOrderInfo.ReturnAmount.Value, AmountSourceId = "6", ObjectId = rechargeOrderInfo.OrderID.ToString() }; var vipReturnDetailId = vipAmountBll.AddVipAmount(vipInfo, unitInfo, ref vipAmountEntity, returnAmountInfo, null, CurrentUserInfo); if (!string.IsNullOrWhiteSpace(vipReturnDetailId) && rechargeOrderInfo.ReturnAmount.Value != 0) { //发送账户余额变动微信模板消息 var CommonBLL = new CommonBLL(); CommonBLL.BalanceChangedMessage(rechargeOrderInfo.OrderNo, vipAmountEntity, returnAmountInfo, vipInfo.WeiXinUserId, vipInfo.VIPID, CurrentUserInfo); } } if (rechargeOrderInfo.OrderDesc == "Upgrade") { //会员卡升级 vipCardVipMappingBll.BindVirtualItem(vipInfo.VIPID, vipInfo.VipCode, rechargeOrderInfo.UnitId, rechargeOrderInfo.VipCardTypeId ?? 0, "Recharge", orderId: rechargeOrderInfo.OrderID.ToString()); } //充值分润 RedisRechargeOrderBLL redisRechargeOrderBll = new RedisRechargeOrderBLL(); redisRechargeOrderBll.SetRedisToRechargeOrder(CurrentUserInfo, rechargeOrderInfo); }
/// <summary> /// 更新 /// </summary> /// <param name="pEntity">实体实例</param> /// <param name="pTran">事务实例,可为null,如果为null,则不使用事务来更新</param> public void Update(RechargeOrderEntity pEntity, IDbTransaction pTran) { _currentDAO.Update(pEntity, pTran); }
/// <summary> /// 创建一个新实例 /// </summary> /// <param name="pEntity">实体实例</param> public void Create(RechargeOrderEntity pEntity) { _currentDAO.Create(pEntity); }
/// <summary> /// 分页根据实体条件查询实体 /// </summary> /// <param name="pQueryEntity">以实体形式传入的参数</param> /// <param name="pOrderBys">排序组合</param> /// <returns>符合条件的实体集</returns> public PagedQueryResult <RechargeOrderEntity> PagedQueryByEntity(RechargeOrderEntity pQueryEntity, OrderBy[] pOrderBys, int pPageSize, int pCurrentPageIndex) { return(_currentDAO.PagedQueryByEntity(pQueryEntity, pOrderBys, pPageSize, pCurrentPageIndex)); }
/// <summary> /// 根据实体条件查询实体 /// </summary> /// <param name="pQueryEntity">以实体形式传入的参数</param> /// <param name="pOrderBys">排序组合</param> /// <returns>符合条件的实体集</returns> public RechargeOrderEntity[] QueryByEntity(RechargeOrderEntity pQueryEntity, OrderBy[] pOrderBys) { return(_currentDAO.QueryByEntity(pQueryEntity, pOrderBys)); }
/// <summary> /// 删除 /// </summary> /// <param name="pEntity"></param> public void Delete(RechargeOrderEntity pEntity) { _currentDAO.Delete(pEntity); }
/// <summary> /// 更新 /// </summary> /// <param name="pEntity">实体实例</param> public void Update(RechargeOrderEntity pEntity) { _currentDAO.Update(pEntity); }