示例#1
0
        public async Task <object> AddModelTypesAsync(string[] types)
        {
            if (0 == types?.Length)
            {
                LOG.Warn("传入的模型类型数据为空");
                return(null);
            }
            List <DmeModelType> modelTypes = new List <DmeModelType>();

            foreach (var item in types)
            {
                DmeModelType modelType = base.Db.Queryable <DmeModelType>().Single(mt => mt.Name == item);
                if (modelType != null)
                {
                    continue;
                }
                modelType = new DmeModelType
                {
                    Name       = item,
                    SysCode    = GuidUtil.NewGuid(),
                    CreateTime = DateUtil.CurrentTimeMillis,
                    LastTime   = DateUtil.CurrentTimeMillis
                };
                modelType = await base.Db.Insertable <DmeModelType>(modelType).ExecuteReturnEntityAsync();

                modelTypes.Add(modelType);
            }
            return(modelTypes);
        }
示例#2
0
        public object AddModel(ModelAddReqDTO dto)
        {
            if (string.IsNullOrEmpty(dto.SysCode))
            {
                // 自动赋予一个唯一编码
                dto.SysCode = GuidUtil.NewGuid();
            }
            // 使用事务
            DbResult <ModelRegisterRespDTO> dbResult = base.Db.Ado.UseTran <ModelRegisterRespDTO>(() =>
            {
                // 查询单条没有数据返回NULL, Single超过1条会报错,First不会
                // base.DmeModelDb.GetContext().Queryable<DmeModel>().Single(m => m.SysCode == dto.SysCode);
                DmeModel model = base.Db.Queryable <DmeModel>().Where(m => m.SysCode == dto.SysCode).Single();
                if (null == model)
                {
                    model = new DmeModel
                    {
                        SysCode     = dto.SysCode,
                        Name        = dto.Name,
                        Remark      = dto.Remark,
                        CreateTime  = DateUtil.CurrentTimeMillis,
                        IsPublish   = 1,
                        PublishTime = DateUtil.CurrentTimeMillis,
                        Status      = 1
                    };
                    // 模型类型
                    DmeModelType modelType = base.Db.Queryable <DmeModelType>().Single(mt => mt.SysCode == dto.TypeCode);
                    if (modelType != null)
                    {
                        model.ModelTypeId   = modelType.Id;
                        model.ModelTypeCode = modelType.SysCode;
                    }

                    model = base.Db.Insertable <DmeModel>(model).ExecuteReturnEntity();
                    if (null == model)
                    {
                        throw new Exception(String.Format("创建模型失败,原因未明,编码:[{0}],名称:[{1}]。", dto.SysCode, dto.Name));
                    }
                }
                else
                {
                    LOG.Info($"模型[{dto.SysCode}]已存在,作为新增版本信息");
                }
                ModelRegisterRespDTO respDTO = ClassValueCopier <ModelRegisterRespDTO> .Copy(model);
                // 处理版本
                respDTO.VersionCodes = this.HandleVersions(base.Db, model, dto);
                return(respDTO);
            });

            return(dbResult.Data);
        }
示例#3
0
        public object UpdateModelBasicInfo(ModelBasicInfoUpdateDTO dto)
        {
            DmeModel model = base.Db.Queryable <DmeModel>().Single(m => m.SysCode == dto.SysCode);

            if (null == model)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, $"模型[{dto.SysCode}]不存在");
            }
            DmeModelType modelType = base.Db.Queryable <DmeModelType>().Single(mt => mt.SysCode == dto.TypeCode);

            if (null == modelType)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, $"模型类型[{dto.TypeCode}]不存在");
            }
            model.Name          = dto.Name;
            model.Remark        = dto.Remark;
            model.ModelTypeId   = modelType.Id;
            model.ModelTypeCode = modelType.SysCode;
            base.Db.Updateable <DmeModel>(model).ExecuteCommand();
            return(true);
        }
示例#4
0
        public object ListModels(Boolean detail, int isPublish, EnumModelStatus enumModelStatus)
        {
            List <DmeModel> models = null;

            // 倒序
            if (-1 == isPublish)
            {
                models = base.Db.Queryable <DmeModel>().Where(m => m.Status == (int)enumModelStatus).OrderBy(m => m.CreateTime, OrderByType.Desc).ToList();
            }
            else
            {
                // 是否发布
                models = base.Db.Queryable <DmeModel>().Where(m => m.IsPublish == isPublish && m.Status == (int)enumModelStatus).OrderBy(m => m.CreateTime, OrderByType.Desc).ToList();
            }

            if (null == models || 0 == models.Count)
            {
                return(models);
            }
            IList <ModelDTO> modelDTOs    = new List <ModelDTO>();
            ModelTypeDTO     modelTypeDTO = null;
            ModelDTO         modelDTO     = null;

            // 获取模型的详情信息
            foreach (DmeModel m in models)
            {
                try
                {
                    if (!string.IsNullOrWhiteSpace(m.ModelTypeCode))
                    {
                        DmeModelType dmeModelType = base.Db.Queryable <DmeModelType>().InSingle(m.ModelTypeId);
                        if (dmeModelType != null)
                        {
                            modelTypeDTO = ClassValueCopier <ModelTypeDTO> .Copy(dmeModelType);
                        }
                        else
                        {
                            // 如果没有找到数据,设置为默认
                            modelTypeDTO = new ModelTypeDTO
                            {
                                Id      = -1,
                                SysCode = "-",
                                Name    = "默认"
                            };
                            Task.Run(() => {
                                LOG.Info($"当前模型[{m.SysCode}][{m.Name}]类型已失效,更新模型类型数据");
                                m.ModelTypeId   = null;
                                m.ModelTypeCode = "";
                                base.Db.Updateable <DmeModel>(m).ExecuteCommand();
                            });
                        }
                    }
                    modelDTO      = this.GetModelMetadata(m, detail);
                    modelDTO.Type = modelTypeDTO;
                    modelDTOs.Add(modelDTO);
                }
                catch (Exception ex)
                {
                    LOG.Error(ex, ex.Message);
                }
            }
            return(modelDTOs);
        }
示例#5
0
        public async Task <DmeTask> CreateTaskAsync(NewTaskReqDTO dto)
        {
            // 验证数据库是否存在指定模型版本信息
            SqlSugarClient db = base.Repository.GetDbContext();
            // 查询模型版本
            DmeModelVersion modelVersion = db.Queryable <DmeModelVersion>().Single(mv => mv.SysCode == dto.ModelVersionCode);

            if (null == modelVersion)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, $"模型的版本[{dto.ModelVersionCode}]不存在");
            }
            // Single方法,如果查询数据库多条数据,会抛出异常
            DmeModel model = db.Queryable <DmeModel>().Single(m => m.Id == modelVersion.ModelId);

            if (null == model)
            {
                throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, $"模型[{modelVersion.ModelId}]不存在");
            }
            // 获取模型类型
            DmeModelType modelType = db.Queryable <DmeModelType>().InSingle(model.ModelTypeId);
            // 查找关联的算法信息
            IList <DmeRuleStep> ruleSteps = db.Queryable <DmeRuleStep>().Where(rs => rs.ModelId == model.Id && rs.VersionId == modelVersion.Id).ToList();

            if (0 == ruleSteps?.Count)
            {
                LOG.Warn($"模型[{model.SysCode}]的版本[{dto.ModelVersionCode}]下没有可执行步骤,停止运行");
                return(null);
            }
            DmeTask newTask = db.Ado.UseTran <DmeTask>(() =>
            {
                // 每执行一次模型,生成一次任务
                newTask = new DmeTask
                {
                    SysCode    = GuidUtil.NewGuid(),
                    CreateTime = DateUtil.CurrentTimeMillis,
                    Status     = EnumUtil.GetEnumDisplayName(EnumSystemStatusCode.DME_WAITTING),
                    ModelId    = model.Id,
                    VersionId  = modelVersion.Id,
                    Remark     = dto.Remark,
                    NodeServer = NetAssist.GetLocalHost()
                };
                if (string.IsNullOrWhiteSpace(dto.Name))
                {
                    newTask.Name = "task-" + newTask.CreateTime;
                }
                else
                {
                    newTask.Name = dto.Name;
                }

                newTask.LastTime = newTask.CreateTime;
                newTask          = db.Insertable <DmeTask>(newTask).ExecuteReturnEntity();
                return(newTask);
            }).Data;

            // 创建job
            await DmeQuartzScheduler <TaskRunnerJob> .NewJob(
                newTask.SysCode,
                modelType.SysCode,
                dto.CronExpression,
                new Dictionary <string, object> {
                { TaskRunnerJob.TASK_CODE_KEY, newTask.SysCode }
            },
                1 == dto.StartNow,
                DateTimeOffset.Now.AddSeconds(dto.InSeconds),
                dto.Remark);

            return(newTask);
        }