diff --git a/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamPaperController.cs b/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamPaperController.cs index 4902af95..3e5942a9 100644 --- a/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamPaperController.cs +++ b/Tiobon.Core.Api/Controllers/Ghre/Ghre_ExamPaperController.cs @@ -26,6 +26,7 @@ public class Ghre_ExamPaperController : BaseController @@ -38,6 +39,20 @@ public class Ghre_ExamPaperController : BaseController + /// 更新 + /// + /// + /// + /// + [HttpPost("Update1/{id}")] + public async Task Update1(long id, [FromBody] DefaultGhre_ExamPaperPageData insert) + { + return await _service.Update1(id, insert); + } #endregion #region 新增配置数据 diff --git a/Tiobon.Core.Api/Tiobon.Core.Model.xml b/Tiobon.Core.Api/Tiobon.Core.Model.xml index 3147299e..531abb04 100644 --- a/Tiobon.Core.Api/Tiobon.Core.Model.xml +++ b/Tiobon.Core.Api/Tiobon.Core.Model.xml @@ -853,6 +853,11 @@ 试卷配置ID + + + 排序号 + + 备注 @@ -2456,6 +2461,11 @@ 试卷配置ID + + + 排序号 + + 备注 @@ -3744,6 +3754,16 @@ 附件(Dto.View) + + + 创建信息 + + + + + 修改信息 + + Ghre_Course(Dto.View) @@ -3764,6 +3784,16 @@ 试卷(Dto.View) + + + 创建信息 + + + + + 修改信息 + + 试卷配置(Dto.View) @@ -3794,6 +3824,16 @@ 题目类型 + + + 创建信息 + + + + + 修改信息 + + 题目答案(Dto.View) @@ -4977,5 +5017,15 @@ 试卷配置ID + + + 创建信息 + + + + + 修改信息 + + diff --git a/Tiobon.Core.Api/Tiobon.Core.xml b/Tiobon.Core.Api/Tiobon.Core.xml index 43addf3c..c7a1b9bd 100644 --- a/Tiobon.Core.Api/Tiobon.Core.xml +++ b/Tiobon.Core.Api/Tiobon.Core.xml @@ -662,6 +662,14 @@ + + + 更新 + + + + + 新增配置数据 diff --git a/Tiobon.Core.Common/Attribute/QueryFilter.cs b/Tiobon.Core.Common/Attribute/QueryFilter.cs index 19eb41c9..9aaa6a0f 100644 --- a/Tiobon.Core.Common/Attribute/QueryFilter.cs +++ b/Tiobon.Core.Common/Attribute/QueryFilter.cs @@ -65,23 +65,12 @@ public class QueryFilter /// 动态查询条件 /// public class QueryBody -{ - private int _pageNum; +{ /// /// 起始位置(e.g. 0) /// [Required] - public int pageNum - { - get { return _pageNum; } - set - { - //前端默认从分页显示默认1开始,所以后端需要-1 - if (value >= 1) - value -= 1; - _pageNum = value; - } - } + public int pageNum { get; set; } /// /// 每页数量(e.g. 10) /// @@ -103,17 +92,8 @@ public class QueryBody /// /// 排序条件表达式(e.g. LoginName ASC,Name DESC) /// - public string Sorting { get; set; } - /// - /// 缺省值 - /// - public static QueryBody Default => new QueryBody - { - pageNum = 1, - pageSize = 100000, - Sorting = string.Empty, - jsonParam = default - }; + public string orderBy { get; set; } + } public class JsonParam { diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs index 06bd59d9..47060363 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs @@ -14,5 +14,6 @@ namespace Tiobon.Core.IServices Task> InsertConfig(InsertGhre_ExamPaperConfigInput insert); Task> Insert1([FromBody] DefaultGhre_ExamPaperPageData insert); + Task Update1(long id, DefaultGhre_ExamPaperPageData insertModel); } } \ No newline at end of file diff --git a/Tiobon.Core.Model/Base/Ghre/Ghre_ExamPaperQuestion.Dto.Base.cs b/Tiobon.Core.Model/Base/Ghre/Ghre_ExamPaperQuestion.Dto.Base.cs index 848ef403..f939fa19 100644 --- a/Tiobon.Core.Model/Base/Ghre/Ghre_ExamPaperQuestion.Dto.Base.cs +++ b/Tiobon.Core.Model/Base/Ghre/Ghre_ExamPaperQuestion.Dto.Base.cs @@ -42,6 +42,11 @@ namespace Tiobon.Core.Model.Models /// public long? ConfigId { get; set; } + /// + /// 排序号 + /// + public int? TaxisNo { get; set; } + /// /// 备注 /// diff --git a/Tiobon.Core.Model/Models/Ghre/Ghre_ExamPaperQuestion.cs b/Tiobon.Core.Model/Models/Ghre/Ghre_ExamPaperQuestion.cs index 1f969a62..69d540f0 100644 --- a/Tiobon.Core.Model/Models/Ghre/Ghre_ExamPaperQuestion.cs +++ b/Tiobon.Core.Model/Models/Ghre/Ghre_ExamPaperQuestion.cs @@ -44,6 +44,11 @@ namespace Tiobon.Core.Model.Models /// public long? ConfigId { get; set; } + /// + /// 排序号 + /// + public int? TaxisNo { get; set; } + /// /// 备注 /// diff --git a/Tiobon.Core.Model/View/Ghre/Ghre_ExamPaper.Dto.View.cs b/Tiobon.Core.Model/View/Ghre/Ghre_ExamPaper.Dto.View.cs index dce492a2..1f1ad2fe 100644 --- a/Tiobon.Core.Model/View/Ghre/Ghre_ExamPaper.Dto.View.cs +++ b/Tiobon.Core.Model/View/Ghre/Ghre_ExamPaper.Dto.View.cs @@ -13,7 +13,7 @@ *│ 此技术信息为本公司机密信息,未经本公司书面同意禁止向第三方披露. │ *│ 作者:SimonHsiao │ *└──────────────────────────────────┘ -*/ +*/ namespace Tiobon.Core.Model.Models { @@ -23,5 +23,16 @@ namespace Tiobon.Core.Model.Models /// public class Ghre_ExamPaperDto : Ghre_ExamPaper { + + + /// + /// 创建信息 + /// + public string CreateDataInfo { get; set; } + + /// + /// 修改信息 + /// + public string UpdateDataInfo { get; set; } } } diff --git a/Tiobon.Core.Model/View/Ghre/Ghre_Question.Dto.View.cs b/Tiobon.Core.Model/View/Ghre/Ghre_Question.Dto.View.cs index 057bf21b..d0fd45a5 100644 --- a/Tiobon.Core.Model/View/Ghre/Ghre_Question.Dto.View.cs +++ b/Tiobon.Core.Model/View/Ghre/Ghre_Question.Dto.View.cs @@ -45,5 +45,16 @@ namespace Tiobon.Core.Model.Models /// 题目类型 /// public string QuestionTypeLabel { get; set; } + + + /// + /// 创建信息 + /// + public string CreateDataInfo { get; set; } + + /// + /// 修改信息 + /// + public string UpdateDataInfo { get; set; } } } diff --git a/Tiobon.Core.Model/ViewModels/Extend/FromGhre_QuestionInput.cs b/Tiobon.Core.Model/ViewModels/Extend/FromGhre_QuestionInput.cs index eb032c1c..279b4076 100644 --- a/Tiobon.Core.Model/ViewModels/Extend/FromGhre_QuestionInput.cs +++ b/Tiobon.Core.Model/ViewModels/Extend/FromGhre_QuestionInput.cs @@ -28,6 +28,17 @@ public class FromGhre_QuestionBaseData public List courseID { get; set; } = new List { }; public string questionNo { get; set; } + + /// + /// 创建信息 + /// + public string CreateDataInfo { get; set; } + + /// + /// 修改信息 + /// + public string UpdateDataInfo { get; set; } + } public class FromGhre_QuestionQuestionType { diff --git a/Tiobon.Core.Repository/BASE/BaseRepository.cs b/Tiobon.Core.Repository/BASE/BaseRepository.cs index b448aefa..e36757ce 100644 --- a/Tiobon.Core.Repository/BASE/BaseRepository.cs +++ b/Tiobon.Core.Repository/BASE/BaseRepository.cs @@ -513,7 +513,7 @@ namespace Tiobon.Core.Repository.Base filter.pageSize = 10000; query = query.Where(conditions); var list = await query - .OrderByIF(!string.IsNullOrEmpty(filter.Sorting), filter.Sorting) + .OrderByIF(!string.IsNullOrEmpty(filter.orderBy), filter.orderBy) .ToPageListAsync(filter.pageNum, filter.pageSize, totalCount); return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, list); diff --git a/Tiobon.Core.Services/BASE/BaseServices.cs b/Tiobon.Core.Services/BASE/BaseServices.cs index 5cb56d29..c907d4f3 100644 --- a/Tiobon.Core.Services/BASE/BaseServices.cs +++ b/Tiobon.Core.Services/BASE/BaseServices.cs @@ -1,10 +1,8 @@ using System.Data; using System.Linq.Expressions; -using System.Reflection; using AgileObjects.AgileMapper; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using MySqlX.XDevAPI.Common; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using Tiobon.Core.Common; using Tiobon.Core.Common.DB.Dapper; @@ -15,338 +13,13 @@ using Tiobon.Core.Common.Helper; using Tiobon.Core.Common.UserManager; using Tiobon.Core.DataAccess; using Tiobon.Core.IRepository.Base; +using Tiobon.Core.IServices; using Tiobon.Core.IServices.BASE; using Tiobon.Core.Model; +using Tiobon.Core.Model.Models.RootTkey; namespace Tiobon.Core.Services.BASE; -public class BaseServices : IBaseServices where TEntity : class, new() -{ - public BaseServices(IBaseRepository BaseDal = null) - { - this.BaseDal = BaseDal; - } - - //public IBaseRepository baseDal = new BaseRepository(); - public IBaseRepository BaseDal { get; set; } //通过在子类的构造函数中注入,这里是基类,不用构造函数 - - public ISqlSugarClient Db => BaseDal.Db; - - public async Task QueryById(object objId) - { - return await BaseDal.QueryById(objId); - } - - /// - /// 根据ID查询一条数据 - /// - /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 是否使用缓存 - /// 数据实体 - public async Task QueryById(object objId, bool blnUseCache = false) - { - return await BaseDal.QueryById(objId, blnUseCache); - } - - /// - /// 根据ID查询数据 - /// - /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 数据实体列表 - public async Task> QueryByIDs(object[] lstIds) - { - return await BaseDal.QueryByIDs(lstIds); - } - - /// - /// 写入实体数据 - /// - /// 博文实体类 - /// - public async Task Add(TEntity entity) - { - return await BaseDal.Add(entity); - } - - /// - /// 批量插入实体(速度快) - /// - /// 实体集合 - /// 影响行数 - public async Task> Add(List listEntity) - { - return await BaseDal.Add(listEntity); - } - - /// - /// 更新实体数据 - /// - /// 博文实体类 - /// - public async Task Update(TEntity entity) - { - return await BaseDal.Update(entity); - } - /// - /// 更新实体数据 - /// - /// 博文实体类 - /// - public async Task Update(List entity) - { - return await BaseDal.Update(entity); - } - - public async Task Update(TEntity entity, string where) - { - return await BaseDal.Update(entity, where); - } - - public async Task Update(object operateAnonymousObjects) - { - return await BaseDal.Update(operateAnonymousObjects); - } - - public async Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = "") - { - return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, where); - } - - - /// - /// 根据实体删除一条数据 - /// - /// 博文实体类 - /// - public async Task Delete(TEntity entity) - { - return await BaseDal.Delete(entity); - } - - /// - /// 删除指定ID的数据 - /// - /// 主键ID - /// - public async Task DeleteById(object id) - { - return await BaseDal.DeleteById(id); - } - - /// - /// 删除指定ID集合的数据(批量删除) - /// - /// 主键ID集合 - /// - public async Task DeleteByIds(object[] ids) - { - return await BaseDal.DeleteByIds(ids); - } - - - /// - /// 查询所有数据 - /// - /// 数据列表 - public async Task> Query() - { - return await BaseDal.Query(); - } - - /// - /// 查询数据列表 - /// - /// 条件 - /// 数据列表 - public async Task> Query(string where) - { - return await BaseDal.Query(where); - } - - /// - /// 查询数据列表 - /// - /// whereExpression - /// 数据列表 - public async Task> Query(Expression> whereExpression) - { - return await BaseDal.Query(whereExpression); - } - - /// - /// 按照特定列查询数据列表 - /// - /// - /// - /// - public async Task> Query(Expression> expression) - { - return await BaseDal.Query(expression); - } - - /// - /// 按照特定列查询数据列表带条件排序 - /// - /// - /// 过滤条件 - /// 查询实体条件 - /// 排序条件 - /// - public async Task> Query(Expression> expression, Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(expression, whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件表达式 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) - { - return await BaseDal.Query(whereExpression, orderByExpression, isAsc); - } - - public async Task> Query(Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, string orderByFileds) - { - return await BaseDal.Query(where, orderByFileds); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// 泛型集合 - public async Task> QuerySql(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QuerySql(sql, parameters); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// DataTable - public async Task QueryTable(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QueryTable(sql, parameters); - } - - /// - /// 查询前N条数据 - /// - /// 条件表达式 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int top, string orderByFileds) - { - return await BaseDal.Query(whereExpression, top, orderByFileds); - } - - /// - /// 查询前N条数据 - /// - /// 条件 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int top, string orderByFileds) - { - return await BaseDal.Query(where, top, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件表达式 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(whereExpression, pageIndex, pageSize, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(where, pageIndex, pageSize, orderByFileds); - } - - public async Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFileds = null) - { - return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds); - } - public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() - { - return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); - } - - public async Task> QueryPage(PaginationModel pagination) - { - var express = DynamicLinqFactory.CreateLambda(pagination.Conditions); - return await QueryPage(express, pagination.PageIndex, pagination.PageSize, pagination.OrderByFileds); - } - - #region 分表 - - public async Task> AddSplit(TEntity entity) - { - return await BaseDal.AddSplit(entity); - } - - public async Task UpdateSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.UpdateSplit(entity, dateTime); - } - - /// - /// 根据实体删除一条数据 - /// - /// 博文实体类 - /// - public async Task DeleteSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.DeleteSplit(entity, dateTime); - } - - public async Task QueryByIdSplit(object objId) - { - return await BaseDal.QueryByIdSplit(objId); - } - - public async Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null) - { - return await BaseDal.QueryPageSplit(whereExpression, beginTime, endTime, pageIndex, pageSize, orderByFields); - } - - #endregion -} - - /// /// 增删改查基础服务 /// @@ -380,7 +53,50 @@ public class BaseServices : IBaseServ public async Task QueryById(object objId) { var data = await BaseDal.QueryById(objId); - return Mapper.Map(data).ToANew(); + var dto = Mapper.Map(data).ToANew(); + + #region 系统信息 + var getType = typeof(TEntityDto).GetProperties(); + if (getType.Any(p => p.Name == "CreateDataInfo") && getType.Any(p => p.Name == "UpdateDataInfo")) + { + + var userIds = new List(); + var CreateDataInfo = getType.Where(p => p.Name == "CreateDataInfo").FirstOrDefault(); + var UpdateDataInfo = getType.Where(p => p.Name == "UpdateDataInfo").FirstOrDefault(); + var CreateBy = getType.Where(p => p.Name == "CreateBy").FirstOrDefault(); + var UpdateBy = getType.Where(p => p.Name == "UpdateBy").FirstOrDefault(); + var CreateTime = getType.Where(p => p.Name == "CreateTime").FirstOrDefault(); + var UpdateTime = getType.Where(p => p.Name == "UpdateTime").FirstOrDefault(); + var createBy = CreateBy.GetValue(dto, null); + var updateBy = UpdateBy.GetValue(dto, null); + DateTime? createTime = CreateTime.GetValue(dto, null) != null ? Convert.ToDateTime(CreateTime.GetValue(dto, null)) : null; + DateTime? updateTime = UpdateTime.GetValue(dto, null) != null ? Convert.ToDateTime(UpdateTime.GetValue(dto, null)) : null; + if (createBy != null) + { + var dt = await Db.Ado.GetDataTableAsync($"SELECT UserId, UserName FROM Ghrs_User WHERE UserId='{createBy}'"); + if (dt.Rows.Count > 0) + CreateDataInfo.SetValue(dto, $"创建信息 {dt.Rows[0]["UserName"]} 于 {(createTime != null ? createTime.Value.ToString(@"yyyy\/MM\/dd HH:mm") : null)} 创建"); + + } + if (updateBy != null) + { + var dt = await Db.Ado.GetDataTableAsync($"SELECT UserId, UserName FROM Ghrs_User WHERE UserId='{updateBy}'"); + UpdateDataInfo.SetValue(dto, $"修改信息 {dt.Rows[0]["UserName"]} 于 {(updateTime != null ? updateTime.Value.ToString(@"yyyy\/MM\/dd HH:mm") : null)} 最后修改"); + } + } + //if (exampaper.CreateBy != null) + // userIds.Add(Convert.ToInt32(exampaper.CreateBy.Value)); + //if (exampaper.UpdateBy != null) + // userIds.Add(Convert.ToInt32(exampaper.UpdateBy.Value)); + //var users = await _ghrs_UserServices.Query(x => userIds.Contains(x.UserId)); + //if (exampaper.CreateBy != null) + // input.CreateDataInfo = + //if (exampaper.UpdateBy != null) + // input.CreateDataInfo = ; + #endregion + + + return dto; } /// @@ -879,7 +595,7 @@ public class BaseServices : IBaseServ /// protected void ConvertTEditDto2TEntity(TEditDto source, TEntity dest) { - foreach (PropertyInfo mItem in typeof(TEditDto).GetProperties()) + foreach (System.Reflection.PropertyInfo mItem in typeof(TEditDto).GetProperties()) { if (dest.HasField(mItem.Name)) dest.SetValueForField(mItem.Name, mItem.GetValue(source, null)); @@ -926,7 +642,7 @@ public class BaseServices : IBaseServ entity.GetOnlyList(out names, out values, out descriptions); for (int i = 0; i < names.Count; i++) { - CheckCodeExist(tableName, names[i], values[i], id != null ? ModifyType.Edit : ModifyType.Add, descriptions[i]); + CheckCodeExist(tableName, names[i], values[i], id != null ? ModifyType.Edit : ModifyType.Add, descriptions[i], id); } } /// diff --git a/Tiobon.Core.Services/BASE/BaseServices1.cs b/Tiobon.Core.Services/BASE/BaseServices1.cs new file mode 100644 index 00000000..f8bab0dc --- /dev/null +++ b/Tiobon.Core.Services/BASE/BaseServices1.cs @@ -0,0 +1,336 @@ +using System.Data; +using System.Linq.Expressions; +using SqlSugar; +using Tiobon.Core.Common.Helper; +using Tiobon.Core.IRepository.Base; +using Tiobon.Core.IServices.BASE; +using Tiobon.Core.Model; + +namespace Tiobon.Core.Services.BASE; + +public class BaseServices : IBaseServices where TEntity : class, new() +{ + public BaseServices(IBaseRepository BaseDal = null) + { + this.BaseDal = BaseDal; + } + + //public IBaseRepository baseDal = new BaseRepository(); + public IBaseRepository BaseDal { get; set; } //通过在子类的构造函数中注入,这里是基类,不用构造函数 + + public ISqlSugarClient Db => BaseDal.Db; + + public async Task QueryById(object objId) + { + return await BaseDal.QueryById(objId); + } + + /// + /// 根据ID查询一条数据 + /// + /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 是否使用缓存 + /// 数据实体 + public async Task QueryById(object objId, bool blnUseCache = false) + { + return await BaseDal.QueryById(objId, blnUseCache); + } + + /// + /// 根据ID查询数据 + /// + /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 数据实体列表 + public async Task> QueryByIDs(object[] lstIds) + { + return await BaseDal.QueryByIDs(lstIds); + } + + /// + /// 写入实体数据 + /// + /// 博文实体类 + /// + public async Task Add(TEntity entity) + { + return await BaseDal.Add(entity); + } + + /// + /// 批量插入实体(速度快) + /// + /// 实体集合 + /// 影响行数 + public async Task> Add(List listEntity) + { + return await BaseDal.Add(listEntity); + } + + /// + /// 更新实体数据 + /// + /// 博文实体类 + /// + public async Task Update(TEntity entity) + { + return await BaseDal.Update(entity); + } + /// + /// 更新实体数据 + /// + /// 博文实体类 + /// + public async Task Update(List entity) + { + return await BaseDal.Update(entity); + } + + public async Task Update(TEntity entity, string where) + { + return await BaseDal.Update(entity, where); + } + + public async Task Update(object operateAnonymousObjects) + { + return await BaseDal.Update(operateAnonymousObjects); + } + + public async Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = "") + { + return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, where); + } + + + /// + /// 根据实体删除一条数据 + /// + /// 博文实体类 + /// + public async Task Delete(TEntity entity) + { + return await BaseDal.Delete(entity); + } + + /// + /// 删除指定ID的数据 + /// + /// 主键ID + /// + public async Task DeleteById(object id) + { + return await BaseDal.DeleteById(id); + } + + /// + /// 删除指定ID集合的数据(批量删除) + /// + /// 主键ID集合 + /// + public async Task DeleteByIds(object[] ids) + { + return await BaseDal.DeleteByIds(ids); + } + + + /// + /// 查询所有数据 + /// + /// 数据列表 + public async Task> Query() + { + return await BaseDal.Query(); + } + + /// + /// 查询数据列表 + /// + /// 条件 + /// 数据列表 + public async Task> Query(string where) + { + return await BaseDal.Query(where); + } + + /// + /// 查询数据列表 + /// + /// whereExpression + /// 数据列表 + public async Task> Query(Expression> whereExpression) + { + return await BaseDal.Query(whereExpression); + } + + /// + /// 按照特定列查询数据列表 + /// + /// + /// + /// + public async Task> Query(Expression> expression) + { + return await BaseDal.Query(expression); + } + + /// + /// 按照特定列查询数据列表带条件排序 + /// + /// + /// 过滤条件 + /// 查询实体条件 + /// 排序条件 + /// + public async Task> Query(Expression> expression, Expression> whereExpression, string orderByFileds) + { + return await BaseDal.Query(expression, whereExpression, orderByFileds); + } + + /// + /// 查询一个列表 + /// + /// 条件表达式 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) + { + return await BaseDal.Query(whereExpression, orderByExpression, isAsc); + } + + public async Task> Query(Expression> whereExpression, string orderByFileds) + { + return await BaseDal.Query(whereExpression, orderByFileds); + } + + /// + /// 查询一个列表 + /// + /// 条件 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(string where, string orderByFileds) + { + return await BaseDal.Query(where, orderByFileds); + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// 泛型集合 + public async Task> QuerySql(string sql, SugarParameter[] parameters = null) + { + return await BaseDal.QuerySql(sql, parameters); + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// DataTable + public async Task QueryTable(string sql, SugarParameter[] parameters = null) + { + return await BaseDal.QueryTable(sql, parameters); + } + + /// + /// 查询前N条数据 + /// + /// 条件表达式 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, int top, string orderByFileds) + { + return await BaseDal.Query(whereExpression, top, orderByFileds); + } + + /// + /// 查询前N条数据 + /// + /// 条件 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(string where, int top, string orderByFileds) + { + return await BaseDal.Query(where, top, orderByFileds); + } + + /// + /// 分页查询 + /// + /// 条件表达式 + /// 页码(下标0) + /// 页大小 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, int pageIndex, int pageSize, string orderByFileds) + { + return await BaseDal.Query(whereExpression, pageIndex, pageSize, orderByFileds); + } + + /// + /// 分页查询 + /// + /// 条件 + /// 页码(下标0) + /// 页大小 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(string where, int pageIndex, int pageSize, string orderByFileds) + { + return await BaseDal.Query(where, pageIndex, pageSize, orderByFileds); + } + + public async Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFileds = null) + { + return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds); + } + public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() + { + return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); + } + + public async Task> QueryPage(PaginationModel pagination) + { + var express = DynamicLinqFactory.CreateLambda(pagination.Conditions); + return await QueryPage(express, pagination.PageIndex, pagination.PageSize, pagination.OrderByFileds); + } + + #region 分表 + + public async Task> AddSplit(TEntity entity) + { + return await BaseDal.AddSplit(entity); + } + + public async Task UpdateSplit(TEntity entity, DateTime dateTime) + { + return await BaseDal.UpdateSplit(entity, dateTime); + } + + /// + /// 根据实体删除一条数据 + /// + /// 博文实体类 + /// + public async Task DeleteSplit(TEntity entity, DateTime dateTime) + { + return await BaseDal.DeleteSplit(entity, dateTime); + } + + public async Task QueryByIdSplit(object objId) + { + return await BaseDal.QueryByIdSplit(objId); + } + + public async Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null) + { + return await BaseDal.QueryPageSplit(whereExpression, beginTime, endTime, pageIndex, pageSize, orderByFields); + } + + #endregion +} + \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghre/Ghre_ExamPaperServices.cs b/Tiobon.Core.Services/Ghre/Ghre_ExamPaperServices.cs index 0b1d056b..3b9d3d1a 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_ExamPaperServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_ExamPaperServices.cs @@ -303,28 +303,17 @@ namespace Tiobon.Core.Services baseData.CourseId = exampaper.LinkId; baseData.CourseSceneId = exampaper.LinkId; input.pageData.baseData = baseData; - - #region 系统信息 - var userIds = new List(); - if (exampaper.CreateBy != null) - userIds.Add(Convert.ToInt32(exampaper.CreateBy.Value)); - if (exampaper.UpdateBy != null) - userIds.Add(Convert.ToInt32(exampaper.UpdateBy.Value)); - var users = await _ghrs_UserServices.Query(x => userIds.Contains(x.UserId)); - if (exampaper.CreateBy != null) - input.CreateDataInfo = $"创建信息 {users.FirstOrDefault(x => x.UserId == exampaper.CreateBy)?.UserName} 于 {(exampaper.CreateTime != null ? exampaper.CreateTime.Value.ToString(@"yyyy\/MM\/dd HH:mm") : null)} 创建"; - if (exampaper.UpdateBy != null) - input.CreateDataInfo = $"修改信息 {users.FirstOrDefault(x => x.UserId == exampaper.UpdateBy)?.UserName} 于 {(exampaper.UpdateTime != null ? exampaper.UpdateTime.Value.ToString(@"yyyy\/MM\/dd HH:mm") : null)} 最后修改"; - #endregion + input.CreateDataInfo = exampaper.CreateDataInfo; + input.UpdateDataInfo = exampaper.UpdateDataInfo; input.pageData.styleInfo.coverImage = exampaper.CoverUrl; input.pageData.styleInfo.paperStyle = exampaper.Style; input.pageData.examPaperSetType = exampaper.SetMethod; - input.pageData.examPaperSetData = await _ghre_ExamPaperConfigServices.Query(x => x.ExamPaperId == Id); + input.pageData.examPaperSetData = await _ghre_ExamPaperConfigServices.Query(x => x.ExamPaperId == Id, "TaxisNo ASC"); - var questions = await _ghre_ExamPaperQuestionServices.Query(x => x.ExamPaperId == Id); + var questions = await _ghre_ExamPaperQuestionServices.Query(x => x.ExamPaperId == Id, "TaxisNo ASC"); var previews = questions.Where(x => x.QuestionId != null).Select(x => new DefaultGhre_ExamPaperPreview() { Id = x.Id, @@ -367,9 +356,11 @@ namespace Tiobon.Core.Services //}); var detail = new FromGhre_QuestionQuestionTypeDetail(); + detail.content = x.QuestionContent; + detail.difficulty = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.DifficultyLevel; detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); - detail.answerList = answers.Select(x => new FromGhre_QuestionQuestionAnswerList() + detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList() { No = x.QuestionNo, label = x.AnswerContent, @@ -460,10 +451,61 @@ namespace Tiobon.Core.Services insert.LinkId = insertModel.baseData.LinkType == "CourseId" ? insertModel.baseData.CourseId : insertModel.baseData.CourseSceneId; insert.CoverUrl = insertModel.styleInfo.coverImage; insert.Style = insertModel.styleInfo.paperStyle; - insert.ScoreMethod = insertModel.examPaperSetType; + insert.SetMethod = insertModel.examPaperSetType; insert.Status = "Draft"; var id = await Add(insert); + + + var configs = Mapper.Map(insertModel.examPaperSetData).ToANew>(); + configs.ForEach(x => x.ExamPaperId = id); + var insertConfigs = Db.Insertable(configs); + + string sql = insertConfigs.ToSqlString(); + long row = await Db.Ado.ExecuteCommandAsync(sql); + + var questions = insertModel.previewList + .Select(x => + new InsertGhre_ExamPaperQuestionInput + { + ExamPaperId = id, + QuestionId = x.QuestionId, + ConfigId = x.parentId, + }).ToList(); + await _ghre_ExamPaperQuestionServices.Add(questions); + + await Db.Ado.CommitTranAsync(); + return ServiceResult.OprateSuccess("新增成功!", id); + } + catch (Exception) + { + await Db.Ado.RollbackTranAsync(); + throw; + } + + } + + public async Task Update1(long id, DefaultGhre_ExamPaperPageData insertModel) + { + await Db.Ado.BeginTranAsync(); + + try + { + + Db.Ado.ExecuteCommand($@"delete from Ghre_ExamPaperConfig WHERE ExamPaperId='{id}'; +delete from Ghre_ExamPaperQuestion WHERE ExamPaperId='{id}';"); + + var insert = new EditGhre_ExamPaperInput(); + + insert = Mapper.Map(insertModel.baseData).ToANew(); + insert.PaperNo = await GenerateContinuousSequence("Ghre_ExamPaper", "PaperNo", "P"); + insert.LinkId = insertModel.baseData.LinkType == "CourseId" ? insertModel.baseData.CourseId : insertModel.baseData.CourseSceneId; + insert.CoverUrl = insertModel.styleInfo.coverImage; + insert.Style = insertModel.styleInfo.paperStyle; + insert.SetMethod = insertModel.examPaperSetType; + insert.Status = "Draft"; + + await Update(id, insert); var configs = Mapper.Map(insertModel.examPaperSetData).ToANew>(); configs.ForEach(x => x.ExamPaperId = id); var insertConfigs = Db.Insertable(configs); @@ -482,7 +524,7 @@ namespace Tiobon.Core.Services await _ghre_ExamPaperQuestionServices.Add(questions); await Db.Ado.CommitTranAsync(); - return ServiceResult.OprateSuccess("保存成功!", id); + return ServiceResult.OprateSuccess("修改成功!"); } catch (Exception) { @@ -491,5 +533,22 @@ namespace Tiobon.Core.Services } } + + + public static string ConvertQuestionType(string type) + { + string questionTypeName = string.Empty; + if (type == "Single") + questionTypeName = "单选题"; + else if (type == "Multiple") + questionTypeName = "多选题"; + else if (type == "TrueOrFalse") + questionTypeName = "判断题"; + else if (type == "Completion") + questionTypeName = "填空题"; + else if (type == "ShortAnswer") + questionTypeName = "简答题"; + return questionTypeName; + } } } \ No newline at end of file diff --git a/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs b/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs index 109a4859..c1c1dc0f 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs @@ -41,6 +41,9 @@ public class Ghre_QuestionServices : BaseServices totalCount = 0; var query = Db.Queryable(); + if (string.IsNullOrWhiteSpace(filter.orderBy)) + filter.orderBy = "CreateTime DESC"; + string conditions = "1=1"; if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) @@ -120,7 +123,7 @@ public class Ghre_QuestionServices : BaseServices(filter.pageNum, totalCount, filter.pageSize, list); @@ -184,6 +187,7 @@ public class Ghre_QuestionServices : BaseServices { @@ -209,10 +213,12 @@ public class Ghre_QuestionServices : BaseServices @@ -252,12 +258,31 @@ public class Ghre_QuestionServices : BaseServices + { + new FromGhre_QuestionQuestionAnswerList() + { + No = "A", + } + } + } }, new FromGhre_QuestionQuestionType() { label = "简答题", type = "ShortAnswer", isActive = 0, + detail = new FromGhre_QuestionQuestionTypeDetail() + { + answerList= new List(), + answer1 = new List + { + "" + } + } } }; @@ -267,6 +292,8 @@ public class Ghre_QuestionServices : BaseServices x.isActive = 0); data.PageData.baseData.questionNo = question.QuestionNo; data.PageData.baseData.courseID.Add(question.CourseId); + data.PageData.baseData.CreateDataInfo = question.CreateDataInfo; + data.PageData.baseData.UpdateDataInfo = question.UpdateDataInfo; var questionType = data.PageData.questionType.Where(x => x.type == question.QuestionType).FirstOrDefault(); if (questionType != null) @@ -622,6 +649,9 @@ public class Ghre_QuestionServices : BaseServices + + + 排序号 + + 备注 @@ -2456,6 +2461,11 @@ 试卷配置ID + + + 排序号 + + 备注 @@ -3744,6 +3754,16 @@ 附件(Dto.View) + + + 创建信息 + + + + + 修改信息 + + Ghre_Course(Dto.View) @@ -3764,6 +3784,16 @@ 试卷(Dto.View) + + + 创建信息 + + + + + 修改信息 + + 试卷配置(Dto.View) @@ -3794,6 +3824,16 @@ 题目类型 + + + 创建信息 + + + + + 修改信息 + + 题目答案(Dto.View) @@ -4977,5 +5017,15 @@ 试卷配置ID + + + 创建信息 + + + + + 修改信息 + + diff --git a/Tiobon.Core/Tiobon.Core.xml b/Tiobon.Core/Tiobon.Core.xml index 43addf3c..c7a1b9bd 100644 --- a/Tiobon.Core/Tiobon.Core.xml +++ b/Tiobon.Core/Tiobon.Core.xml @@ -662,6 +662,14 @@ + + + 更新 + + + + + 新增配置数据