public-void-executeFlowDelegateContext-context-n--------long-startTime=SystemcurrentTimeMillis;nn---------获取参数n--------ListFieldExtension-fieldExtensions-=-parseFeildExtensionListcontext;n--------FieldExtension-fieldExtension-=-fieldExtensionsget0;n-
这段代码是一个Java函数的实现,用于执行AB测试的流程节点。下面是代码的翻译:
public void execute(FlowDelegateContext context) {
long startTime = System.currentTimeMillis();
// 解析参数
List<FieldExtension> fieldExtensions = parseFeildExtensionList(context);
FieldExtension fieldExtension = fieldExtensions.get(0);
String stringValue = fieldExtension.getStringValue();
// 解析数据
ABTestRequest abTestRequest = JSON.parseObject(stringValue, ABTestRequest.class);
List<ABTestGateWayRequest> gatewayList = abTestRequest.getGatewayList();
// 1.将ABTEST组件变量组装成list概率实体
List<AbTestResultDTO> abTestResultDTOList = new ArrayList<>();
gatewayList.stream().forEach(ab -> {
AbTestResultDTO abTestResultDTO = new AbTestResultDTO();
abTestResultDTO.setName(ab.getName());
abTestResultDTO.setProb((double) ab.getValue() / 100);
abTestResultDTOList.add(abTestResultDTO);
});
// 2.使用随机概率算法选择路径
AbTestResultDTO abTestResultDTO = choosePath(abTestResultDTOList);
BeanUtils.copyProperties(context, abTestResultDTO);
// 结果路径:A或B或C...
String resultName = abTestResultDTO.getName();
// 3.通过随机概率算法输出一个实体,包含:name=A,prob(概率值)=0.4,index(数组中的下标位置)random产生的随机值
// 设置resultVariable变量值
// 先获取resultVariable的值,然后将值设置到流程中去
String valueResultVariable = abTestRequest.getResultVariable();
// 拼接表达式
// String expressStr = valueResultVariable + "==${\"" + resultName + "\"";
// 将结果变量表达式放入流程
DelegateExecution delegateExecution = context.getDelegateExecution();
delegateExecution.setVariable(valueResultVariable, resultName);
// 节点信息保存
ProcessExecNodeResult processExecNodeResult = new ProcessExecNodeResult();
processExecNodeResult.setCustomerId(context.getCustomerId());
processExecNodeResult.setGroupId(context.getGroupId());
processExecNodeResult.setBusinessId(context.getBusinessId());
processExecNodeResult.setTenantId(context.getTenantId());
processExecNodeResult.setProcessDefinitionKey(context.getProcessDefinitionKey());
processExecNodeResult.setStartTime(new Date());
processExecNodeResult.setPlanId(context.getPlanId());
processExecNodeResult.setTaskId(context.getTaskId());
processExecNodeResult.setBatchNo(context.getBatchNo());
Map<String, Object> outParamMap = new HashMap<>();
outParamMap.put("name", abTestResultDTO.getName());
outParamMap.put("random", abTestResultDTO.getRandom());
processExecNodeResult.setOutputParam(outParamMap);
Map<String, Object> inParamMap = new HashMap<>();
inParamMap.put("abTestRequest", JsonUtils.toJson(abTestRequest));
processExecNodeResult.setInputParam(inParamMap);
processExecNodeResult.setElementType(FlowElementTypeEnum.AB_TEST.getType());
processExecNodeResult.setElementName(FlowElementTypeEnum.AB_TEST.getName());
processExecNodeResult.setCostTime(System.currentTimeMillis() - startTime);
processBusinessService.saveProcessNodeBusiness(processExecNodeResult);
}
该函数首先解析流程节点传入的参数,获取AB测试相关的数据,然后将ABTEST组件变量组装成概率实体列表,使用随机概率算法选择路径,并将结果放入流程中的变量中。最后,该函数将节点信息保存到数据库中。
原文地址: https://www.cveoy.top/t/topic/p1o 著作权归作者所有。请勿转载和采集!