protected FilterDefinition <BsonDocument> GetFilterDefinitionFromInterface() { //获取全部接口校验 var verificationDic = _interfaceVerificationRepository.GetMetaFieldUpperKeyDicByInterfaceVerificationId(_queryContext.InterfaceSetting.InterfaceVerificationId); //校验条件是否满足校验 foreach (var item in _queryContext.ConditionArgumentsUpperKeyDic) { if (verificationDic.ContainsKey(item.Key)) { var verification = verificationDic[item.Key]; if (!_interfaceVerificationService.IsMatch(verification, item.Value)) { throw new ArgumentException(!string.IsNullOrEmpty(verification.VerificationTips) ? verification.VerificationTips : $"Key[{item.Key}]对应的值[{item.Value}]格式不正确"); } } } //构造条件 return(_interfaceConditionService.GetFilterDefinitionByCondition(_queryContext.InterfaceSetting.InterfaceConditionId, _queryContext.ConditionArgumentsUpperKeyDic)); }
public Result BatchAdd(InterfaceSetting interfaceSetting, IEnumerable <BsonDocument> bsonsList) { if (interfaceSetting == null) { return(Result.Error("接口设置参数不能为空")); } if (bsonsList == null || !bsonsList.Any()) { return(Result.Success($"没有任何数据需要插入")); } //获取全部接口校验 var verificationDic = _interfaceVerificationRepository.GetMetaFieldUpperKeyDicByInterfaceVerificationId(interfaceSetting.InterfaceVerificationId); //获取到字段列表以编码为Key大写的字典 var metaFields = _metaFieldRepository.GetMetaFieldShortCodeUpperDicByMetaObjectId(interfaceSetting.MetaObjectId); List <BsonDocument> insertBsonsList = new List <BsonDocument>(bsonsList.Count()); foreach (var bsonDocument in bsonsList) { if (bsonDocument == null) { return(Result.Error("数据为空,插入终止")); } BsonDocument bsonElementsToAdd = new BsonDocument(); foreach (var bsonElement in bsonDocument) { string upperKey = bsonElement.Name.ToUpperInvariant(); if (!metaFields.ContainsKey(upperKey)) { continue; } //校验值是否符合接口校验设置 if (verificationDic.ContainsKey(upperKey)) { var verification = verificationDic[upperKey]; if (!_interfaceVerificationService.IsMatch(verification, Convert.ToString(bsonElement.Value))) { return(Result.Error(!string.IsNullOrEmpty(verification.VerificationTips) ? verification.VerificationTips : $"字段[{bsonElement.Name}]传递的值[{bsonElement.Value}]格式不正确")); } } //检查字段的值是否符合字段类型 var checkResult = _metaFieldService.CheckAndGetFieldValueByFieldType(metaFields[upperKey], bsonElement.Value); if (checkResult.IsSuccess) { bsonElementsToAdd.Add(new BsonElement(metaFields[upperKey].ShortCode, BsonValue.Create(checkResult.Data))); } else { return(Result.Error($"字段[{bsonElement.Name}]传递的值[{bsonElement.Value}]不符合字段定义的类型")); } } //获取系统内置的bson元素 var systemBsonDocument = _metaFieldService.GetSystemFieldBsonDocument(); //设置系统字段及其默认值 foreach (var presetBsonElement in systemBsonDocument) { //如果传入的字段已经有了,那么这里就不预置了 if (!bsonElementsToAdd.Contains(presetBsonElement.Name)) { bsonElementsToAdd.Add(presetBsonElement); } } //补充字段 bsonElementsToAdd.SetElement(new BsonElement("MetaObject", interfaceSetting.MetaObjectCode)); if (bsonElementsToAdd.Any()) { insertBsonsList.Add(bsonElementsToAdd); } } if (insertBsonsList.Any()) { _chameleonDataDbContext.GetCollectionBson(interfaceSetting.MetaObjectCode).InsertMany(insertBsonsList); } return(Result.Success($"插入成功! 成功{insertBsonsList.Count}条,失败{bsonsList.Count() - insertBsonsList.Count}条.")); }