diff --git a/CoreCms.Net.Model/Entities/User/CoreCmsUserGrade.cs b/CoreCms.Net.Model/Entities/User/CoreCmsUserGrade.cs index 5491cfdb..b931d33b 100644 --- a/CoreCms.Net.Model/Entities/User/CoreCmsUserGrade.cs +++ b/CoreCms.Net.Model/Entities/User/CoreCmsUserGrade.cs @@ -3,11 +3,13 @@ * ProjectName: 核心内容管理系统 * Web: https://www.corecms.net * Author: 大灰灰 - * Email: jianweie@163.com - * CreateTime: 2021-06-08 22:14:59 + * Email: jianweie@163.com + * CreateTime: 2022/5/8 22:18:48 * Description: 暂无 -***********************************************************************/ + ***********************************************************************/ + using SqlSugar; +using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace CoreCms.Net.Model.Entities @@ -15,37 +17,112 @@ namespace CoreCms.Net.Model.Entities /// /// 用户等级表 /// - [SugarTable("CoreCmsUserGrade",TableDescription = "用户等级表")] public partial class CoreCmsUserGrade { /// - /// 用户等级表 + /// 构造函数 /// public CoreCmsUserGrade() { } - + /// /// id /// [Display(Name = "id")] - [SugarColumn(ColumnDescription = "id", IsPrimaryKey = true, IsIdentity = true)] + + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + [Required(ErrorMessage = "请输入{0}")] - public System.Int32 id { get; set; } + + + + public System.Int32 id { get; set; } + + /// /// 标题 /// [Display(Name = "标题")] - [SugarColumn(ColumnDescription = "标题")] + [Required(ErrorMessage = "请输入{0}")] - [StringLength(60, ErrorMessage = "【{0}】不能超过{1}字符长度")] - public System.String title { get; set; } + [StringLength(maximumLength:60,ErrorMessage = "{0}不能超过{1}字")] + + + public System.String title { get; set; } + + /// /// 是否默认 /// [Display(Name = "是否默认")] - [SugarColumn(ColumnDescription = "是否默认")] + [Required(ErrorMessage = "请输入{0}")] - public System.Boolean isDefault { get; set; } + + + + public System.Boolean isDefault { get; set; } + + + /// + /// 开启自动升级 + /// + [Display(Name = "开启自动升级")] + + [Required(ErrorMessage = "请输入{0}")] + + + + public System.Boolean isOpenUpgrade { get; set; } + + + /// + /// 发展用户数量 + /// + [Display(Name = "发展用户数量")] + + [Required(ErrorMessage = "请输入{0}")] + + + + public System.Int32 developNum { get; set; } + + + /// + /// 订单消费金额 + /// + [Display(Name = "订单消费金额")] + + [Required(ErrorMessage = "请输入{0}")] + + + + public System.Int32 expenditureMoney { get; set; } + + + /// + /// 充值总金额 + /// + [Display(Name = "充值总金额")] + + [Required(ErrorMessage = "请输入{0}")] + + + + public System.Int32 rechargeAmount { get; set; } + + + /// + /// 权重优先级 + /// + [Display(Name = "权重优先级")] + + [Required(ErrorMessage = "请输入{0}")] + + + + public System.Int32 prioritySortId { get; set; } + + } -} \ No newline at end of file +} diff --git a/CoreCms.Net.RedisMQ/Subscribe/UserSubscribe.cs b/CoreCms.Net.RedisMQ/Subscribe/UserSubscribe.cs index 7bd11c6d..407febf1 100644 --- a/CoreCms.Net.RedisMQ/Subscribe/UserSubscribe.cs +++ b/CoreCms.Net.RedisMQ/Subscribe/UserSubscribe.cs @@ -10,6 +10,7 @@ using System; +using System.Linq; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IServices; @@ -32,14 +33,16 @@ namespace CoreCms.Net.RedisMQ.Subscribe private readonly ICoreCmsOrderServices _orderServices; private readonly ICoreCmsBillRefundServices _billRefundServices; private readonly ICoreCmsUserGradeServices _userGradeServices; + private readonly ICoreCmsBillPaymentsServices _billPaymentsServices; - public UserSubscribe(ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillRefundServices billRefundServices, ICoreCmsUserGradeServices userGradeServices) + public UserSubscribe(ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillRefundServices billRefundServices, ICoreCmsUserGradeServices userGradeServices, ICoreCmsBillPaymentsServices billPaymentsServices) { _userServices = userServices; _orderServices = orderServices; _billRefundServices = billRefundServices; _userGradeServices = userGradeServices; + _billPaymentsServices = billPaymentsServices; } /// @@ -60,7 +63,7 @@ namespace CoreCms.Net.RedisMQ.Subscribe return; } - var userInfo = await _userServices.QueryPageAsync(p => p.id == orderModel.userId); + var userInfo = await _userServices.QueryByClauseAsync(p => p.id == orderModel.userId); if (userInfo == null) { NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完成-用户升级处理", "用户数据获取失败"); @@ -77,17 +80,33 @@ namespace CoreCms.Net.RedisMQ.Subscribe p => p.type == (int)GlobalEnumVars.BillRefundType.Order && p.userId == orderModel.userId && p.status != (int)GlobalEnumVars.BillRefundStatus.STATUS_REFUND, p => p.money); - var money = payedMoney - refundMoney; + //实际消费金额 + var expenditureMoney = payedMoney - refundMoney; + + //充值金额 + var rechargeAmount = await _billPaymentsServices.GetSumAsync( + p => p.type == (int)GlobalEnumVars.BillPaymentsType.Recharge && + p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed, p => p.money); + + //发展用户 + var developNum = await _userServices.GetCountAsync(p => p.parentId == userInfo.id); + developNum += await _userServices.QueryChildCountAsync(userInfo.id, 2); + //取所有用户等级信息 + var userGradeModel = await _userGradeServices.QueryListByClauseAsync(p => p.isOpenUpgrade == true, p => p.prioritySortId, OrderByType.Asc); + //获取用户默认等级 + var defaultModel = userGradeModel.Find(p => p.id == userInfo.grade); - var userGradeModel = await _userGradeServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Asc); - - //var id = 0; - - foreach (var item in userGradeModel) + //判断是否符合升级条件 + var userGradeId = 0; + foreach (var item in userGradeModel.TakeWhile(item => defaultModel == null || defaultModel.prioritySortId > item.prioritySortId).Where(item => developNum >= item.developNum && expenditureMoney >= item.expenditureMoney && rechargeAmount >= item.rechargeAmount)) { - + userGradeId = item.id; + } + if (userGradeId > 0) + { + await _userServices.UpdateAsync(p => new CoreCmsUser() {grade = userGradeId}, p => p.id == userInfo.id); } NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完成-用户升级处理", msg); diff --git a/CoreCms.Net.Web.Admin/Controllers/User/CoreCmsUserGradeController.cs b/CoreCms.Net.Web.Admin/Controllers/User/CoreCmsUserGradeController.cs index c8d61d74..2432de34 100644 --- a/CoreCms.Net.Web.Admin/Controllers/User/CoreCmsUserGradeController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/User/CoreCmsUserGradeController.cs @@ -55,10 +55,9 @@ namespace CoreCms.Net.Web.Admin.Controllers } #region 获取列表============================================================ - // POST: Api/CoreCmsUserGrade/GetPageList /// - /// 获取列表 + /// 获取列表 /// /// [HttpPost] @@ -71,22 +70,19 @@ namespace CoreCms.Net.Web.Admin.Controllers var where = PredicateBuilder.True(); //获取排序字段 var orderField = Request.Form["orderField"].FirstOrDefault(); - Expression> orderEx; - switch (orderField) + + Expression> orderEx = orderField switch { - case "id": - orderEx = p => p.id; - break; - case "title": - orderEx = p => p.title; - break; - case "isDefault": - orderEx = p => p.isDefault; - break; - default: - orderEx = p => p.id; - break; - } + "id" => p => p.id, + "title" => p => p.title, + "isDefault" => p => p.isDefault, + "isOpenUpgrade" => p => p.isOpenUpgrade, + "developNum" => p => p.developNum, + "expenditureMoney" => p => p.expenditureMoney, + "rechargeAmount" => p => p.rechargeAmount, + "prioritySortId" => p => p.prioritySortId, + _ => p => p.prioritySortId + }; //设置排序方式 var orderDirection = Request.Form["orderDirection"].FirstOrDefault(); @@ -100,18 +96,62 @@ namespace CoreCms.Net.Web.Admin.Controllers //id int var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0); - if (id > 0) @where = @where.And(p => p.id == id); + if (id > 0) + { + where = where.And(p => p.id == id); + } //标题 nvarchar var title = Request.Form["title"].FirstOrDefault(); - if (!string.IsNullOrEmpty(title)) @where = @where.And(p => p.title.Contains(title)); + if (!string.IsNullOrEmpty(title)) + { + where = where.And(p => p.title.Contains(title)); + } //是否默认 bit var isDefault = Request.Form["isDefault"].FirstOrDefault(); if (!string.IsNullOrEmpty(isDefault) && isDefault.ToLowerInvariant() == "true") - @where = @where.And(p => p.isDefault); + { + where = where.And(p => p.isDefault == true); + } else if (!string.IsNullOrEmpty(isDefault) && isDefault.ToLowerInvariant() == "false") - @where = @where.And(p => p.isDefault == false); + { + where = where.And(p => p.isDefault == false); + } + //开启自动升级 bit + var isOpenUpgrade = Request.Form["isOpenUpgrade"].FirstOrDefault(); + if (!string.IsNullOrEmpty(isOpenUpgrade) && isOpenUpgrade.ToLowerInvariant() == "true") + { + where = where.And(p => p.isOpenUpgrade == true); + } + else if (!string.IsNullOrEmpty(isOpenUpgrade) && isOpenUpgrade.ToLowerInvariant() == "false") + { + where = where.And(p => p.isOpenUpgrade == false); + } + //发展用户数量 int + var developNum = Request.Form["developNum"].FirstOrDefault().ObjectToInt(0); + if (developNum > 0) + { + where = where.And(p => p.developNum == developNum); + } + //订单消费金额 int + var expenditureMoney = Request.Form["expenditureMoney"].FirstOrDefault().ObjectToInt(0); + if (expenditureMoney > 0) + { + where = where.And(p => p.expenditureMoney == expenditureMoney); + } + //充值总金额 int + var rechargeAmount = Request.Form["rechargeAmount"].FirstOrDefault().ObjectToInt(0); + if (rechargeAmount > 0) + { + where = where.And(p => p.rechargeAmount == rechargeAmount); + } + //权重优先级 int + var prioritySortId = Request.Form["prioritySortId"].FirstOrDefault().ObjectToInt(0); + if (prioritySortId > 0) + { + where = where.And(p => p.prioritySortId == prioritySortId); + } //获取数据 - var list = await _coreCmsUserGradeServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize); + var list = await _coreCmsUserGradeServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true); //返回数据 jm.data = list; jm.code = 0; @@ -119,7 +159,6 @@ namespace CoreCms.Net.Web.Admin.Controllers jm.msg = "数据调用成功!"; return jm; } - #endregion #region 首页数据============================================================ @@ -258,6 +297,12 @@ namespace CoreCms.Net.Web.Admin.Controllers oldModel.id = entity.id; oldModel.title = entity.title; oldModel.isDefault = entity.isDefault; + oldModel.isOpenUpgrade = entity.isOpenUpgrade; + oldModel.developNum = entity.developNum; + oldModel.expenditureMoney = entity.expenditureMoney; + oldModel.rechargeAmount = entity.rechargeAmount; + oldModel.prioritySortId = entity.prioritySortId; + //事物处理过程结束 var bl = await _coreCmsUserGradeServices.UpdateAsync(oldModel); jm.code = bl ? 0 : 1; @@ -398,5 +443,35 @@ namespace CoreCms.Net.Web.Admin.Controllers } #endregion + + #region 设置开启自动升级============================================================ + // POST: Api/CoreCmsUserGrade/DoSetisOpenUpgrade/10 + /// + /// 设置开启自动升级 + /// + /// + /// + [HttpPost] + [Description("设置开启自动升级")] + public async Task DoSetisOpenUpgrade([FromBody] FMUpdateBoolDataByIntId entity) + { + var jm = new AdminUiCallBack(); + + var oldModel = await _coreCmsUserGradeServices.QueryByIdAsync(entity.id, false); + if (oldModel == null) + { + jm.msg = "不存在此信息"; + return jm; + } + oldModel.isOpenUpgrade = (bool)entity.data; + + var bl = await _coreCmsUserGradeServices.UpdateAsync(p => new CoreCmsUserGrade() { isOpenUpgrade = oldModel.isOpenUpgrade }, p => p.id == oldModel.id); + jm.code = bl ? 0 : 1; + jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; + + return jm; + } + #endregion + } } \ No newline at end of file diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/create.html index a6ea0972..0f59438c 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/create.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/create.html @@ -18,6 +18,47 @@ +
+ +
+ +
+
开启后,满足条件将自动升级
+
+ +
+ +
+ +
+
发展用户数量
+
+ +
+ +
+ +
+
非充值订单消费的总金额。
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
权重越大,等级越大
+
+ +
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/details.html b/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/details.html index cee05b6a..6010ef73 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/details.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/user/usergrade/details.html @@ -1,11 +1,20 @@ @@ -268,4 +285,10 @@ \ No newline at end of file + + + + + diff --git a/数据库/MySql/20220508/coreshop20220508带商品完整脚本navicat导出.rar b/数据库/MySql/20220508/coreshop20220508带商品完整脚本navicat导出.rar new file mode 100644 index 00000000..68266026 Binary files /dev/null and b/数据库/MySql/20220508/coreshop20220508带商品完整脚本navicat导出.rar differ diff --git a/数据库/MySql/20220508/coreshop20220508带商品完整脚本阿里云dms导出.rar b/数据库/MySql/20220508/coreshop20220508带商品完整脚本阿里云dms导出.rar new file mode 100644 index 00000000..804b4756 Binary files /dev/null and b/数据库/MySql/20220508/coreshop20220508带商品完整脚本阿里云dms导出.rar differ diff --git a/数据库/MySql/20220508/升级脚本.sql b/数据库/MySql/20220508/升级脚本.sql new file mode 100644 index 00000000..2d2fb02d --- /dev/null +++ b/数据库/MySql/20220508/升级脚本.sql @@ -0,0 +1,5 @@ +ALTER TABLE CoreCmsUserGrade ADD COLUMN prioritySortId int DEFAULT 0 NOT NULL COMMENT '权重优先级' AFTER isDefault; +ALTER TABLE CoreCmsUserGrade ADD COLUMN rechargeAmount int DEFAULT 0 NOT NULL COMMENT '充值总金额' AFTER isDefault; +ALTER TABLE CoreCmsUserGrade ADD COLUMN expenditureMoney int DEFAULT 0 NOT NULL COMMENT '订单消费金额' AFTER isDefault; +ALTER TABLE CoreCmsUserGrade ADD COLUMN developNum int DEFAULT 0 NOT NULL COMMENT '发展用户数量' AFTER isDefault; +ALTER TABLE CoreCmsUserGrade ADD COLUMN isOpenUpgrade bit DEFAULT 0 NOT NULL COMMENT '开启自动升级' AFTER isDefault; \ No newline at end of file diff --git a/数据库/MySql/数据库更新日志.txt b/数据库/MySql/数据库更新日志.txt index 35375b68..09d7da39 100644 --- a/数据库/MySql/数据库更新日志.txt +++ b/数据库/MySql/数据库更新日志.txt @@ -1,3 +1,6 @@ +2022-05-08 +【新增】表【CoreCmsUserGrade】新增【isOpenUpgrade】【developNum】【expenditureMoney】【rechargeAmount】【prioritySortId】字段。实现用户升级队列处理逻辑 + 2022-04-10 【新增】表【SysUserOperationLog】用户操作日志记录 diff --git a/数据库/SqlServer/20220508/20220508完整数据库带演示商品.rar b/数据库/SqlServer/20220508/20220508完整数据库带演示商品.rar new file mode 100644 index 00000000..9caeb017 Binary files /dev/null and b/数据库/SqlServer/20220508/20220508完整数据库带演示商品.rar differ diff --git a/数据库/SqlServer/20220508/升级脚本.sql b/数据库/SqlServer/20220508/升级脚本.sql new file mode 100644 index 00000000..f3139889 --- /dev/null +++ b/数据库/SqlServer/20220508/升级脚本.sql @@ -0,0 +1,18 @@ + +ALTER TABLE [dbo].[CoreCmsUserGrade] + ADD [isOpenUpgrade] BIT DEFAULT 0 NOT NULL, + [developNum] INT DEFAULT 0 NOT NULL, + [expenditureMoney] INT DEFAULT 0 NOT NULL, + [rechargeAmount] INT DEFAULT 0 NOT NULL, + [prioritySortId] INT DEFAULT 0 NOT NULL; + + +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'发展用户数量', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserGrade', @level2type = N'COLUMN', @level2name = N'developNum'; + +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'订单消费金额', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserGrade', @level2type = N'COLUMN', @level2name = N'expenditureMoney'; + +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'开启自动升级', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserGrade', @level2type = N'COLUMN', @level2name = N'isOpenUpgrade'; + +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'充值总金额', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserGrade', @level2type = N'COLUMN', @level2name = N'rechargeAmount'; + +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'权重优先级', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'CoreCmsUserGrade', @level2type = N'COLUMN', @level2name = N'prioritySortId'; diff --git a/数据库/SqlServer/数据库更新日志.txt b/数据库/SqlServer/数据库更新日志.txt index 605569c5..447e96f2 100644 --- a/数据库/SqlServer/数据库更新日志.txt +++ b/数据库/SqlServer/数据库更新日志.txt @@ -1,3 +1,6 @@ +2022-05-08 +【新增】表【CoreCmsUserGrade】新增【isOpenUpgrade】【developNum】【expenditureMoney】【rechargeAmount】【prioritySortId】字段。实现用户升级队列处理逻辑 + 2022-04-10 【新增】表【SysUserOperationLog】用户操作日志记录