Пример #1
0
        public IActionResult Update(Guid id)
        {
            var metaObject = _metaFieldService.GetById(id);

            return(View(ResponseModel.Success(data: metaObject)));
        }
        //组织接口搜索条件
        public Result <SearchConditionNode> AggregateCondition(int interfaceConditionId, int brotherNodeId, int conditionJointTypeId, int fieldId, int conditionTypeId, string conditionValue, int conditionValueTypeId)
        {
            //如果不是参数传递值,则根据传入的字段校验数据
            if (conditionValueTypeId != (int)ConditionValueType.Parameter)
            {
                if (!metaFieldService.CheckAndGetFieldValueByFieldType(fieldId, conditionValue).IsSuccess)
                {
                    return(Result <SearchConditionNode> .Error("字段值和字段定义的类型不匹配"));
                }
            }

            return(TransactionHelper.Transaction(() =>
            {
                int parentId = brotherNodeId;
                //如果兄弟节点!=-1,说明当前树有值。反之,则构建新树
                if (parentId != -1)
                {
                    //判断是否有树存在
                    List <SearchConditionNode> conditionListExist = GetListBySearchConditionId(interfaceConditionId);
                    //查看当前兄弟节点的父节点id
                    SearchConditionNode brotherCondition = conditionListExist.FirstOrDefault(t => t.Id == brotherNodeId);
                    parentId = brotherCondition.ParentId;
                    //拿到父节点的信息
                    SearchConditionNode parentCondition = conditionListExist.FirstOrDefault(t => t.Id == brotherCondition.ParentId);
                    //如果父节点的连接条件和当前新建的条件一致,则不需要新建条件节点,直接附加在已有的条件下面
                    if (parentCondition == null || parentCondition.ConditionType != conditionJointTypeId)
                    {
                        //先添加一个父节点,然后把兄弟节点的父节点指向新建的父节点
                        string tempKey = DateTime.Now.ToString("yyyyMMddhhmmss");
                        SearchConditionNode newParentCondition = new SearchConditionNode
                        {
                            SearchConditionId = interfaceConditionId,
                            ParentId = conditionListExist.Count > 0 ? parentId : -1, //如果有树,则插入节点的父节点为刚才的兄弟节点的父节点,否则,插入-1作为根节点
                            FieldId = -1,                                            //连接节点没有field
                            FieldCode = "-1",
                            FieldName = tempKey,
                            FieldType = -1,
                            ConditionType = conditionJointTypeId,
                            Name = ConditionJointTranslator.ToLabelWithExplain(conditionJointTypeId),
                            Value = "-1",
                            ValueType = -1
                        };
                        base.Add(newParentCondition);
                        //查询刚才插入的节点
                        newParentCondition = dbContext.Queryable <SearchConditionNode>().Where(t => t.FieldName.Contains(tempKey)).ToOne();

                        //将兄弟节点的父节点指向新插入的节点
                        brotherCondition.ParentId = newParentCondition.Id;
                        base.Update(brotherCondition);

                        //重新赋值parentId
                        parentId = newParentCondition.Id;
                    }
                }
                //检验是否没有条件节点
                if (parentId == -1)
                {
                    if (dbContext.Queryable <SearchConditionNode>().Where(t => t.Id == parentId).Any())
                    {
                        return Result <SearchConditionNode> .Error("已经存在条件节点,请查证后操作!");
                    }
                }
                //新增节点
                MetaField metaField = metaFieldService.GetById(fieldId);
                SearchConditionNode newCondition = new SearchConditionNode
                {
                    SearchConditionId = interfaceConditionId,
                    ParentId = parentId,
                    FieldId = fieldId,
                    FieldName = metaField.Name,
                    FieldCode = metaField.Code,
                    FieldType = metaField.FieldType,
                    ConditionType = conditionTypeId,
                    Name = $"{metaField.Name} {ConditionTypeTranslator.ToLabel(conditionTypeId)} {conditionValue}",
                    Value = conditionValue,
                    ValueType = conditionValueTypeId,
                    Text = metaField.Name,
                    Visible = (int)TrueFalse.True
                };
                base.Add(newCondition);

                return Result <SearchConditionNode> .Success("保存成功!");
            }));
        }