# 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:
JianWeie
2022-02-24 02:16:41 +08:00
parent 289c3fc5a1
commit 53b16cfeab
31 changed files with 605 additions and 207 deletions

View File

@@ -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;

View File

@@ -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);