Example #1
0
        public AlgorithmRespDTO GetAlgorithmByCode(String code, bool hasMeta)
        {
            // single,如果找不到实体,则抛出异常
            DmeAlgorithm     alg          = base.Repository.GetDbContext().Queryable <DmeAlgorithm>().Single(a => a.SysCode == code);
            AlgorithmRespDTO algorithmDTO = ClassValueCopier <AlgorithmRespDTO> .Copy(alg);

            IList <DmeAlgorithmMeta> metas = base.Repository.GetDbContext().Queryable <DmeAlgorithmMeta>().Where(meta => meta.AlgorithmId == alg.Id).ToList();

            if (metas?.Count > 0)
            {
                foreach (var item in metas)
                {
                    EnumValueMetaType enumValueMetaType = EnumUtil.GetEnumObjByName <EnumValueMetaType>(item.DataType);
                    algorithmDTO.Metas.Add(new AlgorithmMetaDTO()
                    {
                        Name         = item.Name,
                        DataType     = (int)enumValueMetaType,
                        DataTypeCode = item.DataType,
                        DataTypeDesc = EnumUtil.GetEnumDescription(enumValueMetaType),
                        Inout        = item.Inout,
                        AlgorithmId  = item.AlgorithmId,
                        IsVisible    = item.IsVisible,
                        Remark       = item.Remark,
                        Alias        = item.Alias,
                        ReadOnly     = item.ReadOnly,
                        Required     = item.Required
                    });
                }
            }
            return(algorithmDTO);
        }
Example #2
0
        public object ListAlgorithms(bool needMeta)
        {
            var db = base.Repository.GetDbContext();
            List <DmeAlgorithm> algs = db.Queryable <DmeAlgorithm>().OrderBy(alg => alg.CreateTime, OrderByType.Desc).ToList();

            if (null == algs || 0 == algs.Count)
            {
                return(algs);
            }
            if (needMeta)
            {
                IList <AlgorithmRespDTO> algDTOs      = new List <AlgorithmRespDTO>();
                AlgorithmRespDTO         algorithmDTO = null;
                IList <DmeAlgorithmMeta> metas        = null;
                IList <AlgorithmMetaDTO> metasDTO     = null;
                foreach (var alg in algs)
                {
                    algorithmDTO = ClassValueCopier <AlgorithmRespDTO> .Copy(alg);

                    if (alg.Extension != null && !string.IsNullOrEmpty(alg.Extension.ToString()))
                    {
                        algorithmDTO.Extension = alg.Extension;// JsonConvert.DeserializeObject(.ToString());
                    }
                    algDTOs.Add(algorithmDTO);
                    metas = db.Queryable <DmeAlgorithmMeta>().Where(meta => meta.AlgorithmId == alg.Id).ToList();
                    if (null == metas || 0 == metas.Count)
                    {
                        continue;
                    }
                    metasDTO = new List <AlgorithmMetaDTO>();
                    foreach (var item in metas)
                    {
                        EnumValueMetaType enumValueMetaType = EnumUtil.GetEnumObjByName <EnumValueMetaType>(item.DataType);
                        metasDTO.Add(new AlgorithmMetaDTO()
                        {
                            Name         = item.Name,
                            DataType     = (int)enumValueMetaType,
                            DataTypeCode = item.DataType,
                            DataTypeDesc = EnumUtil.GetEnumDescription(enumValueMetaType),
                            Inout        = item.Inout,
                            AlgorithmId  = item.AlgorithmId,
                            IsVisible    = item.IsVisible,
                            Remark       = item.Remark,
                            Alias        = item.Alias,
                            ReadOnly     = item.ReadOnly,
                            Required     = item.Required
                        });
                    }
                    algorithmDTO.Metas = metasDTO;
                }
                return(algDTOs);
            }
            return(algs);
        }
Example #3
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="name">名称</param>
 /// <param name="alias">别名</param>
 /// <param name="dataType">数据类型</param>
 /// <param name="value">值</param>
 /// <param name="defaultValue">默认值</param>
 /// <param name="remark">备注</param>
 /// <param name="valueSet">值的可选集</param>
 /// <param name="isVisible">是否可见</param>
 /// <param name="readOnly">是否只读</param>
 /// <param name="dataSourceCode">数据源编码</param>
 /// <param name="isNeedPrecursor">是否需要前驱依赖,0和1</param>
 /// <param name="attributeType">属性类别,枚举:EnumAttributeType:一般属性和运行时属性</param>
 public Property(string name, string alias, EnumValueMetaType dataType, object value = null,
                 object defaultValue = null, string remark      = "", object[] valueSet   = null, int isVisible = 1, int readOnly = 0,
                 int required        = 1, string dataSourceCode = "", int isNeedPrecursor = 0, EnumAttributeType attributeType = EnumAttributeType.NORMAL)
 {
     this.Name            = name;
     this.Alias           = alias;
     this.DataType        = (int)dataType;
     this.DataTypeDesc    = EnumUtil.GetEnumDescription(dataType);
     this.DataTypeCode    = EnumUtil.GetEnumName <EnumValueMetaType>(this.DataType);
     this.Value           = value;
     this.DefaultValue    = defaultValue;
     this.ValueSet        = valueSet;
     this.IsVisible       = isVisible;
     this.Remark          = remark;
     this.ReadOnly        = readOnly;
     this.Required        = required;
     this.DataSourceCode  = dataSourceCode;
     this.IsNeedPrecursor = isNeedPrecursor;
     this.Type            = attributeType;
 }
Example #4
0
        /// <summary>
        /// 处理步骤属性信息
        /// </summary>
        /// <param name="db"></param>
        /// <param name="model"></param>
        /// <param name="version"></param>
        /// <param name="subStepAdd"></param>
        /// <param name="step"></param>
        private void HandleAttributes(SqlSugarClient db, DmeModel model, DmeModelVersion version, RuleStepAddDTO subStepAdd, DmeRuleStep step)
        {
            IList <AttributeReqDTO> properties = subStepAdd.Attributes;

            if (properties?.Count == 0)
            {
                LOG.Warn("没有可处理的步骤属性信息");
                return;
            }
            if (Register.RuleStepPluginsMap.ContainsKey(subStepAdd.StepType.Code))
            {
                RuleStepPluginRegisterDTO ruleStepPluginRegisterDTO = Register.RuleStepPluginsMap[subStepAdd.StepType.Code];
                String        baseDir      = AppDomain.CurrentDomain.BaseDirectory;
                string        assemblyPath = Path.Combine(baseDir, ruleStepPluginRegisterDTO.Assembly);
                Assembly      assembly     = Assembly.LoadFile(assemblyPath);
                IRuleStepData ruleStepData = (IRuleStepData)assembly.CreateInstance(ruleStepPluginRegisterDTO.ClassId, true, BindingFlags.CreateInstance, null
                                                                                    , new object[] { Repository, null, step }, null, null);
                if (null == ruleStepData)
                {
                    LOG.Warn($"无法创建步骤实体[{ruleStepPluginRegisterDTO.ClassId}]");
                    return;
                }
                IDictionary <string, Property> attributes = new Dictionary <string, Property>();
                // DmeRuleStepAttribute dmeRuleStepAttribute = null;
                foreach (var p in properties)
                {
                    EnumValueMetaType enumValueMetaType = new EnumValueMetaType();
                    if (string.IsNullOrEmpty(p.DataTypeCode))
                    {
                        enumValueMetaType = EnumValueMetaType.TYPE_UNKNOWN;
                    }
                    else
                    {
                        enumValueMetaType = EnumUtil.GetEnumObjByName <EnumValueMetaType>(p.DataTypeCode);
                    }
                    attributes[p.Name] = new Property(p.Name, p.Name, enumValueMetaType, p.Value,
                                                      null, null, null, 1, 0, 1, p.DataSourceCode, p.IsNeedPrecursor, p.Type);
                }
                ruleStepData.SaveAttributes(attributes);
            }
        }
Example #5
0
        public object AddAlgorithm(AlgorithmAddReqDTO dto)
        {
            DbResult <AlgorithmRespDTO> result = base.Repository.GetDbContext().Ado.UseTran <AlgorithmRespDTO>(() =>
            {
                DmeAlgorithm alg = base.Repository.GetDbContext().Queryable <DmeAlgorithm>().Where(a => a.SysCode == dto.SysCode).First();
                if (null == alg)
                {
                    alg            = ClassValueCopier <DmeAlgorithm> .Copy(dto);
                    alg.CreateTime = DateUtil.CurrentTimeMillis;
                    alg.Extension  = JsonConvert.SerializeObject(dto.Extension);
                    alg.Id         = base.Repository.GetDbContext().Insertable <DmeAlgorithm>(alg).ExecuteReturnIdentity();
                }
                else
                {
                    // 进行更新操作
                    alg.Name      = dto.Name;
                    alg.Alias     = dto.Alias;
                    alg.Version   = dto.Version;
                    alg.Remark    = dto.Remark;
                    alg.Type      = dto.Type;
                    alg.Extension = JsonConvert.SerializeObject(dto.Extension);
                    if (!base.Repository.GetDbContext().Updateable <DmeAlgorithm>().ExecuteCommandHasChange())
                    {
                        throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, "更新算法信息失败,无详情信息。");
                    }
                    if (dto.Metas != null && dto.Metas.Count > 0)
                    {
                        // 删除算法的输入输出参数这些元数据信息,必须ExecuteCommand,否则无效
                        base.Repository.GetDbContext().Deleteable <DmeAlgorithmMeta>().Where(am => am.AlgorithmId == alg.Id).ExecuteCommand();
                    }
                }
                // 重新注册算法参数元数据
                AlgorithmRespDTO algorithmRespDTO = ClassValueCopier <AlgorithmRespDTO> .Copy(alg);
                if (dto.Metas != null && dto.Metas.Count > 0)
                {
                    algorithmRespDTO.Metas = new List <AlgorithmMetaDTO>();
                    DmeAlgorithmMeta meta  = null;
                    foreach (var item in dto.Metas)
                    {
                        meta             = ClassValueCopier <DmeAlgorithmMeta> .Copy(item);
                        meta.AlgorithmId = alg.Id;
                        meta.Id          = base.Repository.GetDbContext().Insertable <DmeAlgorithmMeta>(meta).ExecuteReturnIdentity();
                        EnumValueMetaType enumValueMetaType = EnumUtil.GetEnumObjByName <EnumValueMetaType>(item.DataType);
                        algorithmRespDTO.Metas.Add(new AlgorithmMetaDTO()
                        {
                            Name         = item.Name,
                            DataType     = (int)enumValueMetaType,
                            DataTypeCode = item.DataType,
                            DataTypeDesc = EnumUtil.GetEnumDescription(enumValueMetaType),
                            Inout        = item.Inout,
                            AlgorithmId  = alg.Id,
                            IsVisible    = item.IsVisible,
                            Remark       = item.Remark,
                            Alias        = item.Alias,
                            ReadOnly     = item.ReadOnly,
                            Required     = item.Required
                        });
                    }
                }
                return(algorithmRespDTO);
            });

            return(result.Data);
        }
Example #6
0
        public object GetTaskResult(string taskCode, int ruleStepId)
        {
            SqlSugarClient db   = base.Repository.GetDbContext();
            DmeTask        task = db.Queryable <DmeTask>().Single(t => t.SysCode == taskCode);

            if (null == task)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_FAIL, $"任务不存在[{taskCode}]");
            }
            // 查询任务的结果输出
            IList <DmeTaskResult> taskResults = null;

            if (-1 == ruleStepId)
            {
                // 全部步骤
                taskResults = db.Queryable <DmeTaskResult>().Where(tr => tr.TaskId == task.Id).ToList();
            }
            else
            {
                // 指定步骤
                taskResults = db.Queryable <DmeTaskResult>().Where(tr => tr.TaskId == task.Id && tr.RuleStepId == ruleStepId).ToList();
            }
            if (null == taskResults || 0 == taskResults.Count)
            {
                return(null);
            }
            IList <TaskResultRespDTO> taskResultRespDTOs = new List <TaskResultRespDTO>();
            TaskResultRespDTO         temp = null;

            foreach (var item in taskResults)
            {
                temp = new TaskResultRespDTO
                {
                    RuleStepId = item.RuleStepId,
                    Code       = item.ResultCode,
                    Type       = item.ResultType
                };
                // 解析步骤类型
                DmeRuleStep ruleStep = db.Queryable <DmeRuleStep>().Single(rs => rs.Id == item.RuleStepId);

                //   Value = item.ResultValue
                EnumValueMetaType @enum = EnumUtil.GetEnumObjByName <EnumValueMetaType>(temp.Type);
                switch (@enum)
                {
                case EnumValueMetaType.TYPE_UNKNOWN:
                case EnumValueMetaType.TYPE_NUMBER:
                case EnumValueMetaType.TYPE_STRING:
                case EnumValueMetaType.TYPE_INTEGER:
                case EnumValueMetaType.TYPE_BIGNUMBER:
                case EnumValueMetaType.TYPE_TIMESTAMP:
                case EnumValueMetaType.TYPE_INET:
                case EnumValueMetaType.TYPE_LOCAL_FILE:
                case EnumValueMetaType.TYPE_GDB_PATH:
                case EnumValueMetaType.TYPE_FOLDER:
                    temp.Value = item.ResultValue;
                    break;

                case EnumValueMetaType.TYPE_DATE:
                    // 要求格式:yyyy-MM-dd hh:mm:ss
                    temp.Value = Convert.ToDateTime(item.ResultValue?.ToString());
                    break;

                case EnumValueMetaType.TYPE_BOOLEAN:
                    temp.Value = Boolean.Parse(item.ResultValue?.ToString());
                    break;

                case EnumValueMetaType.TYPE_SERIALIZABLE:
                    break;

                case EnumValueMetaType.TYPE_BINARY:
                    break;

                case EnumValueMetaType.TYPE_MDB_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_STRING_LIST:
                    temp.Value = item.ResultValue?.ToString().Split(";");
                    break;

                case EnumValueMetaType.TYPE_SDE_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_JSON:
                    // 从mongo中获取
                    var filter = Builders <TaskResultColl> .Filter.And(
                        Builders <TaskResultColl> .Filter.Eq("TaskId", item.TaskId),
                        Builders <TaskResultColl> .Filter.Eq("RuleStepId", item.RuleStepId),
                        Builders <TaskResultColl> .Filter.Eq("Code", item.ResultCode));

                    IList <TaskResultColl> colls = MongodbHelper <TaskResultColl> .FindList(ServiceFactory.MongoDatabase, filter);

                    if (colls != null && colls.Count > 0)
                    {
                        temp.Value = colls[0].Value;
                    }
                    break;

                default:
                    break;
                }

                taskResultRespDTOs.Add(temp);
            }
            return(taskResultRespDTOs);
        }
Example #7
0
        public Property GetStepAttributeValue(string otherStepName, string attributeCode)
        {
            //
            var         db        = repository.GetDbContext();
            DmeRuleStep otherStep = db.Queryable <DmeRuleStep>().Single(rs => rs.ModelId == step.ModelId && rs.VersionId == step.VersionId && rs.Name == otherStepName);

            if (null == otherStep)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_FAIL, $"步骤[{otherStepName}]在模型[{step.ModelId}]版本[{step.VersionId}]下不存在");
            }
            DmeRuleStepType otherStepType = db.Queryable <DmeRuleStepType>().Single(rst => rst.Id == otherStep.StepTypeId);

            if (null == otherStepType)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_FAIL, $"步骤类型id[{otherStep.StepTypeId}]不存在");
            }
            IRuleStepData ruleStepData = RuleStepFactory.GetRuleStepData(otherStepType.Name, repository, this.task, otherStep);
            IDictionary <string, Property> inputParameters  = ruleStepData.RuleStepMeta.InParams;
            IDictionary <string, Property> outputParameters = ruleStepData.RuleStepMeta.OutParams;
            Property property = null;

            if (inputParameters.ContainsKey(attributeCode))
            {
                // 从步骤属性表查找
                property = inputParameters[attributeCode];
                DmeRuleStepAttribute dmeRuleStepAttribute = db.Queryable <DmeRuleStepAttribute>().Single(rsa => rsa.RuleStepId == otherStep.Id && rsa.RowIndex == 0 && rsa.AttributeCode == attributeCode);
                property.Value = dmeRuleStepAttribute.AttributeValue;
            }
            else if (outputParameters.ContainsKey(attributeCode))
            {
                // 从步骤结果表查找
                property = outputParameters[attributeCode];
                DmeTaskResult dmeTaskResult = db.Queryable <DmeTaskResult>().Single(tr => tr.TaskId == this.taskId && tr.RuleStepId == otherStep.Id && tr.ResultCode == attributeCode);

                EnumValueMetaType @enum = EnumUtil.GetEnumObjByName <EnumValueMetaType>(property.DataTypeCode);
                switch (@enum)
                {
                case EnumValueMetaType.TYPE_UNKNOWN:
                case EnumValueMetaType.TYPE_NUMBER:
                case EnumValueMetaType.TYPE_STRING:
                case EnumValueMetaType.TYPE_INTEGER:
                case EnumValueMetaType.TYPE_BIGNUMBER:
                case EnumValueMetaType.TYPE_TIMESTAMP:
                case EnumValueMetaType.TYPE_INET:
                case EnumValueMetaType.TYPE_LOCAL_FILE:
                case EnumValueMetaType.TYPE_GDB_PATH:
                case EnumValueMetaType.TYPE_FOLDER:
                    property.Value = dmeTaskResult.ResultValue;
                    break;

                case EnumValueMetaType.TYPE_DATE:
                    // 要求格式:yyyy-MM-dd hh:mm:ss
                    property.Value = Convert.ToDateTime(dmeTaskResult.ResultValue?.ToString());
                    break;

                case EnumValueMetaType.TYPE_BOOLEAN:
                    property.Value = Boolean.Parse(dmeTaskResult.ResultValue?.ToString());
                    break;

                case EnumValueMetaType.TYPE_SERIALIZABLE:
                    break;

                case EnumValueMetaType.TYPE_BINARY:
                    break;

                case EnumValueMetaType.TYPE_MDB_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_STRING_LIST:
                    property.Value = dmeTaskResult.ResultValue?.ToString().Split(";");
                    break;

                case EnumValueMetaType.TYPE_SDE_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_FEATURECLASS:
                    break;

                case EnumValueMetaType.TYPE_JSON:
                    // 从mongo中获取
                    var filter = Builders <TaskResultColl> .Filter.And(
                        Builders <TaskResultColl> .Filter.Eq("TaskCode", this.task.SysCode),
                        Builders <TaskResultColl> .Filter.Eq("RuleStepCode", otherStep.SysCode),
                        Builders <TaskResultColl> .Filter.Eq("Code", attributeCode));

                    IList <TaskResultColl> colls = MongodbHelper <TaskResultColl> .FindList(ServiceFactory.MongoDatabase, filter);

                    if (colls != null && colls.Count > 0)
                    {
                        property.Value = colls[0].Value;
                    }
                    break;

                default:
                    break;
                }
            }
            else
            {
                LOG.Error($"属性编码[{attributeCode}]无效");
                throw new BusinessException((int)EnumSystemStatusCode.DME_FAIL, $"属性编码[{attributeCode}]无效");
            }
            return(property);
        }