/*********************************************************************** * 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; } } }