public async Task <IActionResult> ChangeQuestionSortAsync([FromBody] ChangeQuestionSortRequestDto requestDto) { var biz = new QuestionnaireQuestionBiz(); var model = await biz.GetAsync(requestDto.QuestionGuid); if (model == null) { return(Failed(ErrorCode.UserData, "未找到此问题")); } var newSort = requestDto.Sort; if (model.Sort == newSort) { return(Failed(ErrorCode.UserData, "问题序号未产生变化,请核对")); } if (model.IsDepend) { var dependQuestionModel = await biz.GetAsync(model.DependQuestion); if (dependQuestionModel == null) { return(Failed(ErrorCode.UserData, "当前问题的依赖数据异常")); } if (newSort <= dependQuestionModel.Sort) { return(Failed(ErrorCode.UserData, $"当前问题的序号不能先于其依赖问题[第{dependQuestionModel.Sort}题]")); } } //查询依赖当前问题的题目列表 var dependModels = await biz.GetModelsByDependQuestionGuidAsync(model.QuestionGuid); if (dependModels.Any()) { var minSortModel = dependModels.OrderBy(a => a.Sort).FirstOrDefault(); if (minSortModel.Sort <= newSort) { return(Failed(ErrorCode.UserData, $"第{minSortModel.Sort}题依赖当前题目,移动序号不能大于{minSortModel.Sort}")); } } // 一.其他问题为待变化问题顺次移动位置 // 1.若向前移动,则原序号和新序号之间所有问题序号+1 (不包括待变化问题) // 2.若向后移动,则原序号和新序号之间所有问题序号-1 (不包括待变化问题) // 二.将待变化问题序号变为新序号 var result = await biz.ChangeQuestionSortAsync(model, newSort, UserID); return(result ? Success() : Failed(ErrorCode.DataBaseError, "问题变化序号失败")); }