/// <summary> /// 处理版本信息 /// </summary> /// <param name="db"></param> /// <param name="model"></param> /// <param name="dto"></param> /// <returns>返回版本编码数组</returns> private IList <string> HandleVersions(SqlSugarClient db, DmeModel model, ModelAddReqDTO dto) { IList <ModelVersionAddDTO> versions = dto.Versions; if (versions?.Count == 0) { throw new BusinessException("注册模型时,缺失版本信息。"); } IList <string> versionCodes = new List <string>(); foreach (var subVersion in versions) { DmeModelVersion mv = new DmeModelVersion { SysCode = GuidUtil.NewGuid(), Name = subVersion.Name, ModelId = model.Id, CreateTime = DateUtil.CurrentTimeMillis }; mv = db.Insertable <DmeModelVersion>(mv).ExecuteReturnEntity(); versionCodes.Add(mv.SysCode); // 添加步骤信息 IList <RuleStepAddDTO> stepsAdd = subVersion.Steps; if (stepsAdd?.Count == 0) { continue; } // 步骤名称与步骤实体的映射 IDictionary <string, DmeRuleStep> ruleStepMap = new Dictionary <string, DmeRuleStep>(); foreach (var subStepAdd in stepsAdd) { RuleStepTypeDTO ruleStepTypeDTO = subStepAdd.StepType; if (null == ruleStepTypeDTO) { throw new BusinessException("注册模型,缺失步骤类型元数据。"); } DmeRuleStepType dmeRuleStepType = db.Queryable <DmeRuleStepType>().Single(rst => rst.Code == ruleStepTypeDTO.Code); DmeRuleStep step = new DmeRuleStep { SysCode = GuidUtil.NewGuid(), ModelId = model.Id, VersionId = mv.Id, X = subStepAdd.X, Y = subStepAdd.Y, Name = subStepAdd.Name, Remark = subStepAdd.Remark, StepTypeId = dmeRuleStepType.Id }; step = db.Insertable <DmeRuleStep>(step).ExecuteReturnEntity(); ruleStepMap[subStepAdd.Name] = step; // 处理步骤属性 this.HandleAttributes(db, model, mv, subStepAdd, step); } // 处理步骤之间的连接关系 this.HandleHop(db, subVersion, model, mv, ruleStepMap); } return(versionCodes); }
public Result RegisterModelSimple([FromBody] ModelAddReqDTO dto) { if (!string.IsNullOrEmpty(dto.SysCode) && !this.modelService.IsBizGuid(dto.SysCode)) { return(base.Fail($"业务编码格式不正确[{dto.SysCode}]")); } if (ModelState.IsValid) { return(base.Success(base.modelService.AddModel(dto))); } // 参数验证失败 return(base.Error(ModelState)); }
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); }