/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.Manual;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Repository
{
///
/// 表单 接口实现
///
public class CoreCmsFormRepository : BaseRepository, ICoreCmsFormRepository
{
public CoreCmsFormRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
///
/// 重写异步插入方法
///
/// 实体数据
///
public async Task InsertAsync(FMForm entity)
{
var jm = new AdminUiCallBack();
var check = CheckItems(entity.items);
if (check.code == 1)
{
return check;
}
entity.model.createTime = DateTime.Now;
var id = await DbClient.Insertable(entity.model).ExecuteReturnIdentityAsync();
entity.items.ForEach(p =>
{
p.formId = id;
});
var bl = await DbClient.Insertable(entity.items).ExecuteCommandAsync() > 0;
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
return jm;
}
///
/// 重写异步更新方法
///
///
///
public async Task UpdateAsync(FMForm entity)
{
var jm = new AdminUiCallBack();
var check = CheckItems(entity.items);
if (check.code == 1)
{
return check;
}
var oldModel = await DbClient.Queryable().In(entity.model.id).SingleAsync();
if (oldModel == null)
{
jm.msg = "不存在此信息";
return jm;
}
//事物处理过程开始
//oldModel.id = entity.model.id;
oldModel.name = entity.model.name;
oldModel.type = entity.model.type;
oldModel.sort = entity.model.sort;
oldModel.images = entity.model.images;
oldModel.videoPath = entity.model.videoPath;
oldModel.description = entity.model.description;
oldModel.headType = entity.model.headType;
oldModel.headTypeValue = entity.model.headTypeValue;
oldModel.headTypeVideo = entity.model.headTypeVideo;
oldModel.buttonName = entity.model.buttonName;
oldModel.buttonColor = entity.model.buttonColor;
oldModel.isLogin = entity.model.isLogin;
oldModel.times = entity.model.times;
//oldModel.qrcode = entity.model.qrcode;
oldModel.returnMsg = entity.model.returnMsg;
oldModel.endDateTime = entity.model.endDateTime;
//oldModel.createTime = entity.model.createTime;
oldModel.updateTime = DateTime.Now;
//事物处理过程结束
var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
if (bl)
{
//查询已经存在的数据
var items = await DbClient.Queryable().Where(p => p.formId == oldModel.id).ToListAsync();
//找到提交的数据是否有老数据
var oldPostItems = entity.items.Where(p => p.id > 0).ToList();
if (oldPostItems.Any())
{
var oldPostItemsIds = oldPostItems.Select(p => p.id).ToList();
//找到数据库中和提交的数据库中都不存在差集数据进行删除
var deletes = items.Where(p => !oldPostItemsIds.Contains(p.id)).ToList();
if (deletes.Any())
{
await DbClient.Deleteable(deletes).ExecuteCommandHasChangeAsync();
}
//对提交的老数据进行更新处理
var oldDataItems = items.Where(p => oldPostItemsIds.Contains(p.id)).ToList();
if (oldDataItems.Any())
{
oldDataItems.ForEach(p =>
{
var child = oldPostItems.Find(o => o.id == p.id);
if (child != null)
{
p.name = child.name;
p.type = child.type;
p.validationType = child.validationType;
p.value = child.value;
p.defaultValue = child.defaultValue;
//p.formId = child.formId;
p.required = child.required;
p.sort = child.sort;
}
});
await DbClient.Updateable(oldDataItems).ExecuteCommandHasChangeAsync();
}
}
else
{
await DbClient.Deleteable(items).ExecuteCommandHasChangeAsync();
}
//新数据
var newPostItems = entity.items.Where(p => p.id == 0).ToList();
if (newPostItems.Any())
{
entity.items.ForEach(p =>
{
p.formId = oldModel.id;
});
await DbClient.Insertable(newPostItems).ExecuteCommandAsync();
}
}
return jm;
}
public AdminUiCallBack CheckItems(List items)
{
var jm = new AdminUiCallBack();
if (!items.Any())
{
jm.msg = "请添加字段数据";
return jm;
}
foreach (var item in items)
{
if (string.IsNullOrEmpty(item.name))
{
jm.msg = "字段名称不能为空";
return jm;
}
if (!string.IsNullOrEmpty(item.defaultValue))
{
item.defaultValue = item.defaultValue.Trim();
item.defaultValue = item.defaultValue.Replace(",", ",");
}
if (!string.IsNullOrEmpty(item.value))
{
item.value = item.value.Trim();
item.value = item.value.Replace(",", ",");
}
if (item.type == GlobalEnumVars.FormFieldTypes.goods.ToString() && string.IsNullOrEmpty(item.value))
{
jm.msg = "【商品】字段必须要选择商品";
return jm;
}
else if (item.type == GlobalEnumVars.FormFieldTypes.radio.ToString() && string.IsNullOrEmpty(item.value))
{
jm.msg = "【单选】字段必须要至少有二个以上值,并且以逗号分隔";
return jm;
}
else if (item.type == GlobalEnumVars.FormFieldTypes.radio.ToString() && !string.IsNullOrEmpty(item.value))
{
var arr = item.value.Split(",");
if (arr.Length < 2)
{
jm.msg = "【单选】字段必须要至少有二个以上值,并且以逗号分隔";
return jm;
}
}
else if (item.type == GlobalEnumVars.FormFieldTypes.checbox.ToString() && string.IsNullOrEmpty(item.value))
{
jm.msg = "【多选项】字段必须要至少有二个或以上值,并且以逗号分隔";
return jm;
}
else if (item.type == GlobalEnumVars.FormFieldTypes.checbox.ToString() && !string.IsNullOrEmpty(item.value))
{
var arr = item.value.Split(",");
if (arr.Length < 2)
{
jm.msg = "【多选项】字段必须要至少有二个词组或以上值,并且以逗号分隔";
return jm;
}
}
else if (item.type == GlobalEnumVars.FormFieldTypes.date.ToString())
{
//没有值的时候设置下默认值
}
else if (item.type == GlobalEnumVars.FormFieldTypes.time.ToString())
{
//没有值的时候设置下默认值
}
}
jm.code = 0;
return jm;
}
///
/// 重写删除指定ID的数据
///
///
///
public async Task DeleteByIdAsync(int id)
{
var jm = new AdminUiCallBack();
var isHaveSubmitData = await DbClient.Queryable().AnyAsync(p => p.formId == id);
if (isHaveSubmitData)
{
jm.msg = "此表单已经存在用户提交数据,禁止删除";
return jm;
}
var bl = await DbClient.Deleteable(id).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
if (bl)
{
await DbClient.Deleteable().Where(p => p.formId == id).ExecuteCommandHasChangeAsync();
}
return jm;
}
///
/// 重写根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
public async Task> QueryPageAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync totalCount = 0;
List page;
if (blUseNoLock)
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsForm
{
id = p.id,
name = p.name,
type = p.type,
sort = p.sort,
images = p.images,
videoPath = p.videoPath,
description = p.description,
headType = p.headType,
headTypeValue = p.headTypeValue,
headTypeVideo = p.headTypeVideo,
buttonName = p.buttonName,
buttonColor = p.buttonColor,
isLogin = p.isLogin,
times = p.times,
qrcode = p.qrcode,
returnMsg = p.returnMsg,
endDateTime = p.endDateTime,
createTime = p.createTime,
updateTime = p.updateTime,
})
.Mapper(it => it.Items, it => it.Items.First().formId)
.With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsForm
{
id = p.id,
name = p.name,
type = p.type,
sort = p.sort,
images = p.images,
videoPath = p.videoPath,
description = p.description,
headType = p.headType,
headTypeValue = p.headTypeValue,
headTypeVideo = p.headTypeVideo,
buttonName = p.buttonName,
buttonColor = p.buttonColor,
isLogin = p.isLogin,
times = p.times,
qrcode = p.qrcode,
returnMsg = p.returnMsg,
endDateTime = p.endDateTime,
createTime = p.createTime,
updateTime = p.updateTime,
})
.Mapper(it => it.Items, it => it.Items.First().formId)
.ToPageListAsync(pageIndex, pageSize, totalCount);
}
var list = new PageList(page, pageIndex, pageSize, totalCount);
return list;
}
}
}