【修复】修复当新增或者删除会员等级后,【签到设置】连续签到规则数据错误,累计签到设置保存无效的问题。

This commit is contained in:
大灰灰
2022-10-16 01:39:22 +08:00
parent bb3a7d885a
commit 82644f4e2f
11 changed files with 67 additions and 153 deletions

View File

@@ -33,11 +33,13 @@ namespace CoreCms.Net.IRepository
/// <returns></returns>
Task<AdminUiCallBack> InsertAsync(List<CoreCmsContinuousCheckInRules> entity);
/// <summary>
/// 获取缓存的所有数据
/// 获取的所有数据及子集
/// </summary>
/// <returns></returns>
Task<List<CoreCmsContinuousCheckInRules>> GetCaChe();
Task<List<CoreCmsContinuousCheckInRules>> GetDataWidthChild();
}
}

View File

@@ -25,18 +25,6 @@ namespace CoreCms.Net.IRepository
/// </summary>
public interface ICoreCmsCumulativeCheckInRulesRepository : IBaseRepository<CoreCmsCumulativeCheckInRules>
{
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
Task<AdminUiCallBack> InsertAsync(List<CoreCmsCumulativeCheckInRules> entity);
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
Task<List<CoreCmsCumulativeCheckInRules>> GetCaChe();
}
}

View File

@@ -32,11 +32,13 @@ namespace CoreCms.Net.IServices
/// <returns></returns>
Task<AdminUiCallBack> InsertAsync(List<CoreCmsContinuousCheckInRules> entity);
/// <summary>
/// 获取缓存的所有数据
/// 获取的所有数据及子集
/// </summary>
/// <returns></returns>
Task<List<CoreCmsContinuousCheckInRules>> GetCaChe();
Task<List<CoreCmsContinuousCheckInRules>> GetDataWidthChild();
}
}

View File

@@ -24,17 +24,5 @@ namespace CoreCms.Net.IServices
/// </summary>
public interface ICoreCmsCumulativeCheckInRulesServices : IBaseServices<CoreCmsCumulativeCheckInRules>
{
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
Task<AdminUiCallBack> InsertAsync(List<CoreCmsCumulativeCheckInRules> entity);
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
Task<List<CoreCmsCumulativeCheckInRules>> GetCaChe();
}
}

View File

@@ -77,13 +77,13 @@ namespace CoreCms.Net.Repository
days = item.days
};
var id = await DbClient.Insertable(continuous).ExecuteReturnIdentityAsync();
var id = await DbClient.Insertable(continuous).RemoveDataCache().ExecuteReturnIdentityAsync();
if (id <= 0) continue;
foreach (var detail in item.details)
{
detail.ruleId = id;
}
await DbClient.Insertable(item.details).ExecuteReturnIdentityAsync();
await DbClient.Insertable(item.details).RemoveDataCache().ExecuteReturnIdentityAsync();
}
_unitOfWork.CommitTran();
@@ -103,13 +103,12 @@ namespace CoreCms.Net.Repository
}
#region ==========================================================
/// <summary>
/// 获取缓存的所有数据
/// 获取的所有数据及子集
/// </summary>
/// <returns></returns>
public async Task<List<CoreCmsContinuousCheckInRules>> GetCaChe()
public async Task<List<CoreCmsContinuousCheckInRules>> GetDataWidthChild()
{
var list = await DbClient.Queryable<CoreCmsContinuousCheckInRules>()
.Select(p => new CoreCmsContinuousCheckInRules
@@ -123,53 +122,5 @@ namespace CoreCms.Net.Repository
}
#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 async Task<IPageList<CoreCmsContinuousCheckInRules>> QueryPageAsync(Expression<Func<CoreCmsContinuousCheckInRules, bool>> predicate,
Expression<Func<CoreCmsContinuousCheckInRules, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync<int> totalCount = 0;
List<CoreCmsContinuousCheckInRules> page;
if (blUseNoLock)
{
page = await DbClient.Queryable<CoreCmsContinuousCheckInRules>()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsContinuousCheckInRules
{
id = p.id,
days = p.days,
}).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable<CoreCmsContinuousCheckInRules>()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsContinuousCheckInRules
{
id = p.id,
days = p.days,
}).ToPageListAsync(pageIndex, pageSize, totalCount);
}
var list = new PageList<CoreCmsContinuousCheckInRules>(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
}
}

View File

@@ -34,29 +34,5 @@ namespace CoreCms.Net.Repository
_unitOfWork = unitOfWork;
}
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<AdminUiCallBack> InsertAsync(List<CoreCmsCumulativeCheckInRules> entity)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Insertable(entity).ExecuteCommandAsync();
jm.code = 0;
jm.msg = GlobalConstVars.EditSuccess;
return jm;
}
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
public async Task<List<CoreCmsCumulativeCheckInRules>> GetCaChe()
{
return await DbClient.Queryable<CoreCmsCumulativeCheckInRules>().With(SqlWith.NoLock).WithCache().ToListAsync();
}
}
}

View File

@@ -50,14 +50,17 @@ namespace CoreCms.Net.Services
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 获取缓存的所有数据
/// 获取的所有数据及子集
/// </summary>
/// <returns></returns>
public async Task<List<CoreCmsContinuousCheckInRules>> GetCaChe()
public async Task<List<CoreCmsContinuousCheckInRules>> GetDataWidthChild()
{
return await _dal.GetCaChe();
return await _dal.GetDataWidthChild();
}
}
}

View File

@@ -39,24 +39,5 @@ namespace CoreCms.Net.Services
_unitOfWork = unitOfWork;
}
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public async Task<AdminUiCallBack> InsertAsync(List<CoreCmsCumulativeCheckInRules> entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 获取缓存的所有数据
/// </summary>
/// <returns></returns>
public async Task<List<CoreCmsCumulativeCheckInRules>> GetCaChe()
{
return await _dal.GetCaChe();
}
}
}

View File

@@ -121,7 +121,7 @@ namespace CoreCms.Net.Services
}
//判断累计签到次数是否满足
var cumulativeCheckInRules = await _cumulativeCheckInRulesServices.GetCaChe();
var cumulativeCheckInRules = await _cumulativeCheckInRulesServices.QueryAsync(true, true);
//获取用户总签到次数使用userCheckIn的签到次数统计也可以但是查询实时数据最可靠。根据个人来
//var cumulativeCheckInCount = await _dal.GetCountAsync(p => p.userId == entity.userId);
var cumulativeCheckInCount = userCheckIn.cumulativeCheckInCount;
@@ -150,7 +150,7 @@ namespace CoreCms.Net.Services
//判断连续签到次数是否满足
var continuousCheckInRules = await _continuousCheckInRulesServices.GetCaChe();
var continuousCheckInRules = await _continuousCheckInRulesServices.QueryAsync(true, true);
//获取用户数据
var user = await _userServices.QueryByIdAsync(entity.userId);
//获取用户当前已经连续签到的次数

View File

@@ -1,16 +1,19 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.Filter;
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.Utility.Helper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace CoreCms.Net.Web.Admin.Controllers.Shop
@@ -63,10 +66,38 @@ namespace CoreCms.Net.Web.Admin.Controllers.Shop
var userGrade = await _coreCmsUserGradeServices.QueryAsync();
//连续签到规则
var continuousCheckInRules = await _coreCmsContinuousCheckInRulesServices.GetCaChe();
var continuousCheckInRules = await _coreCmsContinuousCheckInRulesServices.GetDataWidthChild();
//制作新数据,防止出现
JArray newDetails = new JArray();
if (continuousCheckInRules.Any())
{
foreach (var item in continuousCheckInRules)
{
JArray di = new JArray();
var newUserGrand = userGrade;
foreach (var itemGrade in newUserGrand)
{
JObject diItem = new JObject();
diItem.Add("grand", JObject.FromObject(itemGrade));
var details = item.details.Find(p => p.userGradeId == itemGrade.id);
if (details != null)
{
diItem.Add("details", JObject.FromObject(details));
}
di.Add(diItem);
}
newDetails.Add(di);
}
}
//累计签到规则
var cumulativeCheckInRules = await _coreCmsCumulativeCheckInRulesServices.GetCaChe();
var cumulativeCheckInRules = await _coreCmsCumulativeCheckInRulesServices.QueryAsync(true, true);
jm.data = new
{
@@ -74,6 +105,7 @@ namespace CoreCms.Net.Web.Admin.Controllers.Shop
filesStorageOptionsType,
userGrade,
continuousCheckInRules,
newDetails,
cumulativeCheckInRules
};
@@ -133,11 +165,12 @@ namespace CoreCms.Net.Web.Admin.Controllers.Shop
}
//先清理掉数据,因为是配置数据,可直接删除添加新的
var doEnpty = await _coreCmsCumulativeCheckInRulesServices.DeleteAsync(p => p.id > 0);
var doEnpty = await _coreCmsCumulativeCheckInRulesServices.DeleteAsync(p => p.id > 0, true);
//插入新的数据
var insertCount = await _coreCmsCumulativeCheckInRulesServices.InsertAsync(entity.entity, true);
var insertCount = await _coreCmsCumulativeCheckInRulesServices.InsertAsync(entity.entity);
jm.code = 0;
jm.msg = "保存成功";
return jm;

View File

@@ -76,7 +76,6 @@
<div class="layui-form-mid layui-word-aux">清除连续签到次数</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" lay-filter="save">保存更改</button>
@@ -103,24 +102,18 @@
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>会员组设置</legend>
</fieldset>
{{# layui.each(item.details, function(indexChild, itemChild){ }}
{{# layui.each(d.data.newDetails[index], function(indexChild, itemChild){ }}
<div class="layui-form-item listItems">
<input type="hidden" id="detailsId" name="continuousCheckInRules.details[{{index}}].id[{{indexChild}}]" value="{{itemChild.id}}">
<input type="hidden" id="detailsUserGradeId" name="continuousCheckInRules.details[{{index}}].userGradeId[{{indexChild}}]" value="{{itemChild.userGradeId}}">
<input type="hidden" id="detailsRuleId" name="continuousCheckInRules.details[{{index}}].ruleId[{{indexChild}}]" value="{{itemChild.ruleId}}">
<label class="layui-form-label">
{{# layui.each(d.data.userGrade, function(indexGrade, itemGrade){ }}
{{# if(itemChild.userGradeId === itemGrade.id){ }}
{{ itemGrade.title }}
{{# } }}
{{# }); }}
</label>
<input type="hidden" id="detailsId" name="continuousCheckInRules.details[{{index}}].id[{{indexChild}}]" value="{{ itemChild.details ? itemChild.details.id : 0}}">
<input type="hidden" id="detailsUserGradeId" name="continuousCheckInRules.details[{{index}}].userGradeId[{{indexChild}}]" value="{{itemChild.grand.id}}">
<input type="hidden" id="detailsRuleId" name="continuousCheckInRules.details[{{index}}].ruleId[{{indexChild}}]" value="{{ item.id }}">
<label class="layui-form-label">{{ itemChild.grand.title }}</label>
<div class="layui-input-inline layui-inline-2">
<input type="number" id="detailsNum" name="continuousCheckInRules.details[{{index}}].num[{{indexChild}}]" value="{{itemChild.num}}" lay-verify="required|number" autocomplete="off" placeholder="" class="layui-input">
<input type="number" id="detailsNum" name="continuousCheckInRules.details[{{index}}].num[{{indexChild}}]" value="{{itemChild.details ? itemChild.details.num : 0}}" lay-verify="required|number" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-input-inline layui-inline-4">
<input type="radio" id="detailsType" name="continuousCheckInRules.details[{{index}}].type[{{indexChild}}]" value="1" title="积分" {{itemChild.type==1?'checked="checked"':''}}>
<input type="radio" id="detailsType" name="continuousCheckInRules.details[{{index}}].type[{{indexChild}}]" value="2" title="余额" {{itemChild.type==2?'checked="checked"':''}}>
<input type="radio" id="detailsType" name="continuousCheckInRules.details[{{index}}].type[{{indexChild}}]" value="1" title="积分" {{(itemChild.details && itemChild.details.type==1)|| !itemChild.details?'checked="checked"':''}}>
<input type="radio" id="detailsType" name="continuousCheckInRules.details[{{index}}].type[{{indexChild}}]" value="2" title="余额" {{itemChild.details && itemChild.details.type==2?'checked="checked"':''}}>
</div>
</div>
{{# }); }}
@@ -193,7 +186,6 @@
</div>
</script>
<script id="continuousCheckInBoxTmp" type="text/html">
<div class="continuousCheckInBox coreshop-solid" data-id="{{d.index}}">
<div class="layui-form-item">
@@ -264,6 +256,7 @@
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d); }
indexData = d.data;
layui.use(['admin', 'form', 'coreHelper', 'element', 'table', 'util', 'laytpl', 'table', 'laydate'], function () {
var $ = layui.$
, setter = layui.setter
@@ -278,7 +271,6 @@
, router = layui.router()
, search = router.search;
//时间选择器
laydate.render({
elem: '#checkInAlertTime'
@@ -304,7 +296,6 @@
index: continuousCheckInRulesCount,
userGrade: d.data.userGrade
};
console.log(data);
var getTpl = continuousCheckInBoxTmp.innerHTML;
laytpl(getTpl).render(data, function (html) {
$("#continuousCheckInRulesCount").before(html);
@@ -326,7 +317,7 @@
//重置排序
function resetContinuousCheckInRulesInputNameID() {
$.each($("#continuousCheckInBox .continuousCheckInBox"), function (i, item) {
var oldIndex = $(this).attr('data-id');
//var oldIndex = $(this).attr('data-id');
$(this).attr('data-id', i);
$(this).find("#id").attr("name", "continuousCheckInRules.id[" + i + "]");
$(this).find("#days").attr("name", "continuousCheckInRules.days[" + i + "]");
@@ -510,7 +501,6 @@
});
});
form.render();
});
}