mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:43:26 +08:00
# 2022-02-24
### 1.3.7 开源社区版: 无 ### 0.2.4 会员专业版: 【新增】数据库sku表【CoreCmsProducts】增加"积分可抵扣金额"【pointsDeduction】字段 【新增】商品sku新增最高抵扣金额功能,可通过积分进行价格抵扣,实现单品使用【积分+价格】的购买模式。与订单积分折扣并存。 【新增】积分新增积分模式功能,分为全局计算和单品计算,【全局计算】是指直接对订单按照使用比例进行计算,【单品计算】是指根据单个商品下sku独立设置的最高可抵扣金额进行计算。 【新增】积分新增显示积分组合兑换价功能,勾选显示,将在商品详情,购物车等界面显示积分加价格的效果。 【新增】积分新增显示名称功能,前端可改名积分显示名称为自定义,如:金豆,衡豆等。 【新增】商品列表页面、购物车界面、下单界面、商品详情界面新增积分新增是否显示组合价功能,如果勾选,将显示【1000积分+25元换购】的内容。 【优化】当添加视频后,默认采用商品封面图作为视频底图,防止视频大小差异出现黑边或预加载中黑屏的问题。 【优化】商品列表展示列表去除padding留白效果。 【优化】优化form表单redio和checkBox选项分行显示的问题。 【修复】修复拼团分享页面倒计时识别失败的问题,修复拼团分享页面分享按钮点击失败的问题。#I4QWDH #I4QWFC
This commit is contained in:
@@ -780,8 +780,8 @@ namespace CoreCms.Net.Services
|
||||
var jm = new WebApiCallBack() { status = true };
|
||||
if (point != 0)
|
||||
{
|
||||
var getUserPointDto = await _userServices.GetUserPoint(userId, 0);
|
||||
if (getUserPointDto.point < point)
|
||||
var user = await _userServices.QueryByClauseAsync(p => p.id == userId);
|
||||
if (user.point < point)
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "积分不足,无法使用积分";
|
||||
@@ -789,23 +789,45 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
//判断积分值多少钱
|
||||
//计算可用积分
|
||||
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
|
||||
var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToInt(10);//订单积分使用比例
|
||||
var maxPointDeductedMoney = Math.Round(cartDto.amount * ordersPointProportion / 100, 2); //最大积分抵扣的钱
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100); //积分兑换比例
|
||||
var pointDeductedMoney = point / pointDiscountedProportion; //积分可以抵扣的钱
|
||||
|
||||
if (maxPointDeductedMoney < pointDeductedMoney)
|
||||
var pointExchangeModel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointExchangeModel).ObjectToInt(); //判断是全局模式还是单品模式
|
||||
if (pointExchangeModel == 1)
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "积分超过订单可使用的积分数量";
|
||||
return jm;
|
||||
var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToInt(10);//订单积分使用比例
|
||||
var maxPointDeductedMoney = Math.Round(cartDto.amount * ordersPointProportion / 100, 2); //最大积分抵扣的钱
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100); //积分兑换比例
|
||||
var pointDeductedMoney = point / pointDiscountedProportion; //积分可以抵扣的钱
|
||||
|
||||
if (maxPointDeductedMoney < pointDeductedMoney)
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "积分超过订单可使用的积分数量";
|
||||
return jm;
|
||||
}
|
||||
cartDto.point = point;
|
||||
cartDto.pointExchangeMoney = pointDeductedMoney;
|
||||
cartDto.amount -= pointDeductedMoney;
|
||||
}
|
||||
else
|
||||
{
|
||||
//可抵扣金额
|
||||
decimal money = 0;
|
||||
|
||||
foreach (var item in cartDto.list)
|
||||
{
|
||||
money += item.nums * item.products.pointsDeduction;
|
||||
}
|
||||
//计算抵扣这么多金额需要多少积分。
|
||||
//订单积分折现比例(多少积分可以折现1块钱)
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
|
||||
//计算需要多少积分
|
||||
var needsPoint = money * pointDiscountedProportion;
|
||||
|
||||
cartDto.point = point;
|
||||
cartDto.pointExchangeMoney = Convert.ToInt32(money);
|
||||
cartDto.amount -= Convert.ToInt32(money);
|
||||
}
|
||||
cartDto.point = point;
|
||||
cartDto.pointExchangeMoney = pointDeductedMoney;
|
||||
cartDto.amount -= pointDeductedMoney;
|
||||
}
|
||||
jm.data = cartDto;
|
||||
return jm;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
@@ -22,12 +23,13 @@ using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.FromBody;
|
||||
using CoreCms.Net.Model.ViewModels.Basics;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using CoreCms.Net.Model.ViewModels.DTO;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using CoreCms.Net.Utility.Extensions;
|
||||
using CoreCms.Net.Utility.Helper;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
@@ -47,6 +49,8 @@ namespace CoreCms.Net.Services
|
||||
private readonly ICoreCmsUserGradeServices _userGradeServices;
|
||||
private readonly ICoreCmsUserLogServices _userLogServices;
|
||||
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
private readonly PermissionRequirement _permissionRequirement;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
@@ -56,7 +60,7 @@ namespace CoreCms.Net.Services
|
||||
, ICoreCmsUserRepository dal
|
||||
, ICoreCmsUserBalanceServices userBalanceServices
|
||||
, ICoreCmsSettingServices settingServices
|
||||
, ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices)
|
||||
, ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
@@ -70,6 +74,7 @@ namespace CoreCms.Net.Services
|
||||
_permissionRequirement = permissionRequirement;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
_userLogServices = userLogServices;
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
|
||||
@@ -160,9 +165,13 @@ namespace CoreCms.Net.Services
|
||||
/// </summary>
|
||||
/// <param name="userId">用户序列</param>
|
||||
/// <param name="orderMoney">订单金额</param>
|
||||
/// <param name="ids">货品序列</param>
|
||||
/// <param name="cartType">购物车类型</param>
|
||||
/// <returns></returns>
|
||||
public async Task<GetUserPointResult> GetUserPoint(int userId, decimal orderMoney)
|
||||
public async Task<GetUserPointResult> GetUserPoint(int userId, decimal orderMoney, int[] ids, int cartType)
|
||||
{
|
||||
|
||||
|
||||
GetUserPointResult dto = new GetUserPointResult();
|
||||
//1是2否
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
@@ -177,19 +186,67 @@ namespace CoreCms.Net.Services
|
||||
if (user != null)
|
||||
{
|
||||
dto.point = user.point;
|
||||
if (orderMoney != 0)
|
||||
|
||||
var pointExchangeModel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointExchangeModel).ObjectToInt(); //判断是全局模式还是单品模式
|
||||
if (pointExchangeModel == 1)
|
||||
{
|
||||
//计算可用积分
|
||||
var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToInt(10);//订单积分使用比例
|
||||
//最多可以抵扣的金额
|
||||
var maxPointDeductedMoney = Math.Round((orderMoney * ordersPointProportion) / 100, 2);
|
||||
//订单积分折现比例(多少积分可以折现1块钱)
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
|
||||
//计算需要多少积分
|
||||
var needsPoint = maxPointDeductedMoney * pointDiscountedProportion;
|
||||
//确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
|
||||
dto.availablePoint = Convert.ToInt32(needsPoint > user.point ? user.point : needsPoint);
|
||||
dto.pointExchangeMoney = dto.availablePoint / pointDiscountedProportion;
|
||||
if (orderMoney != 0)
|
||||
{
|
||||
//计算可用积分//订单积分使用比例
|
||||
var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToInt(10);
|
||||
//最多可以抵扣的金额
|
||||
var maxPointDeductedMoney = Math.Round((orderMoney * ordersPointProportion) / 100, 2);
|
||||
|
||||
//订单积分折现比例(多少积分可以折现1块钱)
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
|
||||
//计算需要多少积分
|
||||
var needsPoint = maxPointDeductedMoney * pointDiscountedProportion;
|
||||
//确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
|
||||
dto.availablePoint = Convert.ToInt32(needsPoint > user.point ? user.point : needsPoint);
|
||||
dto.pointExchangeMoney = dto.availablePoint / pointDiscountedProportion;
|
||||
}
|
||||
}
|
||||
else if (pointExchangeModel == 2)
|
||||
{
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
|
||||
var cartServices = container.ServiceProvider.GetService<ICoreCmsCartServices>();
|
||||
var productsServices = container.ServiceProvider.GetService<ICoreCmsProductsServices>();
|
||||
|
||||
//获取购物车数据
|
||||
var cartProducts = await cartServices.QueryListByClauseAsync(p => p.type == cartType && p.userId == userId && ids.Contains(p.id));
|
||||
if (cartProducts.Any())
|
||||
{
|
||||
//获取购物车货品序列
|
||||
var cartIds = cartProducts.Select(p => p.productId).ToList();
|
||||
//根据货品序列去找货品
|
||||
var products = await productsServices.QueryListByClauseAsync(p => cartIds.Contains(p.id));
|
||||
if (products.Any())
|
||||
{
|
||||
//可抵扣金额
|
||||
decimal money = 0;
|
||||
//迭代货品,获取到最高可优惠金额,进行累加
|
||||
foreach (var item in products)
|
||||
{
|
||||
var numObj = cartProducts.Find(p => p.productId == item.id);
|
||||
if (numObj != null)
|
||||
{
|
||||
money += numObj.nums * item.pointsDeduction;
|
||||
}
|
||||
}
|
||||
//计算抵扣这么多金额需要多少积分。
|
||||
//订单积分折现比例(多少积分可以折现1块钱)
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
|
||||
//计算需要多少积分
|
||||
var needsPoint = money * pointDiscountedProportion;
|
||||
|
||||
//确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
|
||||
dto.availablePoint = Convert.ToInt32(needsPoint > user.point ? 0 : needsPoint);
|
||||
|
||||
dto.pointExchangeMoney = Convert.ToInt32(user.point > needsPoint ? money : 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return dto;
|
||||
@@ -613,14 +670,13 @@ namespace CoreCms.Net.Services
|
||||
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
|
||||
identity.AddClaims(claims);
|
||||
jm.status = true;
|
||||
jm.msg = "注册成功";
|
||||
jm.msg = "成功";
|
||||
jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
|
||||
//录入登录日志
|
||||
var log = new CoreCmsUserLog();
|
||||
log.userId = userInfo.id;
|
||||
log.state = isReg ? (int)GlobalEnumVars.UserLogTypes.注册 : (int)GlobalEnumVars.UserLogTypes.登录;
|
||||
log.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ?
|
||||
_httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
|
||||
log.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
|
||||
log.createTime = DateTime.Now;
|
||||
log.parameters = isReg ? GlobalEnumVars.UserLogTypes.注册.ToString() : GlobalEnumVars.UserLogTypes.登录.ToString();
|
||||
await _userLogServices.InsertAsync(log);
|
||||
|
||||
Reference in New Issue
Block a user