diff --git a/app.db b/app.db index c6c9b7b..4511b24 100644 Binary files a/app.db and b/app.db differ diff --git a/pom.xml b/pom.xml index 30597bd..3ef891d 100644 --- a/pom.xml +++ b/pom.xml @@ -18,9 +18,32 @@ - com.iflytop - uf - 0.0.66 + org.springframework.boot + spring-boot-starter-web + + + org.xerial + sqlite-jdbc + 3.45.2.0 + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.3 + + + org.java-websocket + Java-WebSocket + 1.5.4 + + + org.freemarker + freemarker + 2.3.31 + + + org.flywaydb + flyway-core org.jetbrains diff --git a/src/main/java/a8k/MyApplicationRunner.java b/src/main/java/a8k/MyApplicationRunner.java deleted file mode 100644 index 7446f6c..0000000 --- a/src/main/java/a8k/MyApplicationRunner.java +++ /dev/null @@ -1,18 +0,0 @@ -package a8k; -import a8k.utils.AppServiceManager; -import jakarta.annotation.Resource; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -@Order(1) -@Component -public class MyApplicationRunner implements ApplicationRunner { - @Resource - private AppServiceManager appServiceManager; - - @Override - public void run(ApplicationArguments args) throws Exception { - this.appServiceManager.loadActions(); - } -} diff --git a/src/main/java/a8k/SpringBootBeanUtil.java b/src/main/java/a8k/SpringBootBeanUtil.java index cafa669..6fcd6d4 100644 --- a/src/main/java/a8k/SpringBootBeanUtil.java +++ b/src/main/java/a8k/SpringBootBeanUtil.java @@ -5,6 +5,13 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; +import java.io.File; +import java.io.IOException; +import java.net.JarURLConnection; +import java.net.URL; +import java.util.*; +import java.util.jar.JarEntry; + /** * SpringBoot 普通类获取Spring容器中的bean工具类 * @author lvgang @@ -21,6 +28,7 @@ public class SpringBootBeanUtil implements ApplicationContextAware { } + /** * 获取applicationContext * @return ApplicationContext @@ -57,4 +65,13 @@ public class SpringBootBeanUtil implements ApplicationContextAware { return getContext().getBean(name, clazz); } + + public static List> getBeans() { + var beans = getContext().getBeansWithAnnotation(Component.class); + List> list = new ArrayList<>(); + for (Object bean : beans.values()) { + list.add(bean.getClass()); + } + return list; + } } \ No newline at end of file diff --git a/src/main/java/a8k/extapi_controler/ExtApiControler.java b/src/main/java/a8k/extapi_controler/ExtApiControler.java index 523ddba..7364e26 100644 --- a/src/main/java/a8k/extapi_controler/ExtApiControler.java +++ b/src/main/java/a8k/extapi_controler/ExtApiControler.java @@ -1,11 +1,10 @@ package a8k.extapi_controler; +import a8k.SpringBootBeanUtil; import a8k.extapi_controler.utils.*; import a8k.type.appret.AppRet; -import a8k.service.db.HardwareServiceSetting; import a8k.utils.*; -import com.iflytop.uf.UfApplication; -import com.iflytop.uf.util.UfClassHelper; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -25,7 +24,7 @@ public class ExtApiControler { @ResponseBody public AppRet services() { List> services = new ArrayList<>(); - var classes = UfClassHelper.getAllClassesInPackage("a8k"); + var classes = SpringBootBeanUtil.getBeans(); for (var clazz : classes) { var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); if (null == hardwareServiceAnnotation || !hardwareServiceAnnotation.cfg().isDisplay()) { @@ -109,9 +108,9 @@ public class ExtApiControler { } if (!isSetterHasBeenFound) { - var options = HardwareServiceSetting.getOption(serviceKey, name); - options.setValue(value); - options.save(); + // var options = HardwareServiceSetting.getOption(serviceKey, name); + // options.setValue(value); + // options.save(); } } return AppRet.success(); @@ -120,8 +119,8 @@ public class ExtApiControler { @PostMapping("/api/service-config/service-params-reset") @ResponseBody public AppRet serviceParamsReset(@RequestBody Map params) throws Exception { - String serviceKey = (String) params.get("serviceKey"); - HardwareServiceSetting.deleteAllByServiceName(serviceKey); + // String serviceKey = (String) params.get("serviceKey"); + // HardwareServiceSetting.deleteAllByServiceName(serviceKey); return AppRet.success(); } @@ -130,7 +129,7 @@ public class ExtApiControler { public AppRet serviceStatus(@RequestBody Map params) throws InvocationTargetException, IllegalAccessException { String serviceKey = (String) params.get("serviceKey"); Class serviceClass = null; - var classes = UfClassHelper.getAllClassesInPackage("a8k"); + var classes = SpringBootBeanUtil.getBeans(); for (var clazz : classes) { var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { @@ -145,7 +144,7 @@ public class ExtApiControler { return AppRet.success(statusList); } - var service = UfApplication.getContext().getBean(serviceClass); + var service = SpringBootBeanUtil.getBean(serviceClass); var methods = serviceClass.getMethods(); for (var method : methods) { var statusAnnotation = method.getAnnotation(ExtApiStatu.class); @@ -169,7 +168,7 @@ public class ExtApiControler { public AppRet serviceActionList(@RequestBody Map params) throws Exception { String serviceKey = (String) params.get("serviceKey"); Class serviceClass = null; - var classes = UfClassHelper.getAllClassesInPackage("a8k"); + var classes = SpringBootBeanUtil.getBeans(); for (var clazz : classes) { var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { @@ -360,7 +359,7 @@ public class ExtApiControler { // get service instance by service key private Object getServiceInstanceByServiceKey(String serviceKey) { Class serviceClass = null; - var classes = UfClassHelper.getAllClassesInPackage("a8k"); + var classes = SpringBootBeanUtil.getBeans(); for (var clazz : classes) { var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { @@ -372,12 +371,12 @@ public class ExtApiControler { if (null == serviceClass) { return null; } - return UfApplication.getContext().getBean(serviceClass); + return SpringBootBeanUtil.getBean(serviceClass); } // get service param handler by given service key private Object getServiceParamHandlerByServiceKey(String serviceKey) { - var classes = UfClassHelper.getAllClassesInPackage("a8k"); + var classes = SpringBootBeanUtil.getBeans(); for (var clazz : classes) { var hardwareServiceParamsAnnotation = clazz.getAnnotation(ExtApiParamsTab.class); if (null == hardwareServiceParamsAnnotation) { @@ -387,7 +386,7 @@ public class ExtApiControler { if (!serviceClass.getSimpleName().equals(serviceKey)) { continue; } - return UfApplication.getContext().getBean(clazz); + return SpringBootBeanUtil.getBean(clazz); } return null; } diff --git a/src/main/java/a8k/extapi_controler/utils/EnginnerParamReader.java b/src/main/java/a8k/extapi_controler/utils/EnginnerParamReader.java deleted file mode 100644 index 0f0a828..0000000 --- a/src/main/java/a8k/extapi_controler/utils/EnginnerParamReader.java +++ /dev/null @@ -1,37 +0,0 @@ -package a8k.extapi_controler.utils; - -import a8k.service.db.HardwareServiceSetting; -import a8k.type.exception.AppException; - - -public class EnginnerParamReader { - String serviceName; - - public EnginnerParamReader(Class cla) { - this.serviceName = cla.getSimpleName(); - } - - public Integer getInteger(String key, Integer defaultValue) { - return HardwareServiceSetting.getInteger(serviceName, key, defaultValue); - } - - public T getObject(String key, Class clazs, T defaultVal) { - return HardwareServiceSetting.getObject(serviceName, key, clazs, defaultVal); - } - - public T getObject(String key, Class clazs) throws AppException { - return HardwareServiceSetting.getObject(serviceName, key, clazs); - } - - public void setInteger(String key, Integer value) { - HardwareServiceSetting.setInteger(serviceName, key, value); - } - - public void setObject(String key, Object value) { - try { - HardwareServiceSetting.setOption(serviceName, key, value); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/a8k/service/app/devicedriver/ctrl/ReactionPlatesTransmitCtrl.java b/src/main/java/a8k/service/app/devicedriver/ctrl/ReactionPlatesTransmitCtrl.java index 29c6ad8..abf33d5 100644 --- a/src/main/java/a8k/service/app/devicedriver/ctrl/ReactionPlatesTransmitCtrl.java +++ b/src/main/java/a8k/service/app/devicedriver/ctrl/ReactionPlatesTransmitCtrl.java @@ -1,8 +1,6 @@ package a8k.service.app.devicedriver.ctrl; import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; -import a8k.extapi_controler.utils.EnginnerParamReader; -import a8k.extapi_controler.utils.ExtApiFn; import a8k.extapi_controler.utils.ExtApiTab; import a8k.service.app.devicedriver.basectrl.StepMotorControler; import a8k.service.app.devicedriver.basectrl.type.StepMotorMId; @@ -30,7 +28,6 @@ import java.util.List; public class ReactionPlatesTransmitCtrl { static Logger logger = LoggerFactory.getLogger(ReactionPlatesTransmitCtrl.class); static final Integer overtime = 10000; - EnginnerParamReader hpReader = new EnginnerParamReader(ReactionPlatesTransmitCtrl.class); @Resource diff --git a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java index 46b7bcf..954d693 100644 --- a/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java +++ b/src/main/java/a8k/service/app/devicedriver/testscript/TestScript.java @@ -1,76 +1,76 @@ -package a8k.service.app.devicedriver.testscript; - -import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; -import a8k.extapi_controler.utils.EnginnerParamReader; -import a8k.extapi_controler.utils.ExtApiFn; -import a8k.extapi_controler.utils.ExtApiTab; -import a8k.type.ConsumableGroup; -import a8k.type.exception.AppException; -import a8k.type.IncubatorPos; -import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; -import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; -import a8k.hardware.A8kCanBusService; -import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler; -import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Component; - -@Component -@ExtApiTab(cfg = ExtApiTabConfig.TestScript) -public class TestScript { - static Logger logger = LoggerFactory.getLogger(TestScript.class); - - static class ORDER { - static final int testTakeAllTipStop = 0; - static final int takeTipTestStep = 1; - static final int testTakeAllTip = 2; - static final int testAllLittleBottleBufferPos = 3; - static final int testAllDetectMaterialPos = 4; - static final int testAllBigBottleBufferPos = 5; - static final int pushAllPlateAndDrop = 6; - static final int testSamplePreProcessModule = 7; - } - - @Resource - A8kCanBusService canBus; - - @Resource - ApplicationContext appCxt; - - @Resource - HbotBaseMoveControler hbotcs; - - @Resource - ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; - - @Resource - TubePreProcesControler tubePreProcesControler; - - @Resource - TubeTubeFeedingModule tubeTubeFeedingModule; - - EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControler.class); - - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // 测试 - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Boolean testScriptWorkFlag = false; - - void checkTestScriptWorkFlag() throws AppException { - if (testScriptWorkFlag) { - testScriptWorkFlag = false; - throw new AppException(A8kEcode.TEST_SCRIP_ERROR_DEVICE_IS_BUSY); - } - } - - @ExtApiFn(name = "停止测试脚本", group = "控制", order = ORDER.testTakeAllTipStop) - public void testTakeAllTipStop() { - testScriptWorkFlag = false; - } +//package a8k.service.app.devicedriver.testscript; +// +//import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; +//import a8k.extapi_controler.utils.EnginnerParamReader; +//import a8k.extapi_controler.utils.ExtApiFn; +//import a8k.extapi_controler.utils.ExtApiTab; +//import a8k.type.ConsumableGroup; +//import a8k.type.exception.AppException; +//import a8k.type.IncubatorPos; +//import a8k.service.app.devicedriver.ctrl.TubePreProcesControler; +//import a8k.service.app.devicedriver.ctrl.TubeTubeFeedingModule; +//import a8k.hardware.A8kCanBusService; +//import a8k.hardware.type.a8kcanprotocol.A8kEcode; +//import a8k.service.app.devicedriver.basectrl.HbotBaseMoveControler; +//import a8k.service.app.devicedriver.ctrl.ReactionPlatesTransmitCtrl; +//import jakarta.annotation.Resource; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.context.ApplicationContext; +//import org.springframework.stereotype.Component; +// +//@Component +//@ExtApiTab(cfg = ExtApiTabConfig.TestScript) +//public class TestScript { +// static Logger logger = LoggerFactory.getLogger(TestScript.class); +// +// static class ORDER { +// static final int testTakeAllTipStop = 0; +// static final int takeTipTestStep = 1; +// static final int testTakeAllTip = 2; +// static final int testAllLittleBottleBufferPos = 3; +// static final int testAllDetectMaterialPos = 4; +// static final int testAllBigBottleBufferPos = 5; +// static final int pushAllPlateAndDrop = 6; +// static final int testSamplePreProcessModule = 7; +// } +// +// @Resource +// A8kCanBusService canBus; +// +// @Resource +// ApplicationContext appCxt; +// +// @Resource +// HbotBaseMoveControler hbotcs; +// +// @Resource +// ReactionPlatesTransmitCtrl reactionPlatesTransmitCtrl; +// +// @Resource +// TubePreProcesControler tubePreProcesControler; +// +// @Resource +// TubeTubeFeedingModule tubeTubeFeedingModule; +// +// EnginnerParamReader settingReader = new EnginnerParamReader(HbotBaseMoveControler.class); +// +// // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// // 测试 +// // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// Boolean testScriptWorkFlag = false; +// +// void checkTestScriptWorkFlag() throws AppException { +// if (testScriptWorkFlag) { +// testScriptWorkFlag = false; +// throw new AppException(A8kEcode.TEST_SCRIP_ERROR_DEVICE_IS_BUSY); +// } +// } +// +// @ExtApiFn(name = "停止测试脚本", group = "控制", order = ORDER.testTakeAllTipStop) +// public void testTakeAllTipStop() { +// testScriptWorkFlag = false; +// } // @ExtApiFn(name = "取放Tip-单步", group = "Hbot测试脚本", order = ORDER.takeTipTestStep) // public AppRet takeTipTestStep(Integer tipgroup, Integer index) throws AppException { @@ -187,8 +187,8 @@ public class TestScript { // testScriptWorkFlag = false; // } - @ExtApiFn(name = "测试摇匀模组", group = "摇匀模组测试", order = ORDER.testSamplePreProcessModule) - public Object testSamplePreProcessModule() throws AppException { +// @ExtApiFn(name = "测试摇匀模组", group = "摇匀模组测试", order = ORDER.testSamplePreProcessModule) +// public Object testSamplePreProcessModule() throws AppException { // checkTestScriptWorkFlag(); // testScriptWorkFlag = true; @@ -227,8 +227,8 @@ public class TestScript { // testScriptWorkFlag = false; // } - return null; - - } - -} +// return null; +// +// } +// +//} diff --git a/src/main/java/a8k/service/db/HardwareServiceSetting.java b/src/main/java/a8k/service/db/HardwareServiceSetting.java deleted file mode 100644 index 793e8ef..0000000 --- a/src/main/java/a8k/service/db/HardwareServiceSetting.java +++ /dev/null @@ -1,104 +0,0 @@ -package a8k.service.db; - -import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.type.exception.AppException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.iflytop.uf.UfActiveRecord; -import com.iflytop.uf.UfActiveRecordField; -import com.iflytop.uf.util.UfJsonHelper; - -import java.util.Map; - -public class HardwareServiceSetting extends UfActiveRecord { - @UfActiveRecordField - public String key; - @UfActiveRecordField - public String serviceName; //属于哪个服务的, hardware目录下的类名 - @UfActiveRecordField - public String valType; - @UfActiveRecordField - public String val; - - public static String getTableName() { - return "zapp_hardware_services_setting"; - } - - public static void deleteAllByServiceName(String serviceName) { - var items = UfActiveRecord.find(HardwareServiceSetting.class, Map.of("ServiceName", serviceName)); - for (var item : items) { - item.delete(); - } - } - - public void setValue(Object value) throws Exception { - if (value instanceof String) { - this.val = (String) value; - } else if (value instanceof Integer) { - this.val = String.valueOf((Integer) value); - } else if (value instanceof Map) { - this.val = UfJsonHelper.objectToJson(value); - } else { - this.val = UfJsonHelper.objectToJson(value); - } - } - - public static HardwareServiceSetting getOption(String service, String key) { - var option = UfActiveRecord.findOne(HardwareServiceSetting.class, Map.of("serviceName", service, "key", key)); - if (null == option) { - option = new HardwareServiceSetting(); - option.serviceName = service; - option.key = key; - option.val = null; - } - return option; - } - - - public static void setOption(String service, String key, Object value) throws Exception { - var options = getOption(service, key); - options.setValue(value); - options.save(); - } - - public static T getObject(String service, String key, Class clazs) throws AppException { - var option = UfActiveRecord.findOne(HardwareServiceSetting.class, Map.of("serviceName", service, "key", key)); - if (option == null) { - throw new AppException(A8kEcode.CODEERROR_GET_PARAM_FAIL); - } - ObjectMapper mapper = new ObjectMapper(); - try { - return mapper.readValue(option.val, clazs); - } catch (JsonProcessingException e) { - throw new AppException(A8kEcode.CODEERROR_PARSE_PARAM_FAIL); - } - } - - - public static T getObject(String service, String key, Class clazs, T defaultVal) { - var option = UfActiveRecord.findOne(HardwareServiceSetting.class, Map.of("serviceName", service, "key", key)); - if (option == null) { - return defaultVal; - } - ObjectMapper mapper = new ObjectMapper(); - try { - return mapper.readValue(option.val, clazs); - } catch (JsonProcessingException e) { - return defaultVal; - } - } - - public static Integer getInteger(String service, String key, Integer defaultValue) { - var option = HardwareServiceSetting.getOption(service, key); - if (null == option.val) { - return defaultValue; - } - return Integer.parseInt(option.val); - } - - public static void setInteger(String service, String key, Integer value) { - var option = HardwareServiceSetting.getOption(service, key); - option.val = String.valueOf(value); - option.save(); - } -} diff --git a/src/main/java/a8k/utils/AppService.java b/src/main/java/a8k/utils/AppService.java deleted file mode 100644 index 590f688..0000000 --- a/src/main/java/a8k/utils/AppService.java +++ /dev/null @@ -1,10 +0,0 @@ -package a8k.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface AppService { - String name(); -} diff --git a/src/main/java/a8k/utils/AppServiceAction.java b/src/main/java/a8k/utils/AppServiceAction.java deleted file mode 100644 index d73a93b..0000000 --- a/src/main/java/a8k/utils/AppServiceAction.java +++ /dev/null @@ -1,9 +0,0 @@ -package a8k.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface AppServiceAction { -} diff --git a/src/main/java/a8k/utils/AppServiceManager.java b/src/main/java/a8k/utils/AppServiceManager.java deleted file mode 100644 index 6345c95..0000000 --- a/src/main/java/a8k/utils/AppServiceManager.java +++ /dev/null @@ -1,69 +0,0 @@ -package a8k.utils; -import com.iflytop.uf.UfApplication; -import com.iflytop.uf.util.UfClassHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -@Component -public class AppServiceManager { - public static final Logger LOG = LoggerFactory.getLogger(AppServiceManager.class); - - // actions - public Map actions; - // services - public Map> actionServices; - - // load actions - public void loadActions() throws Exception { - this.actions = new HashMap(); - this.actionServices = new HashMap>(); - var classList = UfClassHelper.getAllClassesInPackage("a8k"); - for (var clazz : classList) { - var serviceAnnotation = clazz.getAnnotation(AppService.class); - if (serviceAnnotation == null) { - continue ; - } - var methods = clazz.getMethods(); - for (var method : methods) { - if (!method.isAnnotationPresent(AppServiceAction.class)) { - continue ; - } - String actionKey = String.format("%s.%s", serviceAnnotation.name(), method.getName()); - if (this.actions.containsKey(actionKey)) { - throw new Exception(String.format("重复action '%s'", actionKey)); - } - this.actions.put(actionKey, method); - this.actionServices.put(method, clazz); - LOG.info("load app action : {}", actionKey); - } - } - } - - // execute action - public Object executeAction(String action, Map params) throws Exception { - var method = actions.get(action); - if (method == null) { - throw new Exception("不存在"); - } - - var actionParamDefs = method.getParameters(); - Object[] args = new Object[actionParamDefs.length]; - for ( var i=0; i