# 2022-02-11

### 1.3.5 开源社区版(会员专业版同步修改):
无
### 0.1.6 会员专业版:
【新增】后台【平台设置-订单管理】增加【佣金计算通道】功能,分为【仅代理】【仅分销】【先代理后分销】【先分销后代理】四种自选模式。
【新增】增加【CoreCmsAgentOrderDetails】表,实现代理佣金订单详情列表功能,精确到具体商品明细。
【新增】增加【CoreCmsDistributionOrderDetails】表,实现三级佣金订单详情列表功能,精确到具体商品明细。
【修复】修复代理商商铺开启按钮错用三级分销商店铺开关功能,增加代理商商铺开启开关。
【修复】修复代理商佣金明细日期选择范围错乱问题。
【优化】uniapp自带progress进度条更换为uview2.x进度条。
【优化】敏感词过滤组件启用废弃的【WordsMatch】方法,启用【StringSearch】方法替代。
This commit is contained in:
JianWeie
2022-02-11 05:28:04 +08:00
parent 05df55d7ec
commit 8f64209d27
45 changed files with 16751 additions and 607 deletions

View File

@@ -0,0 +1,117 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/2/9 23:36:03
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 代理佣金明细 接口实现
/// </summary>
public class CoreCmsAgentOrderDetailsServices : BaseServices<CoreCmsAgentOrderDetails>, ICoreCmsAgentOrderDetailsServices
{
private readonly ICoreCmsAgentOrderDetailsRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsAgentOrderDetailsServices(IUnitOfWork unitOfWork, ICoreCmsAgentOrderDetailsRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsAgentOrderDetails entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsAgentOrderDetails entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAgentOrderDetails> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsAgentOrderDetails>> QueryPageAsync(Expression<Func<CoreCmsAgentOrderDetails, bool>> predicate,
Expression<Func<CoreCmsAgentOrderDetails, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
}
}

View File

@@ -41,6 +41,7 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsOrderItemServices _orderItemServices;
private readonly ICoreCmsOrderServices _orderServices;
private readonly ICoreCmsProductsServices _productsServices;
private readonly ICoreCmsAgentOrderDetailsServices _agentOrderDetailsServices;
private readonly IServiceProvider _serviceProvider;
@@ -55,7 +56,7 @@ namespace CoreCms.Net.Services
ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices,
ICoreCmsAgentProductsServices agentProductsServices, ICoreCmsSettingServices settingServices,
ICoreCmsAgentGoodsServices agentGoodsServices, IServiceProvider serviceProvider,
ICoreCmsOrderServices orderServices, ICoreCmsUserBalanceServices balanceServices)
ICoreCmsOrderServices orderServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsAgentOrderDetailsServices agentOrderDetailsServices)
{
_dal = dal;
BaseDal = dal;
@@ -70,6 +71,7 @@ namespace CoreCms.Net.Services
_serviceProvider = serviceProvider;
_orderServices = orderServices;
_balanceServices = balanceServices;
_agentOrderDetailsServices = agentOrderDetailsServices;
}
#region
@@ -120,7 +122,7 @@ namespace CoreCms.Net.Services
if (isAllowProcurementService == 1)
{
agentModel = await agentServices.QueryByClauseAsync(p =>
p.userId == order.userId && p.verifyStatus == (int) GlobalEnumVars.AgentVerifyStatus.VerifyYes);
p.userId == order.userId && p.verifyStatus == (int)GlobalEnumVars.AgentVerifyStatus.VerifyYes);
if (agentModel != null) user = await _userServices.QueryByClauseAsync(p => p.id == order.userId);
}
@@ -132,7 +134,7 @@ namespace CoreCms.Net.Services
{
agentModel = await agentServices.QueryByClauseAsync(p =>
p.userId == userChild.parentId &&
p.verifyStatus == (int) GlobalEnumVars.AgentVerifyStatus.VerifyYes);
p.verifyStatus == (int)GlobalEnumVars.AgentVerifyStatus.VerifyYes);
if (agentModel != null)
user = await _userServices.QueryByClauseAsync(p => p.id == userChild.parentId);
}
@@ -185,7 +187,7 @@ namespace CoreCms.Net.Services
var jm = new WebApiCallBack();
var order = await _orderServices.QueryByClauseAsync(p =>
p.orderId == orderId && p.status == (int) GlobalEnumVars.OrderStatus.Complete);
p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete);
if (order == null)
{
jm.msg = "订单查询失败";
@@ -194,14 +196,14 @@ namespace CoreCms.Net.Services
//更新
var list = await _dal.QueryListByClauseAsync(p =>
p.orderId == orderId && p.isSettlement == (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
p.orderId == orderId && p.isSettlement == (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
if (list != null && list.Any())
{
foreach (var item in list)
{
//钱挪到会员余额里面
var result = await _balanceServices.Change(item.userId,
(int) GlobalEnumVars.UserBalanceSourceTypes.Agent,
(int)GlobalEnumVars.UserBalanceSourceTypes.Agent,
item.amount, item.orderId);
if (!result.status)
{
@@ -211,11 +213,11 @@ namespace CoreCms.Net.Services
await _dal.UpdateAsync(
p => new CoreCmsAgentOrder
{
isSettlement = (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementYes,
isSettlement = (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementYes,
updateTime = DateTime.Now
},
p => p.orderId == orderId &&
p.isSettlement == (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
p.isSettlement == (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
}
return jm;
@@ -236,9 +238,9 @@ namespace CoreCms.Net.Services
var res = await _dal.UpdateAsync(
p => new CoreCmsAgentOrder
{isSettlement = (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementCancel},
{ isSettlement = (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementCancel },
p => p.orderId == orderId &&
p.isSettlement == (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
p.isSettlement == (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo);
if (res == false)
{
jm.msg = "该未结算的订单不存在";
@@ -274,26 +276,64 @@ namespace CoreCms.Net.Services
{
//直返本级
decimal amount = 0;
var agentOrderDetails = new List<CoreCmsAgentOrderDetails>();
foreach (var item in orderItems)
{
var orderDetails = new CoreCmsAgentOrderDetails();
orderDetails.agentOrderId = 0;
orderDetails.orderId = order.orderId;
orderDetails.orderId = order.orderId;
orderDetails.productPrice = item.price;
orderDetails.amount = 0;
orderDetails.goodId = item.goodsId;
orderDetails.name = item.name;
orderDetails.addon = item.addon;
orderDetails.productId = item.productId;
orderDetails.productNums = item.nums;
orderDetails.promotionAmount = item.promotionAmount;
orderDetails.imageUrl = item.imageUrl;
orderDetails.remark = "";
orderDetails.createTime = DateTime.Now;
//判断是否存在商品内
var good = goods.Find(p => p.id == item.goodsId);
if (good == null) continue;
if (good == null)
{
agentOrderDetails.Add(orderDetails);
continue;
};
//判断是否存在货品类
var product = products.Find(p => p.id == item.productId);
if (product == null) continue;
if (product == null)
{
agentOrderDetails.Add(orderDetails);
continue;
}
//判断代理商代理池是否包含此商品数据
var agentGood = agentGoods.Find(p => p.goodId == item.goodsId);
if (agentGood == null) continue;
if (agentGood == null)
{
agentOrderDetails.Add(orderDetails);
continue;
}
//判断代理商代理池是否包含此货品数据
var agentProduct = agentProducts.Find(p => p.productId == item.productId);
if (agentProduct == null) continue;
if (agentProduct == null)
{
agentOrderDetails.Add(orderDetails);
continue;
}
//获取实际当前单个商品应获得利润
var price = item.price - agentProduct.agentGradePrice;
//如果销售价减去代理商价格负了,就不计算了。
if (price < 0) continue;
if (price < 0)
{
agentOrderDetails.Add(orderDetails);
continue;
}
//如果利润减去优惠负了,就不计算了。
var mathMoney = Math.Round(price * item.nums - item.promotionAmount, 2);
@@ -301,6 +341,9 @@ namespace CoreCms.Net.Services
//单个商品利润*数量,再减去优惠金额
amount += mathMoney;
orderDetails.amount = mathMoney;
agentOrderDetails.Add(orderDetails);
}
if (amount > 0)
@@ -310,7 +353,7 @@ namespace CoreCms.Net.Services
iData.buyUserId = order.userId;
iData.orderId = order.orderId;
iData.amount = amount;
iData.isSettlement = (int) GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo; //默认未结算
iData.isSettlement = (int)GlobalEnumVars.AgentOrderSettlementStatus.SettlementNo; //默认未结算
iData.isDelete = false;
//判断是否返利过,有历史记录直接更新
var agentOrder = await _dal.QueryByClauseAsync(p => p.userId == user.id && p.orderId == order.orderId);
@@ -329,65 +372,18 @@ namespace CoreCms.Net.Services
{
iData.createTime = DateTime.Now;
iData.updateTime = DateTime.Now;
await _dal.InsertAsync(iData);
var id = await _dal.InsertAsync(iData);
if (id > 0 && agentOrderDetails.Any())
{
agentOrderDetails.ForEach(p =>
{
p.agentOrderId = id;
});
await _agentOrderDetailsServices.InsertAsync(agentOrderDetails);
}
}
}
}
#endregion
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsAgentOrder entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsAgentOrder entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAgentOrder> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
}
}

View File

@@ -74,7 +74,10 @@ namespace CoreCms.Net.Services
ManualDataCache.Instance.Set(ToolsVars.IllegalWordsCahceName, cache);
}
WordsMatch wordsSearch = new WordsMatch();
//WordsMatch wordsSearch = new WordsMatch();
//wordsSearch.SetKeywords(cache.Split('|', StringSplitOptions.RemoveEmptyEntries));
StringSearch wordsSearch = new StringSearch();
wordsSearch.SetKeywords(cache.Split('|', StringSplitOptions.RemoveEmptyEntries));
var t = wordsSearch.Replace(oldString, symbol);
@@ -104,7 +107,7 @@ namespace CoreCms.Net.Services
ManualDataCache.Instance.Set(ToolsVars.IllegalWordsCahceName, cache);
}
WordsMatch wordsSearch = new WordsMatch();
StringSearch wordsSearch = new StringSearch();
wordsSearch.SetKeywords(cache.Split('|', StringSplitOptions.RemoveEmptyEntries));
var bl = wordsSearch.ContainsAny(oldString);

View File

@@ -0,0 +1,116 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/2/10 0:39:11
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 分销佣金明细 接口实现
/// </summary>
public class CoreCmsDistributionOrderDetailsServices : BaseServices<CoreCmsDistributionOrderDetails>, ICoreCmsDistributionOrderDetailsServices
{
private readonly ICoreCmsDistributionOrderDetailsRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsDistributionOrderDetailsServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderDetailsRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsDistributionOrderDetails entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsDistributionOrderDetails entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsDistributionOrderDetails> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsDistributionOrderDetails>> QueryPageAsync(Expression<Func<CoreCmsDistributionOrderDetails, bool>> predicate,
Expression<Func<CoreCmsDistributionOrderDetails, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
}
}

View File

@@ -20,8 +20,9 @@ using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Model.ViewModels.DTO.Distribution;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
@@ -41,9 +42,11 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsProductsServices _productsServices;
private readonly ICoreCmsUserBalanceServices _balanceServices;
private readonly ICoreCmsGoodsServices _goodsServices;
private readonly ICoreCmsDistributionOrderDetailsServices _distributionOrderDetailsServices;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsDistributionOrderServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices)
public CoreCmsDistributionOrderServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices, ICoreCmsDistributionOrderDetailsServices distributionOrderDetailsServices)
{
this._dal = dal;
_distributionServices = distributionServices;
@@ -54,63 +57,11 @@ namespace CoreCms.Net.Services
_productsDistributionServices = productsDistributionServices;
_productsServices = productsServices;
_goodsServices = goodsServices;
_distributionOrderDetailsServices = distributionOrderDetailsServices;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsDistributionOrder entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsDistributionOrder entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsDistributionOrder> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region
/// <summary>
@@ -190,74 +141,103 @@ namespace CoreCms.Net.Services
var ommissionDto = commission.data as DistributionDto;
//直返本级
decimal amount = 0;
var distributionOrderDetails = new List<CoreCmsDistributionOrderDetails>();
foreach (var item in orderItems)
{
var orderDetails = new CoreCmsDistributionOrderDetails();
orderDetails.distributionOrderId = 0;
orderDetails.orderId = order.orderId;
orderDetails.orderId = order.orderId;
orderDetails.productPrice = item.price;
orderDetails.amount = 0;
orderDetails.goodId = item.goodsId;
orderDetails.name = item.name;
orderDetails.addon = item.addon;
orderDetails.productId = item.productId;
orderDetails.productNums = item.nums;
orderDetails.promotionAmount = item.promotionAmount;
orderDetails.imageUrl = item.imageUrl;
orderDetails.remark = "";
orderDetails.createTime = DateTime.Now;
var good = goods.Find(p => p.id == item.goodsId);
if (good == null) continue;
if (good == null)
{
distributionOrderDetails.Add(orderDetails);
continue;
}
var product = products.Find(p => p.id == item.productId);
if (product == null) continue;
if (product == null)
{
distributionOrderDetails.Add(orderDetails);
continue;
}
decimal mathMoney = 0;
if (good.productsDistributionType == (int)GlobalEnumVars.ProductsDistributionType.Global)
{
if (ommissionDto == null) continue;
if (ommissionDto == null)
{
distributionOrderDetails.Add(orderDetails);
continue;
}
//获取实际当前支付金额,减去优惠的金额
var itemAmount = item.amount - item.promotionAmount;
//如果去掉优惠需要负了就为0
if (itemAmount < 0) itemAmount = 0;
//一级分销
if (level == 1 && ommissionDto.commission_1 != null)
mathMoney = level switch
{
if (ommissionDto.commission_1.type == (int)GlobalEnumVars.DistributionCommissiontype.COMMISSION_TYPE_FIXED)
{
amount += ommissionDto.commission_1.discount;
}
else
{
amount += Math.Round(ommissionDto.commission_1.discount * itemAmount / 100, 2);
}
}
//二级分销
else if (level == 2 && ommissionDto.commission_2 != null)
{
if (ommissionDto.commission_2.type == (int)GlobalEnumVars.DistributionCommissiontype.COMMISSION_TYPE_FIXED)
{
amount += ommissionDto.commission_2.discount;
}
else
{
amount += Math.Round(ommissionDto.commission_2.discount * itemAmount / 100, 2);
}
}
//三级分销
else if (level == 3 && ommissionDto.commission_3 != null)
{
if (ommissionDto.commission_3.type == (int)GlobalEnumVars.DistributionCommissiontype.COMMISSION_TYPE_FIXED)
{
amount += ommissionDto.commission_3.discount;
}
else
{
amount += Math.Round(ommissionDto.commission_3.discount * itemAmount / 100, 2);
}
}
//一级分销
1 when ommissionDto.commission_1 != null => ommissionDto.commission_1.type ==
(int)GlobalEnumVars
.DistributionCommissiontype
.COMMISSION_TYPE_FIXED
? ommissionDto.commission_1.discount
: Math.Round(ommissionDto.commission_1.discount * itemAmount / 100, 2),
//二级分销
2 when ommissionDto.commission_2 != null => ommissionDto.commission_2.type ==
(int)GlobalEnumVars
.DistributionCommissiontype
.COMMISSION_TYPE_FIXED
? ommissionDto.commission_2.discount
: Math.Round(ommissionDto.commission_2.discount * itemAmount / 100, 2),
//三级分销
3 when ommissionDto.commission_3 != null => ommissionDto.commission_3.type ==
(int)GlobalEnumVars
.DistributionCommissiontype
.COMMISSION_TYPE_FIXED
? ommissionDto.commission_3.discount
: Math.Round(ommissionDto.commission_3.discount * itemAmount / 100, 2),
_ => mathMoney
};
}
else if (good.productsDistributionType == (int)GlobalEnumVars.ProductsDistributionType.Detail)
{
var productsDistribution = productsDistributions.Find(p => p.productsId == item.productId);
if (productsDistribution == null) continue;
if (productsDistribution == null)
{
continue;
}
if (level == 1 && productsDistribution.levelOne > 0)
mathMoney = level switch
{
amount += Math.Round(productsDistribution.levelOne * item.nums, 2);
}
else if (level == 2 && productsDistribution.levelTwo > 0)
{
amount += Math.Round(productsDistribution.levelTwo * item.nums, 2);
}
else if (level == 3 && productsDistribution.levelThree > 0)
{
amount += Math.Round(productsDistribution.levelThree * item.nums, 2);
}
1 when productsDistribution.levelOne > 0 => Math.Round(
productsDistribution.levelOne * item.nums, 2),
2 when productsDistribution.levelTwo > 0 => Math.Round(
productsDistribution.levelTwo * item.nums, 2),
3 when productsDistribution.levelThree > 0 => Math.Round(
productsDistribution.levelThree * item.nums, 2),
_ => mathMoney
};
}
amount += mathMoney;
orderDetails.amount = mathMoney;
distributionOrderDetails.Add(orderDetails);
}
if (amount > 0)
@@ -288,7 +268,16 @@ namespace CoreCms.Net.Services
{
iData.createTime = DateTime.Now;
iData.updateTime = DateTime.Now;
await _dal.InsertAsync(iData);
var id = await _dal.InsertAsync(iData);
if (id > 0 && distributionOrderDetails.Any())
{
distributionOrderDetails.ForEach(p =>
{
p.distributionOrderId = id;
});
await _distributionOrderDetailsServices.InsertAsync(distributionOrderDetails);
}
}
}
@@ -324,16 +313,25 @@ namespace CoreCms.Net.Services
var list = await _dal.QueryListByClauseAsync(p => p.orderId == orderId && p.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo);
if (list != null && list.Any())
{
foreach (var item in list)
//foreach (var item in list)
//{
// //钱挪到会员余额里面
// var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution,
// item.amount, item.orderId);
// if (!result.status)
// {
// }
//}
await foreach (var result in ChangeForEach(list))
{
//钱挪到会员余额里面
var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution,
item.amount, item.orderId);
if (!result.status)
{
//日常日志处理。
}
}
};
await _dal.UpdateAsync(p => new CoreCmsDistributionOrder()
{
isSettlement = (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes,
@@ -343,6 +341,21 @@ namespace CoreCms.Net.Services
return jm;
}
//使用迭代器
private async IAsyncEnumerable<WebApiCallBack> ChangeForEach(List<CoreCmsDistributionOrder> list)
{
foreach (var item in list)
{
//钱挪到会员余额里面
var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution,
item.amount, item.orderId);
yield return result;
}
}
#endregion
#region