namespace Tiobon.Core.Services; /// /// 问卷调查 (服务) /// public class Ghre_SurveyServices : BaseServices, IGhre_SurveyServices { private readonly IBaseRepository _dal; public Ghre_SurveyServices(ICaching caching, IBaseRepository dal) { this._dal = dal; base.BaseDal = dal; base._caching = caching; } public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) { var result = await base.QueryFilterPage(filter, condition, IsEnable); return result; } public override async Task Add(InsertGhre_SurveyInput entity) { var result = await base.Add(entity); return result; } public override async Task Update(long Id, EditGhre_SurveyInput editModel) { var result = await base.Update(Id, editModel, null, ["Status"]); return result; } public override async Task> QueryForm(QueryForm body) { var result = await base.QueryForm(body); return result; } public async Task> QueryData(long id) { var entity = await base.QueryById(id); var data = Mapper.Map(entity).ToANew(); data.BeginEndTime.Add(data.BeginTime); data.BeginEndTime.Add(data.EndTime); if (entity.StaffId.IsNotEmptyOrNull()) data.StaffIds = JsonHelper.JsonToObj>(entity.StaffId); if (entity.DeptId.IsNotEmptyOrNull()) data.DeptIds = JsonHelper.JsonToObj>(entity.DeptId); var questions = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); var options = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); data.Questions = Mapper.Map(questions).ToANew>(); data.Questions.ForEach(x => { x.Options = Mapper.Map(options.Where(o => o.SurveyQuestionId == x.Id)).ToANew>(); }); return ServiceResult.OprateSuccess("成功", data); } public async Task> InsertByStatus(InsertGhre_SurveyInput insertModel, string status) { var data = ServiceResult.OprateSuccess("新增成功", 0); insertModel.Status = status; var id = await Add(insertModel); data.Success = id > 0; if (data.Success) data.Data = id; else return ServiceResult.OprateFailed("失败!"); return data; } public async Task UpdateStatus(InsertGhre_SurveyInput input, string status) { HttpRequest request = UserContext.Context.Request; var api = request.Path.ObjToString().TrimEnd('/').ToLower(); var ip = GetUserIp(UserContext.Context); var entities = new List(); foreach (var id in input.Ids) { if (!BaseDal.Any(id)) continue; var entity = await BaseDal.QueryById(id); entity.UpdateIP = ip; entity.UpdateProg = api; entity.Status = status; entities.Add(entity); } var result = await BaseDal.Update(entities); return ServiceResult.OprateSuccess("执行成功!"); } public async Task> InsertData(long id, InsertGhre_SurveyExtend insertModel) { if (insertModel.BeginEndTime != null && insertModel.BeginEndTime.Count == 2) { insertModel.BeginTime = insertModel.BeginEndTime[0]; insertModel.EndTime = insertModel.BeginEndTime[1]; } var data = ServiceResult.OprateSuccess("新增成功", id); if (id == 0) { var insert = Mapper.Map(insertModel).ToANew(); insert.Status = "Temporary"; if (insertModel.StaffIds != null && insertModel.StaffIds.Any()) insert.StaffId = JsonHelper.ObjToJson(insertModel.StaffIds); if (insertModel.DeptIds != null && insertModel.DeptIds.Any()) insert.DeptId = JsonHelper.ObjToJson(insertModel.DeptIds); id = await Add(insert); for (int i = 0; i < insertModel.Questions.Count; i++) { var question = Mapper.Map(insertModel.Questions[i]).ToANew(); //question.Id = SnowFlakeSingle.instance.getID(); question.SurveyId = id; question.SortNo = i; var questionId = await Db.Insertable(question).ExecuteReturnSnowflakeIdAsync(); for (int j = 0; j < insertModel.Questions[i].Options.Count; j++) { var option = Mapper.Map(insertModel.Questions[i].Options[j]).ToANew(); option.SurveyId = id; option.SurveyQuestionId = questionId; option.SortNo = j; await Db.Insertable(option).ExecuteReturnSnowflakeIdAsync(); } } data.Data = id; } else { await Db.Deleteable().Where(x => x.SurveyId == id).ExecuteCommandAsync(); await Db.Deleteable().Where(x => x.SurveyId == id).ExecuteCommandAsync(); var insert = Mapper.Map(insertModel).ToANew(); if (insertModel.StaffIds != null && insertModel.StaffIds.Any()) insert.StaffId = JsonHelper.ObjToJson(insertModel.StaffIds); if (insertModel.DeptIds != null && insertModel.DeptIds.Any()) insert.DeptId = JsonHelper.ObjToJson(insertModel.DeptIds); await Update(id, insert, null, ["Status"]); for (int i = 0; i < insertModel.Questions.Count; i++) { var question = Mapper.Map(insertModel.Questions[i]).ToANew(); //question.Id = SnowFlakeSingle.instance.getID(); question.SurveyId = id; var questionId = await Db.Insertable(question).ExecuteReturnSnowflakeIdAsync(); for (int j = 0; j < insertModel.Questions[i].Options.Count; j++) { var option = Mapper.Map(insertModel.Questions[i].Options[j]).ToANew(); option.SurveyId = id; option.SurveyQuestionId = questionId; await Db.Insertable(option).ExecuteReturnSnowflakeIdAsync(); } } data.Message = "修改成功!"; } return data; } public async Task> QueryESSData(long id) { var entity = await base.QueryById(id); var data = Mapper.Map(entity).ToANew(); data.BeginEndTime.Add(data.BeginTime); data.BeginEndTime.Add(data.EndTime); if (entity.StaffId.IsNotEmptyOrNull()) data.StaffIds = JsonHelper.JsonToObj>(entity.StaffId); if (entity.DeptId.IsNotEmptyOrNull()) data.DeptIds = JsonHelper.JsonToObj>(entity.DeptId); var questions = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); var options = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); data.Questions = Mapper.Map(questions).ToANew>(); data.Questions.ForEach(x => { x.Options = Mapper.Map(options.Where(o => o.SurveyQuestionId == x.Id)).ToANew>(); }); #region 是否存在已提交问卷数据 data.IsSubmit = await Db.Queryable().Where(x => x.StaffId == App.User.StaffId && x.SurveyId == id).AnyAsync(); #endregion return ServiceResult.OprateSuccess("成功", data); } public async Task> SubmitESSData(long id) { var entity = await base.QueryById(id); var data = Mapper.Map(entity).ToANew(); data.BeginEndTime.Add(data.BeginTime); data.BeginEndTime.Add(data.EndTime); if (entity.StaffId.IsNotEmptyOrNull()) data.StaffIds = JsonHelper.JsonToObj>(entity.StaffId); if (entity.DeptId.IsNotEmptyOrNull()) data.DeptIds = JsonHelper.JsonToObj>(entity.DeptId); var questions = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); var options = await Db.Queryable().OrderBy(x => x.SortNo).Where(x => x.SurveyId == id).ToListAsync(); data.Questions = Mapper.Map(questions).ToANew>(); data.Questions.ForEach(x => { x.Options = Mapper.Map(options.Where(o => o.SurveyQuestionId == x.Id)).ToANew>(); }); return ServiceResult.OprateSuccess("成功", data); } }