Пример #1
0
        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, "问题变化序号失败"));
        }