/// <summary> /// </summary> /// <param name="shareAamount"></param> /// <param name="triggerUser"></param> /// <param name="shareUser"></param> /// <param name="config"></param> /// <param name="parameter"></param> /// <param name="shareLevel"></param> public static List <FenRunResultParameter> ResultParameters(decimal shareAamount, User triggerUser, User shareUser, ShareBaseConfig config, TaskParameter parameter, long shareLevel = 0) { //如果分润金额小于等于0,则退出 if (shareAamount <= 0) { return(null); } //判断用户是否满足type与grade要求,不满足则跳过当前用户 var moneyTypes = Ioc.Resolve <IAutoConfigService>().GetList <MoneyTypeConfig>(r => r.Status == Status.Normal); var ParameterList = new List <FenRunResultParameter>(); foreach (var rule in config.RuleItems) { var shareAmount = shareAamount * rule.Ratio; var ruleMoneyType = moneyTypes.FirstOrDefault(r => r.Id == rule.MoneyTypeId); var Parameter = Create(shareAmount, triggerUser, shareUser, ruleMoneyType, config, parameter, shareLevel); ParameterList.Add(Parameter); } return(ParameterList); }
/// <summary> /// 创建分润参数 /// </summary> /// <param name="shareAamount"></param> /// <param name="triggerUser">触发用户</param> /// <param name="shareUser"></param> /// <param name="moneyType">分润金额到账账户类型</param> /// <param name="config">分润维度配置数据</param> /// <param name="parameter">分润触发通用参数</param> /// <param name="shareLevel"></param> public static FenRunResultParameter Create(decimal shareAamount, User triggerUser, User shareUser, MoneyTypeConfig moneyType, ShareBaseConfig config, TaskParameter parameter, long shareLevel = 0) { parameter.TryGetValue("OrderId", out long orderId); parameter.TryGetValue("OrderSerial", out string orderSerial); var Order = new InvoiceOrder { Id = orderId, Serial = orderSerial, Amount = shareAamount }; //替换分润描述 var summary = config.TemplateRule.LoggerTemplate.Replace("{OrderUserName}", triggerUser.UserName) .Replace("{ShareUserNickName}", triggerUser.Name).Replace("{ShareUserRealName}", triggerUser.Name) .Replace("{GainerUserName}", shareUser.UserName).Replace("{GainerNickName}", shareUser.Name) .Replace("{GainerRealName}", shareUser.Name) .Replace("{OrderSerial}", orderSerial).Replace("{AccountName}", moneyType.Name) .Replace("{ShareUserAmount}", triggerUser.ToString()) .Replace("{DividendAmount}", shareAamount.ToString()); return(new FenRunResultParameter { Amount = shareAamount, ModuleName = "招商奖", //读取配置的的名称,未实现 //分润记录信息 ShareStatus = FenRunStatus.Success, ShareLevel = shareLevel, UserRemark = string.Empty, Summary = summary, ExtraDate = "额外数据", //模块信息 ModuleConfigId = config.Id, //BonusId = config.BonusId, ModuleTypeName = config.GetType().Name, TriggerType = config.TriggerType, //触发用户 TriggerGradeId = config.ShareUser.ShareUserGradeId, TriggerUserTypeId = config.ShareUser.ShareUserTypeId, TriggerUserId = triggerUser.Id, OrderUserName = triggerUser.GetUserName(), //获得分润的用户 ReceiveUserId = shareUser.Id, ReceiveUserName = shareUser.GetUserName(), //订单信息 Order = Order, //财务信息 MoneyTypeId = moneyType.Id, BillStatus = BillStatus.Success }); }
/// <summary> /// 生成订单 /// </summary> /// <param name="shareAmount">分润金额</param> /// <param name="orderUser">下单用户</param> /// <param name="shareUser">收益用户</param> /// <param name="parameter">参数</param> /// <param name="config">分润配置</param> /// <param name="resultList"></param> /// <param name="configName"></param> protected void CreateResultList(decimal shareAmount, User orderUser, User shareUser, TaskParameter parameter, ShareBaseConfig config, IList <ITaskResult> resultList, string configName = "") { //如果分润金额小于等于0,则退出 if (shareAmount > 0 && shareUser != null) { if (shareUser.Status == Alabo.Domains.Enums.Status.Normal) { parameter.TryGetValue("OrderId", out long orderId); // 如果限制供应商购买过的店铺 // 检查该会员是否购买过该店铺的商品,核对User_TypeUser表 if (Configuration.ProductRule.IsLimitStoreBuy) { //TODO 重构 //// 如果是订单用户 //if (TriggerType == TriggerType.Order) { // var order = Ioc.Resolve<IOrderService>().GetSingle(orderId); // if (order != null) { // var storeUser = Ioc.Resolve<ITypeUserService>() // .GetStoreUser(order.StoreId, shareUser.Id); // if (storeUser == null) { // //分润用户不是该店铺的用户 退出 // return; // // ExecuteResult<ITaskResult>.Cancel($"分润用户不是该店铺的用户"); // } // } //} } var moneyTypes = Resolve <IAutoConfigService>().GetList <MoneyTypeConfig>(r => r.Status == Alabo.Domains.Enums.Status.Normal); foreach (var rule in Configuration.RuleItems) { var ruleAmount = shareAmount * rule.Ratio; var ruleMoneyType = moneyTypes.FirstOrDefault(r => r.Id == rule.MoneyTypeId); if (ruleMoneyType == null) { continue; //ExecuteResult<ITaskResult>.Cancel($"资产分润规则设置错误,货币类型Id{ruleMoneyType.Id}"); } var shareResult = new ShareResult { OrderUser = orderUser, ShareUser = shareUser, ShareOrder = base.ShareOrder, Amount = ruleAmount, MoneyTypeId = rule.MoneyTypeId, ModuleConfigId = config.Id, ModuleId = config.ModuleId, SmsNotification = config.TemplateRule.SmsNotification }; //描述 shareResult.Intro = Configuration.TemplateRule.LoggerTemplate.Replace("{OrderUserName}", orderUser.GetUserName()) .Replace("{ShareUserName}", shareUser.GetUserName()) .Replace("{ConfigName}", configName) .Replace("{AccountName}", ruleMoneyType.Name) .Replace("{OrderId}", orderId.ToString()) .Replace("{OrderPrice}", base.ShareOrder.Amount.ToString("F2")) .Replace("{ShareAmount}", ruleAmount.ToString("F2")); //短信内容 shareResult.SmsIntro = Configuration.TemplateRule.LoggerTemplate.Replace("{OrderUserName}", orderUser.GetUserName()) .Replace("{ShareUserName}", shareUser.GetUserName()) .Replace("{ConfigName}", configName) .Replace("{AccountName}", ruleMoneyType.Name) .Replace("{OrderId}", orderId.ToString()) .Replace("{OrderPrice}", base.ShareOrder.Amount.ToString("F2")) .Replace("{ShareAmount}", ruleAmount.ToString("F2")); var queueResult = new TaskQueueResult <ITaskResult>(Context) { ShareResult = shareResult }; resultList.Add(queueResult); } } } }
protected void CreateResultList(decimal shareAmount, User shareUser, TaskParameter parameter, ShareBaseConfig config, IList <ITaskResult> resultList, string configName = "") { CreateResultList(shareAmount, base.ShareOrderUser, shareUser, parameter, config, resultList, configName = ""); }