using System;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IServices;
using CoreCms.Net.IServices.baifenbingfa;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Essensoft.Paylink.WeChatPay.V2;
using Essensoft.Paylink.WeChatPay.V2.Notify;
using InitQ.Abstractions;
using InitQ.Attributes;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace CoreCms.Net.RedisMQ
{
///
/// 订单完结后走代理或经销商提成处理
///
public class OrderAgentOrDistributionSubscribe : IRedisSubscribe
{
private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
private readonly ICoreCmsDistributionOrderServices _distributionOrderServices;
private readonly ICoreCmsDistributionServices _distributionServices;
private readonly ICoreCmsSettingServices _settingServices;
private readonly ICoreCmsUserServices _userServices;
private readonly ICoreCmsAgentOrderServices _agentOrderServices;
private readonly IBfbfComAPIService _bfbfComAPIService;
public OrderAgentOrDistributionSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionOrderServices distributionOrderServices, ICoreCmsDistributionServices distributionServices, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsAgentOrderServices agentOrderServices ,IBfbfComAPIService bfbfComAPIService)
{
_billPaymentsServices = billPaymentsServices;
_distributionOrderServices = distributionOrderServices;
_distributionServices = distributionServices;
_settingServices = settingServices;
_userServices = userServices;
_agentOrderServices = agentOrderServices;
_bfbfComAPIService= bfbfComAPIService;
}
///
/// 订单完结后走代理或经销商提成处理
///
///
///
[Subscribe(RedisMessageQueueKey.OrderAgentOrDistribution)]
private async Task OrderAgentOrDistribution(string msg)
{
try
{
var order = JsonConvert.DeserializeObject(msg);
if (order != null)
{
var allConfigs = await _settingServices.GetConfigDictionaries();
//是否开启三级分销(1开启,2未开启)
var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution).ObjectToInt(0);
//是否开启代理模块(1开启,2未开启)
var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent).ObjectToInt(0);
//佣金分配模式
var commissionChannel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionChannel).ObjectToInt(1);
switch (commissionChannel)
{
case (int)GlobalEnumVars.CommissionChannel.仅代理 when isOpenAgent == 1:
{
var jm = await _agentOrderServices.AddData(order);
jm.status = true;
jm.msg = "分销成功";
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-仅代理", JsonConvert.SerializeObject(jm));
return;
}
case (int)GlobalEnumVars.CommissionChannel.仅分销 when openDistribution == 1:
{
var jm = await _distributionOrderServices.AddData(order); //添加分享关联订单日志
//判断是否可以成为经销商
//先判断是否已经是经销商了。
//百分兵法同意判决经销商
bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId);
//bool check = await _bfbfComAPIService.IsDictionary( order.userId);
var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0);
if (distributionType == 3) //无需审核,但是要满足提交
{
var info = new CoreCmsDistribution();
//判断是否经销商
if (check == false)
{
await _distributionServices.CheckCondition(allConfigs, info, order.userId);
if (info.ConditionStatus && info.ConditionProgress == 100)
{
//添加用户
var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId);
var iData = new CoreCmsDistribution();
iData.userId = order.userId;
iData.mobile = user.mobile;
iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile;
iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes;
iData.verifyTime = DateTime.Now;
await _distributionServices.AddData(iData, order.userId);
}
}
}
//已经是经销商的判断是否可以升级
if (check)
{
await _distributionServices.CheckUpdate(order.userId);
}
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-仅分销", JsonConvert.SerializeObject(jm));
return;
}
case (int)GlobalEnumVars.CommissionChannel.先代理后分销 when openDistribution == 1 && isOpenAgent == 1:
{
var jm = await _agentOrderServices.AddData(order);
//判断是走代理还是走分销
if (jm.status)
{
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先代理后分销", JsonConvert.SerializeObject(jm));
return;
}
await _distributionOrderServices.AddData(order); //添加分享关联订单日志
//判断是否可以成为经销商
//先判断是否已经是经销商了。
bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId);
var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0);
if (distributionType == 3) //无需审核,但是要满足提交
{
var info = new CoreCmsDistribution();
//判断是否经销商
if (check == false)
{
await _distributionServices.CheckCondition(allConfigs, info, order.userId);
if (info.ConditionStatus && info.ConditionProgress == 100)
{
//添加用户
var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId);
var iData = new CoreCmsDistribution();
iData.userId = order.userId;
iData.mobile = user.mobile;
iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile;
iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes;
iData.verifyTime = DateTime.Now;
await _distributionServices.AddData(iData, order.userId);
}
}
}
//已经是经销商的判断是否可以升级
if (check)
{
await _distributionServices.CheckUpdate(order.userId);
}
jm.status = true;
jm.msg = "分销成功";
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先代理后分销", JsonConvert.SerializeObject(jm));
return;
}
case (int)GlobalEnumVars.CommissionChannel.先分销后代理 when openDistribution == 1 && isOpenAgent == 1:
{
var jm = await _distributionOrderServices.AddData(order);
if (jm.status)
{
bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId);
var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0);
if (distributionType == 3) //无需审核,但是要满足提交
{
var info = new CoreCmsDistribution();
//判断是否经销商
if (check == false)
{
await _distributionServices.CheckCondition(allConfigs, info, order.userId);
if (info.ConditionStatus && info.ConditionProgress == 100)
{
//添加用户
var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId);
var iData = new CoreCmsDistribution();
iData.userId = order.userId;
iData.mobile = user.mobile;
iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile;
iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes;
iData.verifyTime = DateTime.Now;
await _distributionServices.AddData(iData, order.userId);
}
}
}
//已经是经销商的判断是否可以升级
if (check)
{
await _distributionServices.CheckUpdate(order.userId);
}
jm.status = true;
jm.msg = "分销成功";
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先分销后代理", JsonConvert.SerializeObject(jm));
return;
}
else
{
jm = await _agentOrderServices.AddData(order);
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先分销后代理", JsonConvert.SerializeObject(jm));
return;
}
}
}
}
else
{
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结结佣", "订单获取失败");
}
}
catch (Exception ex)
{
NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单完结结佣", msg, ex);
throw;
}
await Task.CompletedTask;
}
}
}