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 CoreCms.Net.Web.Admin.Infrastructure;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace CoreCms.Net.Web.Admin.Controllers.Shop
{
///
/// 日历签到设置
///
[Description("日历签到设置")]
[Route("api/[controller]/[action]")]
[ApiController]
[RequiredErrorForAdmin]
[Authorize(Permissions.Name)]
public class CoreCmsCheckInController : ControllerBase
{
private readonly ICoreCmsSettingServices _coreCmsSettingServices;
private readonly ICoreCmsUserGradeServices _coreCmsUserGradeServices;
private readonly ICoreCmsContinuousCheckInRuleDetailsServices _coreCmsContinuousCheckInRuleDetailsServices;
private readonly ICoreCmsContinuousCheckInRulesServices _coreCmsContinuousCheckInRulesServices;
private readonly ICoreCmsCumulativeCheckInRulesServices _coreCmsCumulativeCheckInRulesServices;
///
/// 构造函数
///
public CoreCmsCheckInController(ICoreCmsSettingServices coreCmsSettingServices, ICoreCmsUserGradeServices coreCmsUserGradeServices, ICoreCmsContinuousCheckInRuleDetailsServices coreCmsContinuousCheckInRuleDetailsServices, ICoreCmsContinuousCheckInRulesServices coreCmsContinuousCheckInRulesServices, ICoreCmsCumulativeCheckInRulesServices coreCmsCumulativeCheckInRulesServices)
{
_coreCmsSettingServices = coreCmsSettingServices;
_coreCmsUserGradeServices = coreCmsUserGradeServices;
_coreCmsContinuousCheckInRuleDetailsServices = coreCmsContinuousCheckInRuleDetailsServices;
_coreCmsContinuousCheckInRulesServices = coreCmsContinuousCheckInRulesServices;
_coreCmsCumulativeCheckInRulesServices = coreCmsCumulativeCheckInRulesServices;
}
#region 首页数据============================================================
// POST: Api/CoreCmsSetting/GetIndex
///
/// 首页数据
///
///
[HttpPost]
[Description("首页数据")]
public async Task GetIndex()
{
//返回数据
var jm = new AdminUiCallBack { code = 0 };
var configs = await _coreCmsSettingServices.GetConfigDictionaries();
var filesStorageOptionsType = EnumHelper.EnumToList();
var userGrade = await _coreCmsUserGradeServices.QueryAsync();
//连续签到规则
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.QueryAsync(true, true);
jm.data = new
{
configs,
filesStorageOptionsType,
userGrade,
continuousCheckInRules,
newDetails,
cumulativeCheckInRules
};
return jm;
}
#endregion
#region 保存提交============================================================
// POST: Api/CoreCmsSetting/DoSave
///
/// 保存提交
///
///
///
[HttpPost]
[Description("保存提交")]
public async Task DoSave([FromBody] FMCoreCmsSettingDoSaveModel model)
{
var jm = await _coreCmsSettingServices.UpdateAsync(model);
return jm;
}
#endregion
#region 保存累计签到规则============================================================
// POST: Api/CoreCmsSetting/DoSave
///
/// 保存累计签到规则
///
///
[HttpPost]
[Description("保存累计签到规则")]
public async Task DoSaveCumulativeCheckInRules([FromBody] FMDoSaveCumulativeCheckInRules entity)
{
var jm = new AdminUiCallBack();
if (!entity.entity.Any())
{
jm.msg = "请提交数据";
return jm;
}
//判断是否存在0天数或者0赠送
var isHaveEnptyDaysOrNum = entity.entity.Count(p => p.days <= 0 || p.num <= 0);
if (isHaveEnptyDaysOrNum > 0)
{
jm.msg = "累计签到天数或赠送数量不能为零";
return jm;
}
//判断是否存在相同的天数设置。
var isHave = entity.entity.GroupBy(i => i.days).Any(g => g.Count() > 1);
if (isHave)
{
jm.msg = "存在相同的累计签到天数。请排查";
return jm;
}
//先清理掉数据,因为是配置数据,可直接删除添加新的
var doEnpty = await _coreCmsCumulativeCheckInRulesServices.DeleteAsync(p => p.id > 0, true);
//插入新的数据
var insertCount = await _coreCmsCumulativeCheckInRulesServices.InsertAsync(entity.entity, true);
jm.code = 0;
jm.msg = "保存成功";
return jm;
}
#endregion
#region 保存连续签到规则============================================================
// POST: Api/CoreCmsSetting/DoSave
///
/// 保存连续签到规则
///
///
[HttpPost]
[Description("保存连续签到规则")]
public async Task DoSaveContinuousCheckInRules([FromBody] FMDoSaveContinuousCheckInRules entity)
{
var jm = new AdminUiCallBack();
if (entity.entity.Any()) return await _coreCmsContinuousCheckInRulesServices.InsertAsync(entity.entity);
jm.msg = "请提交数据";
return jm;
}
#endregion
}
}