feat(REQ-4418) - 提交

This commit is contained in:
wangli 2025-09-03 15:27:30 +08:00
parent 033b938766
commit b8e515ed55

View File

@ -63,20 +63,42 @@ public class ImplementationReadyChecker implements ApplicationListener<Applicati
log.info("祝贺,已通过必接事件的校验!但仍然请确保您的实现类逻辑正确无误,不允许出现空实现,否则生产问题自行负责!");
return;
}
log.info("将继续通过 EventConsumer 进行检查...");
methodImplemented = checkUnImplementedMethodsWithEventConsumer(context);
if (getBinaryResult(methodImplemented) == 15) {
log.warn("将继续通过 EventConsumer 进行检查...");
boolean[] methodImplemented2 = checkUnImplementedMethodsWithEventConsumer(context);
if (getBinaryResult(methodImplemented2) == 15) {
log.info("Congratulations, passed the verification");
log.info("祝贺,已通过必接事件的校验!但仍然请确保您的实现类逻辑正确无误,不允许出现空实现,否则生产问题自行负责!");
} else {
int finalResult = getBinaryResult(methodImplemented) & getBinaryResult(methodImplemented2);
boolean[] booleansAdaptive = toBooleansAdaptive(finalResult);
log.error("----------------------------------------");
log.error("警告:未通过必接事件的校验!未实现的方法:{},请确保使用了实现了 {} 接口的Bean被Spring扫描或者在EventConsumer注册了 ProcessInstanceEventEnum 的 EventCode。", String.join(", ", getUnImplementedMethods(methodImplemented)), TARGET_INTERFACE.getName());
log.error("最终事件实现情况:(二进制:{})(十进制:{})", String.format("%4s", Integer.toBinaryString(finalResult)).replace(' ', '0'), finalResult);
log.error("警告:未通过必接事件的校验!未实现的方法:{},请确保使用了实现了 {} 接口的Bean被Spring扫描或者在EventConsumer注册了 ProcessInstanceEventEnum 的 EventCode。", String.join(", ", getUnImplementedMethods(booleansAdaptive)), TARGET_INTERFACE.getName());
log.error("----------------------------------------");
sendAlter(context, getUnImplementedMethods(methodImplemented));
sendAlter(context, getUnImplementedMethods(booleansAdaptive));
}
}
public static boolean[] toBooleansAdaptive(int value) {
if (value < 0) throw new IllegalArgumentException("adaptive mode only for non-negative");
if (value == 0) return new boolean[]{false};
int bits = 32 - Integer.numberOfLeadingZeros(value);
return toBooleans(value, bits);
}
// 高位在前index=0 是最高位
public static boolean[] toBooleans(int value, int bits) {
if (bits <= 0 || bits > 32) throw new IllegalArgumentException("bits must be 1~32");
boolean[] arr = new boolean[bits];
for (int i = 0; i < bits; i++) {
int shift = bits - 1 - i;
arr[i] = ((value >>> shift) & 1) == 1;
}
return arr;
}
private void sendAlter(ApplicationContext context, List<String> unImplementedMethods) {
Environment environment = context.getEnvironment();
DingTalkStarterAlterDTO dto = new DingTalkStarterAlterDTO();
@ -118,9 +140,9 @@ public class ImplementationReadyChecker implements ApplicationListener<Applicati
int binaryResult = getBinaryResult(methodImplemented);
List<String> unimplementedMethods = getUnImplementedMethods(methodImplemented);
log.info("实现 {} 接口的Bean数量: {}", TARGET_INTERFACE.getName(), handlers.size());
log.info("方法实现情况:(二进制:{})(十进制:{})", String.format("%4s", Integer.toBinaryString(binaryResult)).replace(' ', '0'), binaryResult);
log.warn("基于接口事件实现情况:(二进制:{})(十进制:{})", String.format("%4s", Integer.toBinaryString(binaryResult)).replace(' ', '0'), binaryResult);
if (!unimplementedMethods.isEmpty()) {
log.warn("未通过 Starter 提供的 {} 接口实现中找到以下方法的实现: {}。请确保至少有一个实现类覆盖这些方法以处理相应的事件。", TARGET_INTERFACE.getName(), String.join(", ", unimplementedMethods));
log.info("未通过 Starter 提供的 {} 接口实现中找到以下方法的实现: {}。请确保至少有一个实现类覆盖这些方法以处理相应的事件。", TARGET_INTERFACE.getName(), String.join(", ", unimplementedMethods));
}
return methodImplemented;
}
@ -152,6 +174,8 @@ public class ImplementationReadyChecker implements ApplicationListener<Applicati
}
}
});
int binaryResult = getBinaryResult(methodImplemented);
log.warn("基于EventConsumer事件实现情况(二进制:{})(十进制:{})", String.format("%4s", Integer.toBinaryString(binaryResult)).replace(' ', '0'), binaryResult);
return methodImplemented;
}