mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:43:26 +08:00
# 2022-02-11
### 1.3.5 开源社区版(会员专业版同步修改): 无 ### 0.1.6 会员专业版: 【新增】后台【平台设置-订单管理】增加【佣金计算通道】功能,分为【仅代理】【仅分销】【先代理后分销】【先分销后代理】四种自选模式。 【新增】增加【CoreCmsAgentOrderDetails】表,实现代理佣金订单详情列表功能,精确到具体商品明细。 【新增】增加【CoreCmsDistributionOrderDetails】表,实现三级佣金订单详情列表功能,精确到具体商品明细。 【修复】修复代理商商铺开启按钮错用三级分销商店铺开关功能,增加代理商商铺开启开关。 【修复】修复代理商佣金明细日期选择范围错乱问题。 【优化】uniapp自带progress进度条更换为uview2.x进度条。 【优化】敏感词过滤组件启用废弃的【WordsMatch】方法,启用【StringSearch】方法替代。
This commit is contained in:
117
CoreCms.Net.Services/Agent/CoreCmsAgentOrderDetailsServices.cs
Normal file
117
CoreCms.Net.Services/Agent/CoreCmsAgentOrderDetailsServices.cs
Normal 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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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 作废订单
|
||||
|
||||
Reference in New Issue
Block a user