package jnpf.limsService.support;
|
|
import java.io.IOException;
|
import java.nio.charset.StandardCharsets;
|
import java.nio.file.Files;
|
import java.nio.file.Path;
|
import java.nio.file.Paths;
|
|
/**
|
* 稳定性销毁申请流程状态同步的静态回归检查。
|
*/
|
public class LimsWendingxingXiaohuiFlowStatusChecks {
|
|
private static final Path REPOSITORY_ROOT = Paths.get("").toAbsolutePath().normalize();
|
|
public static void main(String[] args) throws IOException {
|
String controller = readIfExists("jnpf-lims/jnpf-lims-controller/src/main/java/jnpf/limsController/LimsWendingxingKaocaJihuaController.java");
|
String entity = readIfExists("jnpf-lims/jnpf-lims-entity/src/main/java/jnpf/limsEntity/LimsWendingxingXiaohuiShenqingEntity.java");
|
String mapper = readIfExists("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsWendingxingXiaohuiShenqingMapper.java");
|
String service = readIfExists("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/LimsWendingxingXiaohuiShenqingService.java");
|
String implementation = readIfExists("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsWendingxingXiaohuiShenqingServiceImpl.java");
|
String resolver = readIfExists("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/support/LimsWendingxingXiaohuiFlowStatusResolver.java");
|
|
require(controller, "@PostMapping(\"/xiaohui/shenqing/flow-status/start\")",
|
"start route missing");
|
require(controller, "@PostMapping(\"/xiaohui/shenqing/flow-status/end\")",
|
"end route missing");
|
require(controller, "workFlowApi.getInfoSubmit(param.getTaskId())",
|
"end must query workflow state");
|
require(controller, "xiaohuiService.syncFlowStarted", "start must delegate to service");
|
require(controller, "xiaohuiService.syncFlowEnded", "end must delegate to service");
|
require(entity, "@TableName(\"lims_wendingxing_xiaohui_shenqing\")",
|
"entity table mapping missing");
|
require(entity, "private String bizStatus;", "biz_status mapping missing");
|
require(mapper, "SuperMapper<LimsWendingxingXiaohuiShenqingEntity>",
|
"mapper contract missing");
|
require(service, "void syncFlowStarted(String flowId, String taskId)",
|
"start service contract missing");
|
require(service, "void syncFlowEnded(String flowId, String taskId, Integer flowState)",
|
"end service contract missing");
|
require(implementation, "LimsWendingxingXiaohuiFlowStatusResolver.PROCESSING",
|
"start target missing");
|
require(implementation, "LimsWendingxingXiaohuiFlowStatusResolver.COMPLETED",
|
"end target missing");
|
require(implementation, "getFTenantId", "update must be tenant scoped");
|
require(implementation, "getFDeleteMark", "query and update must ignore deleted applications");
|
require(resolver, "case 2:", "approved terminal status missing");
|
require(resolver, "case 3:", "rejected terminal status missing");
|
require(resolver, "case 4:", "cancelled terminal status missing");
|
require(resolver, "case 7:", "revoked terminal status missing");
|
require(resolver, "case 9:", "terminated terminal status missing");
|
|
int[] terminalStates = {2, 3, 4, 7, 9};
|
for (int state : terminalStates) {
|
requireTrue(LimsWendingxingXiaohuiFlowStatusResolver.isTerminal(state),
|
"flow state must be terminal: " + state);
|
}
|
Integer[] activeOrUnknownStates = {null, 0, 1, 5, 6, 8, 10};
|
for (Integer state : activeOrUnknownStates) {
|
requireTrue(!LimsWendingxingXiaohuiFlowStatusResolver.isTerminal(state),
|
"flow state must not be terminal: " + state);
|
}
|
}
|
|
private static String readIfExists(String relativePath) throws IOException {
|
Path path = REPOSITORY_ROOT.resolve(relativePath);
|
if (!Files.exists(path)) {
|
return "";
|
}
|
return new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
|
}
|
|
private static void require(String source, String expected, String message) {
|
if (!source.contains(expected)) {
|
throw new AssertionError(message);
|
}
|
}
|
|
private static void requireTrue(boolean condition, String message) {
|
if (!condition) {
|
throw new AssertionError(message);
|
}
|
}
|
}
|