public async Task <ValidateResult> Validate(BusinessAction action, Dictionary <string, object> originalParameters) { //获取参数信息过滤器 var filter = _originalParametersFilterServiceSelector.Choose(action.OriginalParametersFilterType); Dictionary <string, object> parameters = null; if (filter != null) { //获取过滤后的参数信息 parameters = await filter.Execute(originalParameters); } //获取规则信息,转成xml var doc = XDocument.Parse(action.Rule); var result = await _conditionService.Validate(doc, parameters); //如果需要替换 if (!result.Result && !string.IsNullOrEmpty(action.ErrorReplaceText)) { LoggerHelper.LogInformation(_informationCategory, $"BusinessAction {action.Name} validate fail,detail:{result.Description}"); var lcId = ContextContainer.GetValue <int>(ContextTypes.CurrentUserLcid); TemplateContext templateContext = new TemplateContext(lcId, parameters); result.Description = await _templateService.Convert(action.ErrorReplaceText, templateContext); } return(result); }
public async Task <string> GenerateSerialNumber(SerialNumberGeneratorConfiguration configuration, Dictionary <string, object> parameters) { var lcid = ContextContainer.GetValue <int>(ContextTypes.CurrentUserLcid); //使用模板服务获取前缀 var strPrefix = await _templateService.Convert(configuration.PrefixTemplate, new TemplateContext(lcid, parameters)); //查询序列号记录 var record = await _serialNumberRecordRepository.QueryByPrefix(strPrefix); //如果不存在,则尝试新增,如果新增失败,并且错误Code为重复,则重新查询 //如果发现仍不存在,则抛出错误 long recordValue = 0; if (record == null) { record = new SerialNumberRecord() { Prefix = strPrefix }; bool needQueryAgain = false; try { await record.Add(); } catch (UtilityException ex) { if (ex.Code == 314720331) { needQueryAgain = true; } else { throw; } } if (needQueryAgain) { record = await _serialNumberRecordRepository.QueryByPrefix(strPrefix); if (record == null) { TextFragment fragment = new TextFragment() { Code = TextCodes.NotFoundSerialNumberRecordByPrefix, DefaultFormatting = "前缀为{0}的序列号记录不存在", ReplaceParameters = new List <object>() { strPrefix } }; throw new UtilityException((int)Errors.NotFoundSerialNumberRecordByPrefix, fragment); } await record.RefreashValue(); } } else { await record.RefreashValue(); } recordValue = record.Value; return($"{strPrefix}{recordValue.GetPrefixComplete(configuration.SerialLength)}"); }