package com.ruoyi.buss.common;
|
|
import com.alibaba.fastjson2.JSONObject;
|
import com.ruoyi.buss.domain.DsEffectAssessList;
|
|
import javax.script.Invocable;
|
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptEngineFactory;
|
import javax.tools.*;
|
import java.lang.reflect.Method;
|
import java.net.URI;
|
import java.net.URL;
|
import java.net.URLClassLoader;
|
import java.util.Arrays;
|
import java.util.List;
|
|
public class AssessUtil {
|
|
/**
|
* 批次总补给数量 效能评估数值计算
|
*/
|
public static double getPercentForShipCount(int count){
|
if(count > 0 && count < 6){
|
return 0.2;
|
}
|
else if(count >= 6 && count < 12){
|
return 0.4;
|
}
|
else if(count >= 12 && count < 20){
|
return 0.6;
|
}
|
else if(count >= 20 && count < 30){
|
return 0.8;
|
}
|
else if(count >= 30){
|
return 1.0;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 批次单舰折叠补给时间 效能评估数值计算
|
*/
|
public static double getPercentForShipEmpty(int count){
|
if(count < 4){
|
return 1.0;
|
}
|
else if(count < 8 && count >= 4){
|
return 0.8;
|
}
|
else if(count >= 8 && count < 12){
|
return 0.6;
|
}
|
else if(count >= 12 && count < 18){
|
return 0.4;
|
}
|
else if(count >= 18 && count < 24){
|
return 0.2;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 各港口结束最大时间差 效能评估数值计算
|
*/
|
public static double getPercentForHarborTimeDif(int count){
|
if(count < 4){
|
return 1.0;
|
}
|
else if(count >= 4 && count < 8){
|
return 0.8;
|
}
|
else if(count >= 8 && count < 12){
|
return 0.6;
|
}
|
else if(count >= 12 && count < 18){
|
return 0.4;
|
}
|
else if(count >= 18 && count < 24){
|
return 0.2;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 单舰平均停靠时间 效能评估数值计算
|
*/
|
public static double getPercentForShipStopTime(int hour){
|
if(hour > 48){
|
return 0.4;
|
}
|
else if(hour > 36 && hour <= 48){
|
return 0.6;
|
}
|
else if(hour > 30 && hour <= 36){
|
return 0.7;
|
}
|
else if(hour > 24 && hour <= 30){
|
return 0.8;
|
}
|
else if(hour > 18 && hour <= 24){
|
return 1.0;
|
}
|
else if(hour > 12 && hour <= 18){
|
return 0.8;
|
}
|
else if(hour > 6 && hour <= 12){
|
return 0.7;
|
}
|
else if(hour <= 6){
|
return 0.6;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 补给作业时间均值 效能评估数值计算
|
*/
|
public static double getPercentForApplyTime(int hour){
|
if(hour > 36){
|
return 0.4;
|
}
|
else if(hour > 24 && hour <= 36){
|
return 0.6;
|
}
|
else if(hour > 20 && hour <= 24){
|
return 0.8;
|
}
|
else if(hour > 16 && hour <= 20){
|
return 1.0;
|
}
|
else if(hour > 12 && hour <= 16){
|
return 0.8;
|
}
|
else if(hour < 8){
|
return 0.6;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 补给非作业时间均值 效能评估数值计算
|
*/
|
public static double getPercentForNotApplyTime(int hour){
|
if(hour > 24){
|
return 0.0;
|
}
|
else if(hour > 16 && hour <= 24){
|
return 0.2;
|
}
|
else if(hour > 12 && hour <= 16){
|
return 0.4;
|
}
|
else if(hour > 8 && hour <= 12){
|
return 0.6;
|
}
|
else if(hour > 4 && hour <= 8){
|
return 0.8;
|
}
|
else if(hour <= 4){
|
return 1.0;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 泊位日均周转艘次 效能评估数值计算
|
*/
|
public static double getPercentForBerthTime(double hour){
|
if (hour > 0) {
|
double result = (double)hour / 3.0;
|
return result > 1.0 ? 1.0 : result;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 前沿占半时长均值 效能评估数值计算
|
*/
|
public static double getPercentForBerthHoldTime(double hour){
|
if (hour > 0) {
|
double result = (double) hour / 24.0;
|
return result > 1 ? 1.0 : result;
|
}
|
return 0.0;
|
}
|
|
/**
|
* 各泊位物资车次均值 效能评估数值计算
|
*/
|
public static double getPercentForCar(double count){
|
if (count > 0) {
|
double result = (double)count / 24.0;
|
return result > 1.0 ? 1.0 : result;
|
}
|
return 0.0;
|
}
|
|
|
private static Double getScore(Double list) {
|
try {
|
// 创建Java编译器
|
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
|
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
|
|
// 创建源代码
|
String sourceCode = "public class DynamicScore {" +
|
" public static double calculateScore(double value) {" +
|
" return Math.round(value * 10 * 100) / 100.0;" +
|
" }" +
|
"}";
|
|
// 创建内存中的Java源文件
|
JavaFileObject sourceFile = new SimpleJavaFileObject(
|
URI.create("string:///DynamicScore.java"),
|
JavaFileObject.Kind.SOURCE) {
|
@Override
|
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
|
return sourceCode;
|
}
|
};
|
|
// 编译源代码
|
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
|
Iterable<? extends JavaFileObject> compilationUnits = Arrays.asList(sourceFile);
|
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits);
|
boolean success = task.call();
|
|
if (success) {
|
// 创建自定义类加载器
|
ClassLoader classLoader = new URLClassLoader(new URL[0], AssessUtil.class.getClassLoader());
|
Class<?> dynamicClass = Class.forName("DynamicScore", true, classLoader);
|
|
// 调用方法
|
Method method = dynamicClass.getMethod("calculateScore", double.class);
|
return (Double) method.invoke(null, list);
|
}
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
System.out.println("计算分数失败");
|
}
|
return 0.0;
|
}
|
|
public static void main(String[] args) {
|
System.out.println(getScore(32.1));
|
}
|
|
}
|