【新增】新增新人注册可以自动识别并发放优惠券。

This commit is contained in:
jianweie code
2023-11-20 00:16:14 +08:00
parent d6c6d1f63b
commit 96ffffb664
8 changed files with 146 additions and 26 deletions

View File

@@ -898,6 +898,22 @@ namespace CoreCms.Net.Configuration
/// </summary> /// </summary>
public static readonly string ShowLiveBroadCast = "showLiveBroadCast"; public static readonly string ShowLiveBroadCast = "showLiveBroadCast";
/// <summary>
/// 是否开启赠送优惠券
/// </summary>
public static readonly string IsAllowGiveCoupon = "isAllowGiveCoupon";
/// <summary>
/// 选择注册赠送优惠券
/// </summary>
public static readonly string SelectGiveCoupon = "selectGiveCoupon";
/// <summary>
/// 赠送数量
/// </summary>
public static readonly string GiveCouponNumber = "giveCouponNumber";
} }

View File

@@ -45,6 +45,11 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.PrivacyPolicyId, new DictionaryKeyValues() { sKey = "隐私政策", sValue = "4" }); di.Add(SystemSettingConstVars.PrivacyPolicyId, new DictionaryKeyValues() { sKey = "隐私政策", sValue = "4" });
di.Add(SystemSettingConstVars.PrivacyPolicy, new DictionaryKeyValues() { sKey = "隐私政策", sValue = "" }); di.Add(SystemSettingConstVars.PrivacyPolicy, new DictionaryKeyValues() { sKey = "隐私政策", sValue = "" });
//开启赠送新人优惠券
di.Add(SystemSettingConstVars.IsAllowGiveCoupon, new DictionaryKeyValues() { sKey = "是否赠送新人优惠券", sValue = "2" });
di.Add(SystemSettingConstVars.SelectGiveCoupon, new DictionaryKeyValues() { sKey = "选择注册赠送优惠券", sValue = "0" });
di.Add(SystemSettingConstVars.GiveCouponNumber, new DictionaryKeyValues() { sKey = "赠送优惠券数量", sValue = "1" });
//开关功能 //开关功能
di.Add(SystemSettingConstVars.ShowStoreBalanceRechargeSwitch, new DictionaryKeyValues() { sKey = "显示充值功能", sValue = "2" }); di.Add(SystemSettingConstVars.ShowStoreBalanceRechargeSwitch, new DictionaryKeyValues() { sKey = "显示充值功能", sValue = "2" });
di.Add(SystemSettingConstVars.IsAllowWithdrawCash, new DictionaryKeyValues() { sKey = "是否允许提现", sValue = "2" }); di.Add(SystemSettingConstVars.IsAllowWithdrawCash, new DictionaryKeyValues() { sKey = "是否允许提现", sValue = "2" });

View File

@@ -60,8 +60,10 @@ namespace CoreCms.Net.IServices
/// <param name="userId"></param> /// <param name="userId"></param>
/// <param name="promotionId"></param> /// <param name="promotionId"></param>
/// <param name="promotion"></param> /// <param name="promotion"></param>
/// <param name="number"></param>
/// <param name="remark"></param>
/// <returns></returns> /// <returns></returns>
Task<WebApiCallBack> AddData(int userId, int promotionId, CoreCmsPromotion promotion); Task<WebApiCallBack> AddData(int userId, int promotionId, CoreCmsPromotion promotion, int number = 1, string remark = "接口领取");
/// <summary> /// <summary>
/// 通过优惠券号领取优惠券 /// 通过优惠券号领取优惠券

View File

@@ -108,8 +108,10 @@ namespace CoreCms.Net.Services
/// <param name="userId"></param> /// <param name="userId"></param>
/// <param name="promotionId"></param> /// <param name="promotionId"></param>
/// <param name="promotion"></param> /// <param name="promotion"></param>
/// <param name="number">数量</param>
/// <param name="remark">说明</param>
/// <returns></returns> /// <returns></returns>
public async Task<WebApiCallBack> AddData(int userId, int promotionId, CoreCmsPromotion promotion) public async Task<WebApiCallBack> AddData(int userId, int promotionId, CoreCmsPromotion promotion, int number = 1, string remark = "接口领取")
{ {
var jm = new WebApiCallBack(); var jm = new WebApiCallBack();
@@ -124,19 +126,43 @@ namespace CoreCms.Net.Services
{ {
eTime = eTime.AddHours(promotion.effectiveHours); eTime = eTime.AddHours(promotion.effectiveHours);
} }
var coupon = new CoreCmsCoupon
{
couponCode = GeneratePromotionCode()[0],
promotionId = promotion.id,
isUsed = false,
userId = userId,
createTime = dtTime,
startTime = dtTime,
endTime = eTime,
remark = "接口领取"
};
var bl = await _dal.InsertAsync(coupon) > 0; bool bl;
if (number > 1)
{
var list = new List<CoreCmsCoupon>();
for (var i = 0; i < number; i++)
{
list.Add(new CoreCmsCoupon
{
couponCode = GeneratePromotionCode()[0],
promotionId = promotion.id,
isUsed = false,
userId = userId,
createTime = dtTime,
startTime = dtTime,
endTime = eTime,
remark = remark
});
}
bl = await _dal.InsertAsync(list) > 0;
}
else
{
var coupon = new CoreCmsCoupon
{
couponCode = GeneratePromotionCode()[0],
promotionId = promotion.id,
isUsed = false,
userId = userId,
createTime = dtTime,
startTime = dtTime,
endTime = eTime,
remark = remark
};
bl = await _dal.InsertAsync(coupon) > 0;
}
jm.status = bl; jm.status = bl;
jm.msg = bl ? "领取成功" : "领取失败"; jm.msg = bl ? "领取成功" : "领取失败";

View File

@@ -32,6 +32,7 @@ using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using SqlSugar; using SqlSugar;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinUserInfoBatchGetRequest.Types;
namespace CoreCms.Net.Services; namespace CoreCms.Net.Services;
@@ -59,6 +60,10 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
private readonly ICoreCmsDistributionGradeRepository _distributionGradeRepository; private readonly ICoreCmsDistributionGradeRepository _distributionGradeRepository;
private readonly ICoreCmsDistributionRepository _distributionRepository; private readonly ICoreCmsDistributionRepository _distributionRepository;
private readonly ICoreCmsPromotionServices _coreCmsPromotionServices;
private readonly ICoreCmsCouponServices _coreCmsCouponServices;
public CoreCmsUserServices(IUnitOfWork unitOfWork public CoreCmsUserServices(IUnitOfWork unitOfWork
, ICoreCmsUserRepository dal , ICoreCmsUserRepository dal
, ICoreCmsUserBalanceServices userBalanceServices , ICoreCmsUserBalanceServices userBalanceServices
@@ -67,7 +72,7 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices,
PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor,
ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider,
ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionRepository distributionRepository) ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionRepository distributionRepository, ICoreCmsPromotionServices coreCmsPromotionServices, ICoreCmsCouponServices coreCmsCouponServices)
{ {
_dal = dal; _dal = dal;
BaseDal = dal; BaseDal = dal;
@@ -85,6 +90,8 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
_billPaymentsServices = billPaymentsServices; _billPaymentsServices = billPaymentsServices;
_distributionGradeRepository = distributionGradeRepository; _distributionGradeRepository = distributionGradeRepository;
_distributionRepository = distributionRepository; _distributionRepository = distributionRepository;
_coreCmsPromotionServices = coreCmsPromotionServices;
_coreCmsCouponServices = coreCmsCouponServices;
} }
@@ -627,6 +634,8 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
} }
} }
var allConfigs = await _settingServices.GetConfigDictionaries();
//如果没有头像和昵称,那么就取系统头像和昵称吧 //如果没有头像和昵称,那么就取系统头像和昵称吧
if (!string.IsNullOrEmpty(entity.avatar)) if (!string.IsNullOrEmpty(entity.avatar))
{ {
@@ -634,7 +643,6 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
} }
else else
{ {
var allConfigs = await _settingServices.GetConfigDictionaries();
var defaultImage = var defaultImage =
CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage); CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage);
userInfo.avatarImage = defaultImage; userInfo.avatarImage = defaultImage;
@@ -688,7 +696,6 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
if (userId > 0 && entity.invitecode > 0 && userInfo.parentId > 0) if (userId > 0 && entity.invitecode > 0 && userInfo.parentId > 0)
{ {
var allConfigs = await _settingServices.GetConfigDictionaries();
var inviterUserIntegral = CommonHelper var inviterUserIntegral = CommonHelper
.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral) .GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral)
.ObjectToInt(); //是否开启积分功能 .ObjectToInt(); //是否开启积分功能
@@ -719,6 +726,22 @@ public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServic
} }
userInfo = await _dal.QueryByIdAsync(userId); userInfo = await _dal.QueryByIdAsync(userId);
var isAllowGiveCoupon = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsAllowGiveCoupon).ObjectToInt(); //是否赠送新人优惠券
var selectGiveCoupon = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SelectGiveCoupon).ObjectToInt(); //选择注册赠送优惠券
var giveCouponNumber = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.GiveCouponNumber).ObjectToInt(); //赠送优惠券数量
if (userId > 0 && isAllowGiveCoupon == 1 && selectGiveCoupon > 0 && giveCouponNumber > 0)
{
var promotion = await _coreCmsPromotionServices.QueryByIdAsync(selectGiveCoupon);
var dt = DateTime.Now;
if (!promotion.isDel && promotion.isEnable && promotion.startTime < dt && promotion.endTime > dt)
{
await _coreCmsCouponServices.AddData(userId, promotion.id, promotion, giveCouponNumber, "新人注册赠送");
}
}
} }
else else
{ {

View File

@@ -42,16 +42,17 @@ namespace CoreCms.Net.Web.Admin.Controllers
{ {
private readonly IWebHostEnvironment _webHostEnvironment; private readonly IWebHostEnvironment _webHostEnvironment;
private readonly ICoreCmsSettingServices _coreCmsSettingServices; private readonly ICoreCmsSettingServices _coreCmsSettingServices;
private readonly ICoreCmsPromotionServices _coreCmsPromotionServices;
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
///</summary> ///</summary>
/// <param name="webHostEnvironment"></param> public CoreCmsSettingController(IWebHostEnvironment webHostEnvironment, ICoreCmsSettingServices CoreCmsSettingServices, ICoreCmsPromotionServices coreCmsPromotionServices)
///<param name="CoreCmsSettingServices"></param>
public CoreCmsSettingController(IWebHostEnvironment webHostEnvironment, ICoreCmsSettingServices CoreCmsSettingServices)
{ {
_webHostEnvironment = webHostEnvironment; _webHostEnvironment = webHostEnvironment;
_coreCmsSettingServices = CoreCmsSettingServices; _coreCmsSettingServices = CoreCmsSettingServices;
_coreCmsPromotionServices = coreCmsPromotionServices;
} }
#region ============================================================ #region ============================================================
@@ -69,10 +70,14 @@ namespace CoreCms.Net.Web.Admin.Controllers
var configs = await _coreCmsSettingServices.GetConfigDictionaries(); var configs = await _coreCmsSettingServices.GetConfigDictionaries();
var filesStorageOptionsType = EnumHelper.EnumToList<GlobalEnumVars.FilesStorageOptionsType>(); var filesStorageOptionsType = EnumHelper.EnumToList<GlobalEnumVars.FilesStorageOptionsType>();
var dt = DateTime.Now;
var coupons = await _coreCmsPromotionServices.QueryListByClauseAsync(p => p.type == (int)GlobalEnumVars.PromotionType.Coupon && p.startTime < dt && p.endTime > dt && !p.isDel && p.isEnable);
jm.data = new jm.data = new
{ {
configs, configs,
filesStorageOptionsType filesStorageOptionsType,
coupons
}; };
return jm; return jm;

View File

@@ -3887,12 +3887,10 @@
平台设置表 平台设置表
</summary> </summary>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsSettingController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsSettingServices)"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsSettingController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsSettingServices,CoreCms.Net.IServices.ICoreCmsPromotionServices)">
<summary> <summary>
构造函数 构造函数
</summary> </summary>
<param name="webHostEnvironment"></param>
<param name="CoreCmsSettingServices"></param>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsSettingController.GetIndex"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsSettingController.GetIndex">
<summary> <summary>

View File

@@ -42,6 +42,7 @@
<li lay-id="inviteFriends">邀请好友设置</li> <li lay-id="inviteFriends">邀请好友设置</li>
<li lay-id="filesStorage">附件设置</li> <li lay-id="filesStorage">附件设置</li>
<li lay-id="store">门店设置</li> <li lay-id="store">门店设置</li>
<li lay-id="newMember">新人设置</li>
<li lay-id="other">其他设置</li> <li lay-id="other">其他设置</li>
</ul> </ul>
<div class="layui-tab-content"> <div class="layui-tab-content">
@@ -199,8 +200,6 @@
</div> </div>
</div> </div>
<div class="layui-tab-item"> <div class="layui-tab-item">
<div class="layui-form coreshop-form"> <div class="layui-form coreshop-form">
@@ -918,6 +917,52 @@
</div> </div>
</div> </div>
<div class="layui-tab-item">
<div class="layui-form coreshop-form">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;"> <legend>新人设置</legend></fieldset>
<blockquote class="layui-elem-quote">
注意当前发送优惠券只判断了选择的优惠券是否在有效期另外并未计算优惠券剩余多少可领取与新人放发放数量对比限制
</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['isAllowGiveCoupon']['sKey']}}</label>
<div class="layui-input-inline layui-inline-5">
<input type="radio" lay-filter="isAllowGiveCoupon" name="isAllowGiveCoupon" value="1" title="开启" {{d.data.configs['isAllowGiveCoupon']['sValue']==="1" ? 'checked':''}}>
<input type="radio" lay-filter="isAllowGiveCoupon" name="isAllowGiveCoupon" value="2" title="不开启" {{d.data.configs['isAllowGiveCoupon']['sValue']==="2" ? 'checked':''}}>
</div>
<div class="layui-form-mid layui-word-aux">用户注册是否自动赠送优惠券</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['selectGiveCoupon']['sKey']}}</label>
<div class="layui-input-inline layui-inline-5">
<select name="selectGiveCoupon">
<option>请选择</option>
{{# layui.each( d.data.coupons, function(index, item){ }}
<option value="{{ item.id }}" {{item.id.toString()===d.data.configs['selectGiveCoupon']['sValue']?'selected="selected"':'' }}>{{ item.name }}</option>
{{# }); }}
</select>
</div>
<div class="layui-form-mid layui-word-aux">只能选择在有效活动期内正常的优惠券</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['giveCouponNumber']['sKey']}}</label>
<div class="layui-input-inline layui-inline-5">
<input type="text" name="giveCouponNumber" value="{{d.data.configs['giveCouponNumber']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">赠送优惠券的数量</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">&nbsp;</label>
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" lay-filter="save">保存更改</button>
</div>
</div>
</div>
</div>
<div class="layui-tab-item"> <div class="layui-tab-item">
<div class="layui-form coreshop-form"> <div class="layui-form coreshop-form">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;"> <legend>客服</legend></fieldset> <fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;"> <legend>客服</legend></fieldset>