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); }
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); }
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); }
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); }
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); }