コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: ModelController.cs プロジェクト: zhongshuiyuan/dme
 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));
 }
コード例 #3
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);
        }