# 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
}
}