From d1548b6d2481647e91faf387ee82eb62123ea7d2 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 29 Oct 2024 15:41:00 +0800 Subject: [PATCH] update --- src/main/java/a8k/config/SpringDocConfig.java | 65 +++++++++- .../controler/api/v1/ApiV1ControllerAdvice.java | 22 ++++ .../api/v1/app/assistant/ApiRetTestControler.java | 77 ++++++++++++ .../api/v1/app/basic/AppEventBusControler.java | 38 ++++++ .../api/v1/app/ctrl/ConsumableScanControler.java | 48 ++++++++ .../api/v1/app/ctrl/DeviceCtrlControler.java | 60 ++++++++++ .../a8k/controler/api/v1/app/ctrl/DeviceInit.java | 41 +++++++ .../controler/api/v1/app/ctrl/OsCtrlControler.java | 85 +++++++++++++ .../api/v1/app/data/A8kProjectCardControler.java | 64 ++++++++++ .../api/v1/app/data/ReactionResultControler.java | 59 +++++++++ .../controler/api/v1/app/data/UsrControler.java | 86 +++++++++++++ .../api/v1/app/setting/AppSettingControler.java | 133 +++++++++++++++++++++ .../v1/app/state/AppTubeSettingMgrControler.java | 92 ++++++++++++++ .../api/v1/app/state/ConsumablesMgrControler.java | 64 ++++++++++ .../api/v1/app/state/DeviceStateControler.java | 69 +++++++++++ .../api/v1/type/EmergencyTubeSetting.java | 19 +++ .../controler/api_v1/ApiV1ControllerAdvice.java | 22 ---- .../api_v1/app/A8kProjectCardControler.java | 64 ---------- .../controler/api_v1/app/ApiRetTestControler.java | 77 ------------ .../controler/api_v1/app/AppEventBusControler.java | 38 ------ .../controler/api_v1/app/AppSettingControler.java | 133 --------------------- .../api_v1/app/AppTubeSettingMgrControler.java | 93 -------------- .../api_v1/app/ConsumablesMgrControler.java | 72 ----------- .../controler/api_v1/app/DeviceCtrlControler.java | 65 ---------- .../controler/api_v1/app/DeviceStateControler.java | 73 ----------- .../a8k/controler/api_v1/app/OsCtrlControler.java | 87 -------------- .../api_v1/app/ReactionResultControler.java | 59 --------- .../a8k/controler/api_v1/app/UsrControler.java | 86 ------------- .../pagecontrol/ExtApiTabConfig.java | 25 ++-- .../app/appdata/EmergencyTubeControler.java | 42 +++++++ .../app/appdata/ProjIdCardInfoMgrService.java | 1 - .../EmergencySamplePosStateMgrService.java | 20 +--- .../java/a8k/service/app/appstate/SensorState.java | 2 + .../ctrlservice/OptScanModuleCtrlService.java | 1 - .../ctrlservice/PlateBoxCtrlService.java | 1 - .../ctrlservice/TurnableMoveCtrlService.java | 1 - .../java/a8k/service/bases/appevent/AppEvent.java | 2 +- src/main/java/a8k/type/appret/ApiV1Ret.java | 2 - src/main/java/a8k/type/ecode/AECodeError.java | 2 + src/main/java/a8k/type/ecode/AECommonError.java | 2 + .../a8k/type/ecode/AEConsumeNotEnoughError.java | 2 + src/main/java/a8k/type/ecode/AEHardwareError.java | 3 + src/main/java/a8k/type/ecode/AETubeError.java | 2 + .../a8k/type/ecode/AEUnkownExceptionError.java | 12 +- src/main/java/a8k/type/ecode/AppError.java | 5 + src/main/java/a8k/utils/ZSqlite.java | 23 +++- 46 files changed, 1119 insertions(+), 920 deletions(-) create mode 100644 src/main/java/a8k/controler/api/v1/ApiV1ControllerAdvice.java create mode 100644 src/main/java/a8k/controler/api/v1/app/assistant/ApiRetTestControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/basic/AppEventBusControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/ctrl/ConsumableScanControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/ctrl/DeviceCtrlControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/ctrl/DeviceInit.java create mode 100644 src/main/java/a8k/controler/api/v1/app/ctrl/OsCtrlControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/data/A8kProjectCardControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/data/ReactionResultControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/data/UsrControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/setting/AppSettingControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/state/AppTubeSettingMgrControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/state/ConsumablesMgrControler.java create mode 100644 src/main/java/a8k/controler/api/v1/app/state/DeviceStateControler.java create mode 100644 src/main/java/a8k/controler/api/v1/type/EmergencyTubeSetting.java delete mode 100644 src/main/java/a8k/controler/api_v1/ApiV1ControllerAdvice.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/A8kProjectCardControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/ApiRetTestControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/AppEventBusControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/AppSettingControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/AppTubeSettingMgrControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/ConsumablesMgrControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/DeviceCtrlControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/DeviceStateControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/OsCtrlControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/ReactionResultControler.java delete mode 100644 src/main/java/a8k/controler/api_v1/app/UsrControler.java create mode 100644 src/main/java/a8k/service/app/appdata/EmergencyTubeControler.java diff --git a/src/main/java/a8k/config/SpringDocConfig.java b/src/main/java/a8k/config/SpringDocConfig.java index 3fedf9d..84e7a19 100644 --- a/src/main/java/a8k/config/SpringDocConfig.java +++ b/src/main/java/a8k/config/SpringDocConfig.java @@ -17,10 +17,69 @@ public class SpringDocConfig { @Bean - public GroupedOpenApi publicApi() { + public GroupedOpenApi basicApi() { return GroupedOpenApi.builder() - .group("A8k前端接口") - .pathsToMatch("/api/v1/app/**") + .group("v1.app.basic") + .packagesToScan("a8k.controler.api.v1.app.basic") .build(); } + + @Bean + public GroupedOpenApi ctrlApi() { + return GroupedOpenApi.builder() + .group("v1.app.ctrl") + .packagesToScan("a8k.controler.api.v1.app.ctrl") + .build(); + } + + @Bean + public GroupedOpenApi dataApi() { + return GroupedOpenApi.builder() + .group("v1.app.data") + .packagesToScan("a8k.controler.api.v1.app.data") + .build(); + } + + @Bean + public GroupedOpenApi settingApi() { + return GroupedOpenApi.builder() + .group("v1.app.setting") + .packagesToScan("a8k.controler.api.v1.app.setting") + .build(); + } + + @Bean + public GroupedOpenApi stateApi() { + return GroupedOpenApi.builder() + .group("v1.app.state") + .packagesToScan("a8k.controler.api.v1.app.state") + .build(); + } + + @Bean + public GroupedOpenApi allApi() { + return GroupedOpenApi.builder() + .group("v1.app.all") + .packagesToScan("a8k.controler.api.v1.app") + .build(); + } + + // @Bean + // public GroupedOpenApi testApi() { + // return GroupedOpenApi.builder() + // .group("v1.app.test") + // .packagesToScan("a8k.controler.api.v1.app.test") + // .build(); + // } + + // assistant + + @Bean + public GroupedOpenApi assistantApi() { + return GroupedOpenApi.builder() + .group("v1.app.assistant") + .packagesToScan("a8k.controler.api.v1.app.assistant") + .build(); + } + } \ No newline at end of file diff --git a/src/main/java/a8k/controler/api/v1/ApiV1ControllerAdvice.java b/src/main/java/a8k/controler/api/v1/ApiV1ControllerAdvice.java new file mode 100644 index 0000000..17aef5b --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/ApiV1ControllerAdvice.java @@ -0,0 +1,22 @@ +package a8k.controler.api.v1; + +import a8k.type.appret.ApiV1Ret; +import a8k.type.ecode.AppError; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +@ControllerAdvice(value = "a8k.controler.api_v1") +public class ApiV1ControllerAdvice { + + Logger logger = LoggerFactory.getLogger(ApiV1ControllerAdvice.class); + + @ResponseBody + @ExceptionHandler(value = Exception.class) + public ApiV1Ret controllerExceptionHandler(Exception e) { + logger.info("捕获到异常 : ", e); + return ApiV1Ret.fail(e); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/assistant/ApiRetTestControler.java b/src/main/java/a8k/controler/api/v1/app/assistant/ApiRetTestControler.java new file mode 100644 index 0000000..4115464 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/assistant/ApiRetTestControler.java @@ -0,0 +1,77 @@ +package a8k.controler.api.v1.app.assistant; + +import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.hardware.type.a8kcanprotocol.CmdId; +import a8k.hardware.type.a8kcanprotocol.MId; +import a8k.type.appret.ApiV1Ret; +import a8k.type.ecode.*; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "通用返回值结构示例", description = "") +@Slf4j +@Controller +@RequestMapping(value = "api/v1/app/apiRetTest") +@ResponseBody +public class ApiRetTestControler { + + @Operation(description = "获取成功返回值") + @PostMapping("getSuccessRet") + public ApiV1Ret getSuccessRet() { + return ApiV1Ret.success(); + } + + @Operation(description = "获取硬件错误返回值,此类错误为底层发生的硬件错误") + @PostMapping("getHardwareError") + public ApiV1Ret getAppHardwareError() { + return ApiV1Ret.fail(// + new AEHardwareError(A8kEcode.LOW_ERROR_DEVICE_IS_BUSY, MId.PipetteMod, CmdId.a8k_opt_v2_f_close_laster)); + } + + @Operation(description = "获取代码错误返回值,此类错误为代码逻辑错误") + @PostMapping("getAppCodeError") + public ApiV1Ret getAppCodeError() { + return ApiV1Ret.fail(// + new AECodeError("代码错误,这里显示的是提示信息") + ); + } + + @Operation(description = "获取通用错误返回值") + @PostMapping("getAppComonError") + public ApiV1Ret getAppComonError() { + return ApiV1Ret.fail(// + new AECommonError("和AppCodeError类似,只不过这个可能是一些通用错误,一般用户碰不到该错误,只是为了方便开发人员排查问题") + ); + } + + @Operation(description = "获取消耗不足错误返回值,此类错误需要前端提示用户缺少了哪个项目的耗材") + @PostMapping("getConsumeNotEnoughError") + public ApiV1Ret getConsumeNotEnoughError() { + return ApiV1Ret.fail(// + new AEConsumeNotEnoughError("hscrp(项目名称)") + ); + } + + @Operation(description = "获取试管错误,此错误发生在试管处理过程中(扫描,脱帽,盖帽,摇匀),此错误,需要提示用户,是第几个试管发生了错误") + @PostMapping("getTubeError") + public ApiV1Ret getTubeError() { + return ApiV1Ret.fail(// + new AETubeError(A8kEcode.APPE_PROJ_INFO_IS_NOT_EXIST, 6) + ); + } + + @Operation(description = "获取未知异常错误,此错误发生在,当后台没有捕获到某些异常时,目的是为了辅助后端找到代码BUG,需要显示详细的栈信息") + @PostMapping("getUnkownExceptionError") + public ApiV1Ret getUnkownExceptionError() { + var exception = new AppException(A8kEcode.CODEERROR); + return ApiV1Ret.fail(// + new AEUnkownExceptionError(exception) + ); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/basic/AppEventBusControler.java b/src/main/java/a8k/controler/api/v1/app/basic/AppEventBusControler.java new file mode 100644 index 0000000..0d288c3 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/basic/AppEventBusControler.java @@ -0,0 +1,38 @@ +package a8k.controler.api.v1.app.basic; + +import a8k.service.bases.FrontEndEventRouter; +import a8k.service.bases.appevent.AppEvent; +import a8k.type.appret.ApiV1Ret; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Tag(name = "事件总线", description = "") +@Slf4j +@Controller +@RequestMapping(value = "api/v1/app/AppEventBus/") +@ResponseBody +public class AppEventBusControler { + @Resource + FrontEndEventRouter frontEndEventRouter; + + + @Operation(summary = "获取一个事件") + @PostMapping("/pollAppEvent") + public ApiV1Ret pollAppEvent() { + return ApiV1Ret.success(frontEndEventRouter.pollAppEvent()); + } + + @Operation(summary = "获取全部事件") + @PostMapping("/pollAllAppEvents") + public ApiV1Ret> pollAllAppEvents() { + return ApiV1Ret.success(frontEndEventRouter.pollAllAppEvents()); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/ctrl/ConsumableScanControler.java b/src/main/java/a8k/controler/api/v1/app/ctrl/ConsumableScanControler.java new file mode 100644 index 0000000..afd0709 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/ctrl/ConsumableScanControler.java @@ -0,0 +1,48 @@ +package a8k.controler.api.v1.app.ctrl; + +import a8k.service.app.appctrl.AppConsumablesScanService; +import a8k.service.app.appstate.ConsumablesMgrService; +import a8k.type.ConsumableGroup; +import a8k.type.ConsumablesOneChannelScanResultPacket; +import a8k.type.ConsumablesScanResultPacket; +import a8k.type.appret.ApiV1Ret; +import a8k.type.exception.AppException; +import a8k.type.type.TipGroup; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "耗材扫描", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/consumableScan/") +@ResponseBody +public class ConsumableScanControler { + @Resource + AppConsumablesScanService appConsumablesScanService; //耗材扫描模块 + @Resource + ConsumablesMgrService consumablesMgrService; //耗材管理模块 + + /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * 耗材扫描 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + @Operation(summary = "扫描耗材(阻塞接口,耗时大概30多秒)") + @PostMapping("/scanConsumables") + public ApiV1Ret scanConsumables() throws AppException { + log.info("扫描耗材"); + return ApiV1Ret.success(appConsumablesScanService.scanConsumables()); + } + + @Operation(summary = "扫描某一组耗材(阻塞接口,耗时大概5秒)") + @PostMapping("/scanOneGroupConsumables") + public ApiV1Ret scanOneGroupConsumables(ConsumableGroup group) throws AppException { + log.info("扫描某一组耗材"); + return ApiV1Ret.success(appConsumablesScanService.scanOneGroupConsumables(group)); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceCtrlControler.java b/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceCtrlControler.java new file mode 100644 index 0000000..d60a276 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceCtrlControler.java @@ -0,0 +1,60 @@ +package a8k.controler.api.v1.app.ctrl; + +import a8k.service.app.appctrl.AppDeviceCtrlService; +import a8k.type.appret.ApiV1Ret; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "设备控制", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/deviceCtrl/") +@ResponseBody +public class DeviceCtrlControler { + + @Resource + AppDeviceCtrlService appDeviceCtrlService; + + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // EXT FUNC + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * 设备控制 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + @Operation(description = "开始工作") + @PostMapping("/startWork") + public ApiV1Ret startWork() throws AppException { + appDeviceCtrlService.startWork(); + return ApiV1Ret.success(); + } + + @Operation(description = "停止工作") + @PostMapping("/stopWork") + public ApiV1Ret stopWork() { + appDeviceCtrlService.stopWork(); + return ApiV1Ret.success(); + } + + @Operation(description = "暂停工作") + @PostMapping("/pauseWork") + public ApiV1Ret pauseWork() { + appDeviceCtrlService.pauseWork(); + return ApiV1Ret.success(); + } + + @Operation(description = "继续工作") + @PostMapping("/continueWork") + public ApiV1Ret continueWork() { + appDeviceCtrlService.continueWork(); + return ApiV1Ret.success(); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceInit.java b/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceInit.java new file mode 100644 index 0000000..3e6ad04 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/ctrl/DeviceInit.java @@ -0,0 +1,41 @@ +package a8k.controler.api.v1.app.ctrl; + +import a8k.service.app.appctrl.AppDeviceCtrlService; +import a8k.type.appret.ApiV1Ret; +import a8k.type.checkpoint.CheckResult; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Tag(name = "设备初始化", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/deviceInit/") +@ResponseBody +public class DeviceInit { + + @Resource + AppDeviceCtrlService appDeviceCtrlService; + + @Operation(description = "初始化设备") + @PostMapping("/initDevice") + public ApiV1Ret> initDevice() throws AppException { + return ApiV1Ret.success(appDeviceCtrlService.initDevice()); + } + + @Operation(description = "初始化设备前检查") + @PostMapping("/check") + public ApiV1Ret> check() throws AppException { + return ApiV1Ret.success(appDeviceCtrlService.checkBeforeInitDevice()); + } + + +} diff --git a/src/main/java/a8k/controler/api/v1/app/ctrl/OsCtrlControler.java b/src/main/java/a8k/controler/api/v1/app/ctrl/OsCtrlControler.java new file mode 100644 index 0000000..de28d5e --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/ctrl/OsCtrlControler.java @@ -0,0 +1,85 @@ +package a8k.controler.api.v1.app.ctrl; + +import a8k.OS; +import a8k.service.app.appstate.GStateService; +import a8k.type.appret.ApiV1Ret; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "OS相关操作", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/osCtrl/") +@ResponseBody +public class OsCtrlControler { + + @Resource + GStateService gstate; + + /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * 系统控制 + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ + @Operation(summary = "获取应用版本") + @PostMapping("/getAppVersion") + public ApiV1Ret getAppVersion() { + return ApiV1Ret.success(gstate.getAppVersion()); + } + + @Operation(summary = "获取MCU版本") + @PostMapping("/getMcuVersion") + public ApiV1Ret getMcuVersion() { + return ApiV1Ret.success(gstate.getMcuVersion()); + } + + @Operation(summary = "获取设备SN") + @PostMapping("/getSn") + public ApiV1Ret getSn() { + return ApiV1Ret.success(gstate.getSn()); + } + + @Operation(summary = "获取设备IP") + @PostMapping("/readdeviceip") + public ApiV1Ret readdeviceip() { + //TODO: + return ApiV1Ret.success("192.168.8.10"); + } + + @Operation(summary = "关机(阻塞)") + @PostMapping("/shutdown") + public ApiV1Ret shutdown() { + //TODO: + OS.forceSleep(5); + return ApiV1Ret.success(); + } + + Boolean beepState = false; + + @Operation(summary = "打开蜂鸣器") + @PostMapping("/startBeepWarning") + public ApiV1Ret startBeepWarning() { + log.info("打开蜂鸣器"); + beepState = true; + return ApiV1Ret.success(); + } + + @Operation(summary = "关闭蜂鸣器") + @PostMapping("/stopBeepWarning") + public ApiV1Ret stopBeepWarning() { + log.info("关闭蜂鸣器"); + beepState = false; + return ApiV1Ret.success(); + } + + @Operation(summary = "获取蜂鸣器状态") + @PostMapping("/getBeepWarningStatus") + public ApiV1Ret getBeepWarningStatus() { + return ApiV1Ret.success(beepState); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/data/A8kProjectCardControler.java b/src/main/java/a8k/controler/api/v1/app/data/A8kProjectCardControler.java new file mode 100644 index 0000000..e2d9440 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/data/A8kProjectCardControler.java @@ -0,0 +1,64 @@ +package a8k.controler.api.v1.app.data; + +import a8k.service.app.appdata.ProjIdCardInfoMgrService; +import a8k.service.app.appstate.GStateService; +import a8k.service.dao.type.A8kProjInfoCardBreif; +import a8k.type.appret.ApiV1Ret; +import a8k.type.db.CommonPage; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "A8k项目信息卡", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/a8kProjectCardControler/") +@ResponseBody +public class A8kProjectCardControler { + + @Resource + GStateService gstate; + + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @Operation(summary = "读取已挂载的A8k项目信息卡") + @PostMapping("/readMountedCardInfo") + public ApiV1Ret readMountedCardInfo() throws AppException { + return ApiV1Ret.success(projIdCardInfoMgrService.readMountedIDCardInfo()); + } + + @Operation(summary = "保存已挂载的A8k项目信息卡") + @PostMapping("/saveMountedCardInfo") + public ApiV1Ret saveMountedCardInfo() { + projIdCardInfoMgrService.saveMountedProjInfoCard(); + return ApiV1Ret.success(); + } + + @Operation(summary = "删除A8k项目信息") + @PostMapping("/delete") + public ApiV1Ret delete(Integer id) { + projIdCardInfoMgrService.delete(id); + return ApiV1Ret.success(); + } + + @Operation(summary = "删除所有A8k项目信息") + @PostMapping("/deleteAll") + public ApiV1Ret deleteAll() { + projIdCardInfoMgrService.deleteAll(); + return ApiV1Ret.success(); + } + + @Operation(summary = "获取A8k项目信息(Page)") + @PostMapping("/get") + public ApiV1Ret> get(Integer pageNum, Integer pageSize) { + return ApiV1Ret.success(projIdCardInfoMgrService.get(pageNum, pageSize)); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/data/ReactionResultControler.java b/src/main/java/a8k/controler/api/v1/app/data/ReactionResultControler.java new file mode 100644 index 0000000..a606ac3 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/data/ReactionResultControler.java @@ -0,0 +1,59 @@ +package a8k.controler.api.v1.app.data; + +import a8k.service.app.appdata.ReactionRecordMgrService; +import a8k.service.app.appstate.GStateService; +import a8k.service.dao.type.ReactionResultRecord; +import a8k.type.appret.ApiV1Ret; +import a8k.type.db.CommonPage; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Tag(name = "反应记录", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/reactionResult/") +@ResponseBody +public class ReactionResultControler { + + @Resource + GStateService gstate; + + @Resource + ReactionRecordMgrService reactionRecordMgrService; + + + @PostMapping("/getAllRecords") + public ApiV1Ret> getAllRecords() { + return ApiV1Ret.success(reactionRecordMgrService.getAll()); + } + + @PostMapping("/deleteAllRecords") + public ApiV1Ret deleteAllRecords() { + reactionRecordMgrService.deleteAll(); + return ApiV1Ret.success(); + } + + @PostMapping("/printfRecord") + public ApiV1Ret printfRecord(Integer id) { + reactionRecordMgrService.printfRecord(id); + return ApiV1Ret.success(); + } + + @PostMapping("/deleteRecord") + public ApiV1Ret deleteRecord(Integer id) { + reactionRecordMgrService.deleteRecord(id); + return ApiV1Ret.success(); + } + + @PostMapping("/getRecords") + public ApiV1Ret> getRecords(Integer pageNum, Integer pageSize) { + return ApiV1Ret.success(reactionRecordMgrService.getRecords(pageNum, pageSize)); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/data/UsrControler.java b/src/main/java/a8k/controler/api/v1/app/data/UsrControler.java new file mode 100644 index 0000000..cb9ce88 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/data/UsrControler.java @@ -0,0 +1,86 @@ +package a8k.controler.api.v1.app.data; + +import a8k.service.app.appdata.AppUserMgrService; +import a8k.service.dao.type.AppUser; +import a8k.service.dao.type.UsrRole; +import a8k.type.appret.ApiV1Ret; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Tag(name = "用户", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/Usr/") +@ResponseBody +public class UsrControler { + @Resource + AppUserMgrService appUserMgrService; + + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // EXT FUNC + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + @Operation(summary = "用户登录") + @PostMapping("login") + public ApiV1Ret login(String account, String password) throws AppException { + return ApiV1Ret.success(appUserMgrService.login(account, password)); + } + + + @Operation(summary = "用户登出") + @PostMapping("unlogin") + public ApiV1Ret unlogin() { + return ApiV1Ret.success(); + } + + + @Operation(summary = "获取当前用户") + @PostMapping("getLoginUsr") + public ApiV1Ret getLoginUsr() { + return ApiV1Ret.success(new AppUser()); + } + + @Operation(summary = "获取用户列表") + @PostMapping("getUsrlist") + public ApiV1Ret> getUsrlist() { + return ApiV1Ret.success(appUserMgrService.getUsrlist()); + } + + @Operation(summary = "用户添加") + @PostMapping("addUser") + public ApiV1Ret> addUser(String account, String password, UsrRole role) throws AppException { + return ApiV1Ret.success(appUserMgrService.addUser(account, password, role)); + } + + @Operation(summary = "删除用户") + @PostMapping("delUser") + public ApiV1Ret> delUser(String account) { + return ApiV1Ret.success(appUserMgrService.delUser(account)); + } + + @Operation(summary = "修改用户密码") + @PostMapping("modifyUsrPwd") + public ApiV1Ret> modifyUsrPwd(String account, String password) throws AppException { + return ApiV1Ret.success(appUserMgrService.modifyUsrPwd(account, password)); + } + + @Operation(summary = "修改用户权限") + @PostMapping("modifyUsrRole") + public ApiV1Ret> modifyUsrRole(String account, UsrRole usrRole) throws AppException { + return ApiV1Ret.success(appUserMgrService.modifyUsrRole(account, usrRole)); + + } + + @Operation(summary = "修改用户名称") + @PostMapping("modifyUsrAccount") + public ApiV1Ret> modifyUsrAccount(String account, String newaccount) throws AppException { + return ApiV1Ret.success(appUserMgrService.modifyUsrAccount(account, newaccount)); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/setting/AppSettingControler.java b/src/main/java/a8k/controler/api/v1/app/setting/AppSettingControler.java new file mode 100644 index 0000000..2a5eed3 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/setting/AppSettingControler.java @@ -0,0 +1,133 @@ +package a8k.controler.api.v1.app.setting; + +import a8k.service.app.appsetting.AppSettingsMgrService; +import a8k.service.dao.type.AppSetting; +import a8k.service.dao.type.appsetting.settingenum.*; +import a8k.type.appret.ApiV1Ret; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Tag(name = "系统设置", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/AppSetting/") +@ResponseBody +public class AppSettingControler { + @Resource + AppSettingsMgrService appSettingsMgrService; + + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // EXT FUNC + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + @Operation(summary = "获取系统设置") + @PostMapping("/getAppSettings") + public ApiV1Ret getAppSettings() { + return ApiV1Ret.success(appSettingsMgrService.getAppSettings()); + } + + + @Operation(summary = "设置语言") + @PostMapping("/setLanguage") + public ApiV1Ret setLanguage(@NotNull LanguageType val) { + appSettingsMgrService.setLanguage(val); + return ApiV1Ret.success(); + } + + + @Operation(summary = "设置自动打印报告") + @PostMapping("/setAutoPrint") + public ApiV1Ret setAutoPrint(@NotNull Boolean val) { + appSettingsMgrService.setAutoPrint(val); + return ApiV1Ret.success(); + } + + + @Operation(summary = "设置自动登出") + @PostMapping("/setAutoLogout") + public ApiV1Ret setAutoLogout(@NotNull Boolean val) { + appSettingsMgrService.setAutoLogout(val); + return ApiV1Ret.success(); + } + + + @Operation(summary = "设置LIS类型") + @PostMapping("/setLISType") + public ApiV1Ret setLISType(@NotNull LISTypeEnum val) { + appSettingsMgrService.setLISType(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LIS协议") + @PostMapping("/setLISProtocol") + public ApiV1Ret setLISProtocol(@NotNull LISProtocolEnum val) { + appSettingsMgrService.setLISProtocol(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LIS接口") + @PostMapping("/setLIFIf") + public ApiV1Ret setLIFIf(@NotNull LISIFType val) { + appSettingsMgrService.setLIFIf(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LIS是否自动上报报告") + @PostMapping("/setLISAutoExport") + public ApiV1Ret setLISAutoExport( @NotNull Boolean val) { + appSettingsMgrService.setLISAutoExport(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LIS串口波特率") + @PostMapping("/setLISSerialBaudrate") + public ApiV1Ret setLISSerialBaudrate(@NotNull LISSerialBaudrateType val) { + appSettingsMgrService.setLISSerialBaudrate(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LISIP") + @PostMapping("/setLISNetIp") + public ApiV1Ret setLISNetIp(@NotNull String val) { + appSettingsMgrService.setLISNetIp(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置LIS端口") + @PostMapping("/setLISNetPort") + public ApiV1Ret setLISNetPort(@NotNull Integer val) { + appSettingsMgrService.setLISNetPort(val); + return ApiV1Ret.success(); + + } + + + @Operation(summary = "设置设备温度") + @PostMapping("/setTemperature") + public ApiV1Ret setTemperature(Integer val) { + log.info("setTemperature:{}", val); + appSettingsMgrService.setTemperature(val); + return ApiV1Ret.success(); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/state/AppTubeSettingMgrControler.java b/src/main/java/a8k/controler/api/v1/app/state/AppTubeSettingMgrControler.java new file mode 100644 index 0000000..265a1f4 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/state/AppTubeSettingMgrControler.java @@ -0,0 +1,92 @@ +package a8k.controler.api.v1.app.state; + +import a8k.service.app.appctrl.AppTubeSettingMgrService; +import a8k.service.app.appstate.GStateService; +import a8k.type.appret.ApiV1Ret; +import a8k.type.exception.AppException; +import a8k.type.tube_setting.TubeHolderSetting; +import a8k.type.type.BloodType; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +@Tag(name = "试管架配置", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/appTubeSettingMgr/") +@ResponseBody +public class AppTubeSettingMgrControler { + + + @Resource + AppTubeSettingMgrService appTubeSettingMgrService; + @Resource + GStateService gstate; + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // EXTERNAL API + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + @Operation(summary = "获取试管架配置") + @PostMapping("/TubeHolderSetting") + public ApiV1Ret> getTubeHolderSettings() { + return ApiV1Ret.success(gstate.getTubeHolderSettings()); + } + + //添加试管架,返回整个列表 + @Operation(summary = "添加<试管架>配置") + @PostMapping("/newTubeHolderSetting") + public ApiV1Ret newTubeHolderSetting() { + appTubeSettingMgrService.newTubeHolderSetting(); + return ApiV1Ret.success(); + } + + @Operation(summary = "删除<试管架>配置") + @PostMapping("/removeTubeHolderSetting") + public ApiV1Ret removeTubeHolderSetting(String uuid) throws AppException { + appTubeSettingMgrService.removeTubeHolderSetting(uuid); + return ApiV1Ret.success(); + } + + @Operation(summary = "设置<试管架>激活状态") + @PostMapping("/setActiveState") + public ApiV1Ret setActiveState(String uuid, Boolean active) throws AppException { + appTubeSettingMgrService.setActiveState(uuid, active); + return ApiV1Ret.success(); + } + + // @Operation(summary = "设置<试管架>类型") + // @PostMapping("/setTubeHolderType") + // public ApiV1Ret setTubeHolderType(String uuid, A8kTubeHolderType type) throws AppException { + // appTubeSettingMgrService.setTubeHolderType(uuid, type); + // return ApiV1Ret.success(); + // } + + @Operation(summary = "复位<试管>配置") + @PostMapping("/resetTubeSetting") + public ApiV1Ret resetTubeSetting(String uuid, Integer tubeIndex) throws AppException { + appTubeSettingMgrService.resetTubeSetting(uuid, tubeIndex); + return ApiV1Ret.success(); + } + + @Operation(summary = "修改<试管>用户信息配置") + @PostMapping("/setTubeSettingUserIdAndSampleBarcode") + public ApiV1Ret setTubeSettingUserIdAndSampleBarcode(String uuid, Integer tubeIndex, String userid, String sampleBarcode) throws AppException { + appTubeSettingMgrService.setTubeSettingUserIdAndSampleBarcode(uuid, tubeIndex, userid, sampleBarcode); + return ApiV1Ret.success(); + } + + @Operation(summary = "修改<试管>配置(ps:projIndex格式为逗号分割的数字)") + @PostMapping("/setTubeSetting") + public ApiV1Ret setTubeSetting(String uuid, Integer tubeIndex, BloodType bloodType, String projIndex) throws AppException { + appTubeSettingMgrService.setTubeSetting(uuid, tubeIndex, bloodType, projIndex); + return ApiV1Ret.success(); + } + +} diff --git a/src/main/java/a8k/controler/api/v1/app/state/ConsumablesMgrControler.java b/src/main/java/a8k/controler/api/v1/app/state/ConsumablesMgrControler.java new file mode 100644 index 0000000..a012a92 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/state/ConsumablesMgrControler.java @@ -0,0 +1,64 @@ +package a8k.controler.api.v1.app.state; + +import a8k.service.app.appctrl.AppConsumablesScanService; +import a8k.service.app.appstate.ConsumablesMgrService; +import a8k.service.app.appstate.GStateService; +import a8k.type.ConsumableGroup; +import a8k.type.ConsumablesScanResultPacket; +import a8k.type.ConsumablesOneChannelScanResultPacket; +import a8k.type.appret.ApiV1Ret; +import a8k.type.consumables.ConsumableState; +import a8k.type.exception.AppException; +import a8k.type.type.TipGroup; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "耗材设置", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/consumablesMgr/") +@ResponseBody +public class ConsumablesMgrControler { + @Resource + AppConsumablesScanService appConsumablesScanService; //耗材扫描模块 + @Resource + ConsumablesMgrService consumablesMgrService; //耗材管理模块 + @Resource + GStateService gstate; + + /** + * 设置Tip数量 + * @param group Tip组 + * @param num 数量 + */ + @Operation(summary = "设置Tip数量", description = "只允许在设备暂停或者停止状态下调用") + @PostMapping("/setTipNum") + synchronized public ApiV1Ret setTipNum(TipGroup group, Integer num) { + consumablesMgrService.setTipNum(group, num); + return ApiV1Ret.success(); + } + + /** + * 设置耗材数量 + * @param group 耗材组 + * @param num 数量 + */ + @Operation(summary = "设置耗材数量", description = "只允许在设备暂停或者停止状态下调用") + @PostMapping("/setCounsumableNum") + synchronized public ApiV1Ret setCounsumableNum(ConsumableGroup group, Integer num) { + consumablesMgrService.setCounsumableNum(group, num); + return ApiV1Ret.success(); + } + + @Operation(summary = "获取<耗材>状态") + @PostMapping("/getConsumablesState") + public ApiV1Ret getConsumablesState() { + return ApiV1Ret.success(gstate.getConsumableState()); + } +} diff --git a/src/main/java/a8k/controler/api/v1/app/state/DeviceStateControler.java b/src/main/java/a8k/controler/api/v1/app/state/DeviceStateControler.java new file mode 100644 index 0000000..3e28ea8 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/app/state/DeviceStateControler.java @@ -0,0 +1,69 @@ +package a8k.controler.api.v1.app.state; + +import a8k.service.app.appstate.GStateService; +import a8k.service.app.appstate.SensorState; +import a8k.service.app.appstate.type.*; +import a8k.type.appret.ApiV1Ret; +import a8k.type.consumables.ConsumableState; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "设备状态", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/deviceState/") +@ResponseBody +public class DeviceStateControler { + @Resource + GStateService gstate; + + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // EXT FUNC + // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + @Operation(summary = "获取主流程工作状态") + @PostMapping("/getDeviceWorkState") + public ApiV1Ret getDeviceWorkState() { + return ApiV1Ret.success(gstate.deviceWorkState); + } + + @Operation(summary = "获取<试管架>状态") + @PostMapping("/getTubeHolderState") + public ApiV1Ret getTubeHolderState() { + return ApiV1Ret.success(gstate.getTubeHolder()); + } + + @Operation(summary = "获取<孵育盘>的状态") + @PostMapping("/getIncubationPlate") + public ApiV1Ret getIncubationPlate() { + return ApiV1Ret.success(gstate.getIncubationPlate()); + } + + @Operation(summary = "获取<光学模组>状态") + @PostMapping("/getOptScanModuleState") + public ApiV1Ret getOptScanModuleState() { + return ApiV1Ret.success(gstate.getOptScanModule()); + } + + @Operation(summary = "获取<急诊位>状态") + @PostMapping("/getEmergencyTubePosState") + public ApiV1Ret getEmergencyTubePosState() { + return ApiV1Ret.success(gstate.getEmergencyTubePos()); + } + + + + @Operation(summary = "获取<传感器>状态") + @PostMapping("/getSensorState") + public ApiV1Ret getSensorState() { + return ApiV1Ret.success(gstate.getSensorState()); + } + + +} diff --git a/src/main/java/a8k/controler/api/v1/type/EmergencyTubeSetting.java b/src/main/java/a8k/controler/api/v1/type/EmergencyTubeSetting.java new file mode 100644 index 0000000..f898772 --- /dev/null +++ b/src/main/java/a8k/controler/api/v1/type/EmergencyTubeSetting.java @@ -0,0 +1,19 @@ +package a8k.controler.api.v1.type; + +import a8k.type.type.BloodType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class EmergencyTubeSetting { + @Schema(description = "usrid") + String userid; + @Schema(description = "sampleBarcode") + String sampleBarcode; + @Schema(description = "血液类型") + BloodType bloodType; + @Schema(description = "待做项目id") + List projIds; +} diff --git a/src/main/java/a8k/controler/api_v1/ApiV1ControllerAdvice.java b/src/main/java/a8k/controler/api_v1/ApiV1ControllerAdvice.java deleted file mode 100644 index 4be47b1..0000000 --- a/src/main/java/a8k/controler/api_v1/ApiV1ControllerAdvice.java +++ /dev/null @@ -1,22 +0,0 @@ -package a8k.controler.api_v1; - -import a8k.type.appret.ApiV1Ret; -import a8k.type.ecode.AppError; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; - -@ControllerAdvice(value = "a8k.controler.api_v1") -public class ApiV1ControllerAdvice { - - Logger logger = LoggerFactory.getLogger(ApiV1ControllerAdvice.class); - - @ResponseBody - @ExceptionHandler(value = Exception.class) - public ApiV1Ret controllerExceptionHandler(Exception e) { - logger.info("捕获到异常 : ", e); - return ApiV1Ret.fail(e); - } -} diff --git a/src/main/java/a8k/controler/api_v1/app/A8kProjectCardControler.java b/src/main/java/a8k/controler/api_v1/app/A8kProjectCardControler.java deleted file mode 100644 index 1f6710f..0000000 --- a/src/main/java/a8k/controler/api_v1/app/A8kProjectCardControler.java +++ /dev/null @@ -1,64 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appdata.ProjIdCardInfoMgrService; -import a8k.service.app.appstate.GStateService; -import a8k.service.dao.type.A8kProjInfoCardBreif; -import a8k.type.appret.ApiV1Ret; -import a8k.type.db.CommonPage; -import a8k.type.exception.AppException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "反应记录", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/a8kProjectCardControler/") -@ResponseBody -public class A8kProjectCardControler { - - @Resource - GStateService gstate; - - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @Operation(summary = "读取已挂载的A8k项目信息卡") - @PostMapping("/readMountedCardInfo") - public ApiV1Ret readMountedCardInfo() throws AppException { - return ApiV1Ret.success(projIdCardInfoMgrService.readMountedIDCardInfo()); - } - - @Operation(summary = "保存已挂载的A8k项目信息卡") - @PostMapping("/saveMountedCardInfo") - public ApiV1Ret saveMountedCardInfo() { - projIdCardInfoMgrService.saveMountedProjInfoCard(); - return ApiV1Ret.success(); - } - - @Operation(summary = "删除A8k项目信息卡") - @PostMapping("/delete") - public ApiV1Ret delete(Integer id) { - projIdCardInfoMgrService.delete(id); - return ApiV1Ret.success(); - } - - @Operation(summary = "删除所有A8k项目信息卡") - @PostMapping("/deleteAll") - public ApiV1Ret deleteAll() { - projIdCardInfoMgrService.deleteAll(); - return ApiV1Ret.success(); - } - - @Operation(summary = "获取A8k项目信息卡") - @PostMapping("/get") - public ApiV1Ret> get(Integer pageNum, Integer pageSize) { - return ApiV1Ret.success(projIdCardInfoMgrService.get(pageNum, pageSize)); - } - -} diff --git a/src/main/java/a8k/controler/api_v1/app/ApiRetTestControler.java b/src/main/java/a8k/controler/api_v1/app/ApiRetTestControler.java deleted file mode 100644 index 0d410a3..0000000 --- a/src/main/java/a8k/controler/api_v1/app/ApiRetTestControler.java +++ /dev/null @@ -1,77 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.hardware.type.a8kcanprotocol.CmdId; -import a8k.hardware.type.a8kcanprotocol.MId; -import a8k.type.appret.ApiV1Ret; -import a8k.type.ecode.*; -import a8k.type.exception.AppException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "通用返回值结构示例", description = "") -@Slf4j -@Controller -@RequestMapping(value = "api/v1/app/assistant") -@ResponseBody -public class ApiRetTestControler { - - @Operation(description = "获取成功返回值") - @PostMapping("getSuccessRet") - public ApiV1Ret getSuccessRet() { - return ApiV1Ret.success(); - } - - @Operation(description = "获取硬件错误返回值,此类错误为底层发生的硬件错误") - @PostMapping("getHardwareError") - public ApiV1Ret getAppHardwareError() { - return ApiV1Ret.fail(// - new AEHardwareError(A8kEcode.LOW_ERROR_DEVICE_IS_BUSY, MId.PipetteMod, CmdId.a8k_opt_v2_f_close_laster)); - } - - @Operation(description = "获取代码错误返回值,此类错误为代码逻辑错误") - @PostMapping("getAppCodeError") - public ApiV1Ret getAppCodeError() { - return ApiV1Ret.fail(// - new AECodeError("代码错误,这里显示的是提示信息") - ); - } - - @Operation(description = "获取通用错误返回值") - @PostMapping("getAppComonError") - public ApiV1Ret getAppComonError() { - return ApiV1Ret.fail(// - new AECommonError("和AppCodeError类似,只不过这个可能是一些通用错误,一般用户碰不到该错误,只是为了方便开发人员排查问题") - ); - } - - @Operation(description = "获取消耗不足错误返回值,此类错误需要前端提示用户缺少了哪个项目的耗材") - @PostMapping("getConsumeNotEnoughError") - public ApiV1Ret getConsumeNotEnoughError() { - return ApiV1Ret.fail(// - new AEConsumeNotEnoughError("hscrp(项目名称)") - ); - } - - @Operation(description = "获取试管错误,此错误发生在试管处理过程中(扫描,脱帽,盖帽,摇匀),此错误,需要提示用户,是第几个试管发生了错误") - @PostMapping("getTubeError") - public ApiV1Ret getTubeError() { - return ApiV1Ret.fail(// - new AETubeError(A8kEcode.APPE_PROJ_INFO_IS_NOT_EXIST, 6) - ); - } - - @Operation(description = "获取未知异常错误,此错误发生在,当后台没有捕获到某些异常时,目的是为了辅助后端找到代码BUG,需要显示详细的栈信息") - @PostMapping("getUnkownExceptionError") - public ApiV1Ret getUnkownExceptionError() { - var exception = new AppException(A8kEcode.CODEERROR); - return ApiV1Ret.fail(// - new AEUnkownExceptionError(exception) - ); - } -} diff --git a/src/main/java/a8k/controler/api_v1/app/AppEventBusControler.java b/src/main/java/a8k/controler/api_v1/app/AppEventBusControler.java deleted file mode 100644 index 28f0522..0000000 --- a/src/main/java/a8k/controler/api_v1/app/AppEventBusControler.java +++ /dev/null @@ -1,38 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.bases.FrontEndEventRouter; -import a8k.service.bases.appevent.AppEvent; -import a8k.type.appret.ApiV1Ret; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; - -@Tag(name = "事件总线", description = "") -@Slf4j -@Controller -@RequestMapping(value = "api/v1/app/AppEventBus/") -@ResponseBody -public class AppEventBusControler { - @Resource - FrontEndEventRouter frontEndEventRouter; - - - @Operation(summary = "获取系统设置") - @PostMapping("/pollAppEvent") - public ApiV1Ret pollAppEvent() { - return ApiV1Ret.success(frontEndEventRouter.pollAppEvent()); - } - - @Operation(summary = "获取系统设置") - @PostMapping("/pollAllAppEvents") - public ApiV1Ret> pollAllAppEvents() { - return ApiV1Ret.success(frontEndEventRouter.pollAllAppEvents()); - } -} diff --git a/src/main/java/a8k/controler/api_v1/app/AppSettingControler.java b/src/main/java/a8k/controler/api_v1/app/AppSettingControler.java deleted file mode 100644 index 1f4e49f..0000000 --- a/src/main/java/a8k/controler/api_v1/app/AppSettingControler.java +++ /dev/null @@ -1,133 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appsetting.AppSettingsMgrService; -import a8k.service.dao.type.AppSetting; -import a8k.service.dao.type.appsetting.settingenum.*; -import a8k.type.appret.ApiV1Ret; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.validation.constraints.NotNull; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - - -@Tag(name = "系统设置", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/AppSetting/") -@ResponseBody -public class AppSettingControler { - @Resource - AppSettingsMgrService appSettingsMgrService; - - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // EXT FUNC - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - @Operation(summary = "获取系统设置") - @PostMapping("/getAppSettings") - public ApiV1Ret getAppSettings() { - return ApiV1Ret.success(appSettingsMgrService.getAppSettings()); - } - - - @Operation(summary = "设置语言") - @PostMapping("/setLanguage") - public ApiV1Ret setLanguage(@NotNull LanguageType val) { - appSettingsMgrService.setLanguage(val); - return ApiV1Ret.success(); - } - - - @Operation(summary = "设置自动打印报告") - @PostMapping("/setAutoPrint") - public ApiV1Ret setAutoPrint(@NotNull Boolean val) { - appSettingsMgrService.setAutoPrint(val); - return ApiV1Ret.success(); - } - - - @Operation(summary = "设置自动登出") - @PostMapping("/setAutoLogout") - public ApiV1Ret setAutoLogout(@NotNull Boolean val) { - appSettingsMgrService.setAutoLogout(val); - return ApiV1Ret.success(); - } - - - @Operation(summary = "设置LIS类型") - @PostMapping("/setLISType") - public ApiV1Ret setLISType(@NotNull LISTypeEnum val) { - appSettingsMgrService.setLISType(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LIS协议") - @PostMapping("/setLISProtocol") - public ApiV1Ret setLISProtocol(@NotNull LISProtocolEnum val) { - appSettingsMgrService.setLISProtocol(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LIS接口") - @PostMapping("/setLIFIf") - public ApiV1Ret setLIFIf(@NotNull LISIFType val) { - appSettingsMgrService.setLIFIf(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LIS是否自动上报报告") - @PostMapping("/setLISAutoExport") - public ApiV1Ret setLISAutoExport( @NotNull Boolean val) { - appSettingsMgrService.setLISAutoExport(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LIS串口波特率") - @PostMapping("/setLISSerialBaudrate") - public ApiV1Ret setLISSerialBaudrate(@NotNull LISSerialBaudrateType val) { - appSettingsMgrService.setLISSerialBaudrate(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LISIP") - @PostMapping("/setLISNetIp") - public ApiV1Ret setLISNetIp(@NotNull String val) { - appSettingsMgrService.setLISNetIp(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置LIS端口") - @PostMapping("/setLISNetPort") - public ApiV1Ret setLISNetPort(@NotNull Integer val) { - appSettingsMgrService.setLISNetPort(val); - return ApiV1Ret.success(); - - } - - - @Operation(summary = "设置设备温度") - @PostMapping("/setTemperature") - public ApiV1Ret setTemperature(Integer val) { - log.info("setTemperature:{}", val); - appSettingsMgrService.setTemperature(val); - return ApiV1Ret.success(); - } - -} diff --git a/src/main/java/a8k/controler/api_v1/app/AppTubeSettingMgrControler.java b/src/main/java/a8k/controler/api_v1/app/AppTubeSettingMgrControler.java deleted file mode 100644 index 479df88..0000000 --- a/src/main/java/a8k/controler/api_v1/app/AppTubeSettingMgrControler.java +++ /dev/null @@ -1,93 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appctrl.AppTubeSettingMgrService; -import a8k.service.app.appstate.GStateService; -import a8k.type.appret.ApiV1Ret; -import a8k.type.exception.AppException; -import a8k.type.tube_setting.TubeHolderSetting; -import a8k.type.type.A8kTubeHolderType; -import a8k.type.type.BloodType; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; - -@Tag(name = "试管架配置", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/appTubeSettingMgr/") -@ResponseBody -public class AppTubeSettingMgrControler { - - - @Resource - AppTubeSettingMgrService appTubeSettingMgrService; - @Resource - GStateService gstate; - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // EXTERNAL API - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - @Operation(summary = "获取试管架配置") - @PostMapping("/TubeHolderSetting") - public ApiV1Ret> getTubeHolderSettings() { - return ApiV1Ret.success(gstate.getTubeHolderSettings()); - } - - //添加试管架,返回整个列表 - @Operation(summary = "添加<试管架>配置") - @PostMapping("/newTubeHolderSetting") - public ApiV1Ret newTubeHolderSetting() { - appTubeSettingMgrService.newTubeHolderSetting(); - return ApiV1Ret.success(); - } - - @Operation(summary = "删除<试管架>配置") - @PostMapping("/removeTubeHolderSetting") - public ApiV1Ret removeTubeHolderSetting(String uuid) throws AppException { - appTubeSettingMgrService.removeTubeHolderSetting(uuid); - return ApiV1Ret.success(); - } - - @Operation(summary = "设置<试管架>激活状态") - @PostMapping("/setActiveState") - public ApiV1Ret setActiveState(String uuid, Boolean active) throws AppException { - appTubeSettingMgrService.setActiveState(uuid, active); - return ApiV1Ret.success(); - } - - // @Operation(summary = "设置<试管架>类型") - // @PostMapping("/setTubeHolderType") - // public ApiV1Ret setTubeHolderType(String uuid, A8kTubeHolderType type) throws AppException { - // appTubeSettingMgrService.setTubeHolderType(uuid, type); - // return ApiV1Ret.success(); - // } - - @Operation(summary = "复位<试管>配置") - @PostMapping("/resetTubeSetting") - public ApiV1Ret resetTubeSetting(String uuid, Integer tubeIndex) throws AppException { - appTubeSettingMgrService.resetTubeSetting(uuid, tubeIndex); - return ApiV1Ret.success(); - } - - @Operation(summary = "修改<试管>用户信息配置") - @PostMapping("/setTubeSettingUserIdAndSampleBarcode") - public ApiV1Ret setTubeSettingUserIdAndSampleBarcode(String uuid, Integer tubeIndex, String userid, String sampleBarcode) throws AppException { - appTubeSettingMgrService.setTubeSettingUserIdAndSampleBarcode(uuid, tubeIndex, userid, sampleBarcode); - return ApiV1Ret.success(); - } - - @Operation(summary = "修改<试管>配置(ps:projIndex格式为逗号分割的数字)") - @PostMapping("/setTubeSetting") - public ApiV1Ret setTubeSetting(String uuid, Integer tubeIndex, BloodType bloodType, String projIndex) throws AppException { - appTubeSettingMgrService.setTubeSetting(uuid, tubeIndex, bloodType, projIndex); - return ApiV1Ret.success(); - } - -} diff --git a/src/main/java/a8k/controler/api_v1/app/ConsumablesMgrControler.java b/src/main/java/a8k/controler/api_v1/app/ConsumablesMgrControler.java deleted file mode 100644 index 6b74701..0000000 --- a/src/main/java/a8k/controler/api_v1/app/ConsumablesMgrControler.java +++ /dev/null @@ -1,72 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appctrl.AppConsumablesScanService; -import a8k.service.app.appstate.ConsumablesMgrService; -import a8k.type.ConsumableGroup; -import a8k.type.ConsumablesScanResultPacket; -import a8k.type.ConsumablesOneChannelScanResultPacket; -import a8k.type.appret.ApiV1Ret; -import a8k.type.exception.AppException; -import a8k.type.type.TipGroup; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "耗材管理", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/consumablesMgrControler/") -@ResponseBody -public class ConsumablesMgrControler { - @Resource - AppConsumablesScanService appConsumablesScanService; //耗材扫描模块 - @Resource - ConsumablesMgrService consumablesMgrService; //耗材管理模块 - - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * 耗材扫描 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - @Operation(summary = "扫描耗材(阻塞接口,耗时大概30多秒)") - @PostMapping("/scanConsumables") - public ApiV1Ret scanConsumables() throws AppException { - log.info("扫描耗材"); - return ApiV1Ret.success(appConsumablesScanService.scanConsumables()); - } - - @Operation(summary = "扫描某一组耗材(阻塞接口,耗时大概5秒)") - @PostMapping("/scanOneGroupConsumables") - public ApiV1Ret scanOneGroupConsumables(ConsumableGroup group) throws AppException { - log.info("扫描某一组耗材"); - return ApiV1Ret.success(appConsumablesScanService.scanOneGroupConsumables(group)); - } - - - /** - * 设置Tip数量 - * @param group Tip组 - * @param num 数量 - */ - @Operation(summary = "设置Tip数量", description = "只允许在设备暂停或者停止状态下调用") - @PostMapping("/setTipNum") - synchronized public ApiV1Ret setTipNum(TipGroup group, Integer num) { - consumablesMgrService.setTipNum(group, num); - return ApiV1Ret.success(); - } - - /** - * 设置耗材数量 - * @param group 耗材组 - * @param num 数量 - */ - @Operation(summary = "设置耗材数量", description = "只允许在设备暂停或者停止状态下调用") - @PostMapping("/setCounsumableNum") - synchronized public ApiV1Ret setCounsumableNum(ConsumableGroup group, Integer num) { - consumablesMgrService.setCounsumableNum(group, num); - return ApiV1Ret.success(); - } -} diff --git a/src/main/java/a8k/controler/api_v1/app/DeviceCtrlControler.java b/src/main/java/a8k/controler/api_v1/app/DeviceCtrlControler.java deleted file mode 100644 index 5c00e8a..0000000 --- a/src/main/java/a8k/controler/api_v1/app/DeviceCtrlControler.java +++ /dev/null @@ -1,65 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appctrl.AppDeviceCtrlService; -import a8k.service.app.appstate.GStateService; -import a8k.service.app.appstate.SensorState; -import a8k.service.app.appstate.type.*; -import a8k.type.appret.ApiV1Ret; -import a8k.type.appret.AppRetV1; -import a8k.type.consumables.ConsumableState; -import a8k.type.exception.AppException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "设备控制", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/deviceCtrl/") -@ResponseBody -public class DeviceCtrlControler { - - @Resource - AppDeviceCtrlService appDeviceCtrlService; - - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // EXT FUNC - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * 设备控制 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - @Operation(description = "开始工作") - @PostMapping("/startWork") - public ApiV1Ret startWork() throws AppException { - appDeviceCtrlService.startWork(); - return ApiV1Ret.success(); - } - - @Operation(description = "停止工作") - @PostMapping("/stopWork") - public ApiV1Ret stopWork() { - appDeviceCtrlService.stopWork(); - return ApiV1Ret.success(); - } - - @Operation(description = "暂停工作") - @PostMapping("/pauseWork") - public ApiV1Ret pauseWork() { - appDeviceCtrlService.pauseWork(); - return ApiV1Ret.success(); - } - - @Operation(description = "继续工作") - @PostMapping("/continueWork") - public ApiV1Ret continueWork() { - appDeviceCtrlService.continueWork(); - return ApiV1Ret.success(); - } - -} diff --git a/src/main/java/a8k/controler/api_v1/app/DeviceStateControler.java b/src/main/java/a8k/controler/api_v1/app/DeviceStateControler.java deleted file mode 100644 index 201b0aa..0000000 --- a/src/main/java/a8k/controler/api_v1/app/DeviceStateControler.java +++ /dev/null @@ -1,73 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appstate.GStateService; -import a8k.service.app.appstate.SensorState; -import a8k.service.app.appstate.type.*; -import a8k.type.appret.ApiV1Ret; -import a8k.type.consumables.ConsumableState; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "设备状态", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/deviceState/") -@ResponseBody -public class DeviceStateControler { - @Resource - GStateService gstate; - - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // EXT FUNC - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - @Operation(summary = "获取主流程工作状态") - @PostMapping("/getDeviceWorkState") - public ApiV1Ret getDeviceWorkState() { - return ApiV1Ret.success(gstate.deviceWorkState); - } - - @Operation(summary = "获取<试管架>状态") - @PostMapping("/getTubeHolderState") - public ApiV1Ret getTubeHolderState() { - return ApiV1Ret.success(gstate.getTubeHolder()); - } - - @Operation(summary = "获取<孵育盘>的状态") - @PostMapping("/getIncubationPlate") - public ApiV1Ret getIncubationPlate() { - return ApiV1Ret.success(gstate.getIncubationPlate()); - } - - @Operation(summary = "获取<光学模组>状态") - @PostMapping("/getOptScanModuleState") - public ApiV1Ret getOptScanModuleState() { - return ApiV1Ret.success(gstate.getOptScanModule()); - } - - @Operation(summary = "获取<急诊位>状态") - @PostMapping("/getEmergencyTubePosState") - public ApiV1Ret getEmergencyTubePosState() { - return ApiV1Ret.success(gstate.getEmergencyTubePos()); - } - - @Operation(summary = "获取<耗材>状态") - @PostMapping("/getConsumablesState") - public ApiV1Ret getConsumablesState() { - return ApiV1Ret.success(gstate.getConsumableState()); - } - - @Operation(summary = "获取<传感器>状态") - @PostMapping("/getSensorState") - public ApiV1Ret getSensorState() { - return ApiV1Ret.success(gstate.getSensorState()); - } - - -} diff --git a/src/main/java/a8k/controler/api_v1/app/OsCtrlControler.java b/src/main/java/a8k/controler/api_v1/app/OsCtrlControler.java deleted file mode 100644 index 091bde3..0000000 --- a/src/main/java/a8k/controler/api_v1/app/OsCtrlControler.java +++ /dev/null @@ -1,87 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.OS; -import a8k.service.app.appctrl.AppDeviceCtrlService; -import a8k.service.app.appstate.GStateService; -import a8k.type.appret.ApiV1Ret; -import a8k.type.exception.AppException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Tag(name = "OS相关操作", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/osCtrl/") -@ResponseBody -public class OsCtrlControler { - - @Resource - GStateService gstate; - - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * 系统控制 - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - @Operation(summary = "获取应用版本") - @PostMapping("/getAppVersion") - public ApiV1Ret getAppVersion() { - return ApiV1Ret.success(gstate.getAppVersion()); - } - - @Operation(summary = "获取MCU版本") - @PostMapping("/getMcuVersion") - public ApiV1Ret getMcuVersion() { - return ApiV1Ret.success(gstate.getMcuVersion()); - } - - @Operation(summary = "获取设备SN") - @PostMapping("/getSn") - public ApiV1Ret getSn() { - return ApiV1Ret.success(gstate.getSn()); - } - - @Operation(summary = "获取设备IP") - @PostMapping("/readdeviceip") - public ApiV1Ret readdeviceip() { - //TODO: - return ApiV1Ret.success("192.168.8.10"); - } - - @Operation(summary = "关机(阻塞)") - @PostMapping("/shutdown") - public ApiV1Ret shutdown() { - //TODO: - OS.forceSleep(5); - return ApiV1Ret.success(); - } - - Boolean beepState = false; - - @Operation(summary = "打开蜂鸣器") - @PostMapping("/startBeepWarning") - public ApiV1Ret startBeepWarning() { - log.info("打开蜂鸣器"); - beepState = true; - return ApiV1Ret.success(); - } - - @Operation(summary = "关闭蜂鸣器") - @PostMapping("/stopBeepWarning") - public ApiV1Ret stopBeepWarning() { - log.info("关闭蜂鸣器"); - beepState = false; - return ApiV1Ret.success(); - } - - @Operation(summary = "获取蜂鸣器状态") - @PostMapping("/getBeepWarningStatus") - public ApiV1Ret getBeepWarningStatus() { - return ApiV1Ret.success(beepState); - } - -} diff --git a/src/main/java/a8k/controler/api_v1/app/ReactionResultControler.java b/src/main/java/a8k/controler/api_v1/app/ReactionResultControler.java deleted file mode 100644 index 9c210b5..0000000 --- a/src/main/java/a8k/controler/api_v1/app/ReactionResultControler.java +++ /dev/null @@ -1,59 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appdata.ReactionRecordMgrService; -import a8k.service.app.appstate.GStateService; -import a8k.service.dao.type.ReactionResultRecord; -import a8k.type.appret.ApiV1Ret; -import a8k.type.db.CommonPage; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; - -@Tag(name = "反应记录", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/reactionResult/") -@ResponseBody -public class ReactionResultControler { - - @Resource - GStateService gstate; - - @Resource - ReactionRecordMgrService reactionRecordMgrService; - - - @PostMapping("/getAllRecords") - public ApiV1Ret> getAllRecords() { - return ApiV1Ret.success(reactionRecordMgrService.getAll()); - } - - @PostMapping("/deleteAllRecords") - public ApiV1Ret deleteAllRecords() { - reactionRecordMgrService.deleteAll(); - return ApiV1Ret.success(); - } - - @PostMapping("/printfRecord") - public ApiV1Ret printfRecord(Integer id) { - reactionRecordMgrService.printfRecord(id); - return ApiV1Ret.success(); - } - - @PostMapping("/deleteRecord") - public ApiV1Ret deleteRecord(Integer id) { - reactionRecordMgrService.deleteRecord(id); - return ApiV1Ret.success(); - } - - @PostMapping("/getRecords") - public ApiV1Ret> getRecords(Integer pageNum, Integer pageSize) { - return ApiV1Ret.success(reactionRecordMgrService.getRecords(pageNum, pageSize)); - } -} diff --git a/src/main/java/a8k/controler/api_v1/app/UsrControler.java b/src/main/java/a8k/controler/api_v1/app/UsrControler.java deleted file mode 100644 index 452ae93..0000000 --- a/src/main/java/a8k/controler/api_v1/app/UsrControler.java +++ /dev/null @@ -1,86 +0,0 @@ -package a8k.controler.api_v1.app; - -import a8k.service.app.appdata.AppUserMgrService; -import a8k.service.dao.type.AppUser; -import a8k.service.dao.type.UsrRole; -import a8k.type.appret.ApiV1Ret; -import a8k.type.exception.AppException; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Tag(name = "用户操作", description = "") -@Slf4j -@Controller -@RequestMapping(value = "/api/v1/app/Usr/") -@ResponseBody -public class UsrControler { - @Resource - AppUserMgrService appUserMgrService; - - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // EXT FUNC - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - @Operation(summary = "用户登录") - @PostMapping("login") - public ApiV1Ret login(String account, String password) throws AppException { - return ApiV1Ret.success(appUserMgrService.login(account, password)); - } - - - @Operation(summary = "用户登出") - @PostMapping("unlogin") - public ApiV1Ret unlogin() { - return ApiV1Ret.success(); - } - - - @Operation(summary = "获取当前用户") - @PostMapping("getLoginUsr") - public ApiV1Ret getLoginUsr() { - return ApiV1Ret.success(new AppUser()); - } - - @Operation(summary = "获取用户列表") - @PostMapping("getUsrlist") - public ApiV1Ret> getUsrlist() { - return ApiV1Ret.success(appUserMgrService.getUsrlist()); - } - - @Operation(summary = "用户添加") - @PostMapping("addUser") - public ApiV1Ret> addUser(String account, String password, UsrRole role) throws AppException { - return ApiV1Ret.success(appUserMgrService.addUser(account, password, role)); - } - - @Operation(summary = "删除用户") - @PostMapping("delUser") - public ApiV1Ret> delUser(String account) { - return ApiV1Ret.success(appUserMgrService.delUser(account)); - } - - @Operation(summary = "修改用户密码") - @PostMapping("modifyUsrPwd") - public ApiV1Ret> modifyUsrPwd(String account, String password) throws AppException { - return ApiV1Ret.success(appUserMgrService.modifyUsrPwd(account, password)); - } - - @Operation(summary = "修改用户权限") - @PostMapping("modifyUsrRole") - public ApiV1Ret> modifyUsrRole(String account, UsrRole usrRole) throws AppException { - return ApiV1Ret.success(appUserMgrService.modifyUsrRole(account, usrRole)); - - } - - @Operation(summary = "修改用户名称") - @PostMapping("modifyUsrAccount") - public ApiV1Ret> modifyUsrAccount(String account, String newaccount) throws AppException { - return ApiV1Ret.success(appUserMgrService.modifyUsrAccount(account, newaccount)); - } -} diff --git a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java index 1632486..be8809c 100644 --- a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java +++ b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java @@ -1,21 +1,12 @@ package a8k.extapi_controler.pagecontrol; public enum ExtApiTabConfig { - AppDebugHelperService("调试助手", true), - FrontEndEventRouter("基础组件.前端事件路由", true), - - AppDeviceCtrlService("应用控制.应用控制", true), - BackgroudProcessCtrlService("应用控制.后台线程控制", true), - - AppTubeSettingMgrService("应用控制.试管(样本)配置", true),//OK - EmergencySamplePosStateMgrService("应用控制.急诊位状态管理", true),//OK - - AppSettingsMgr("应用数据.设备配置管理", true), //OK - ProjIdCardInfoMgrService("应用数据.项目与ID卡管理", true), //OK - AppReactionResultMgrService("应用数据.反应结果管理", true), //OK + VirtualDeviceSimulationTest("测试.虚拟设备测试", true), + MainflowCtrlTestService("测试.主流程控制测试", true), - LowerDeviceParamMgr("底层参数管理", true),//OK + BackgroudProcessCtrlService("测试模式.后台线程控制", true), + LowerDeviceParamMgr("校准.参数管理", true),//OK MiniServoReferencePointSetting("校准.舵机参考点设置", true), ReactionPlatesTransmitControlerCalibration("校准.反应板相关位置校准", true), TubeFeedingModulePosCalibration("校准.试管入料校准", true), @@ -31,13 +22,11 @@ public enum ExtApiTabConfig { OptModuleParamCalibration("校准.光学模块参数校准", true), TemperatureCtrlParamCalibration("校准.温度控制参数校准", true), - VirtualDeviceSimulationTest("测试.虚拟设备测试", true), - MainflowCtrlTestService("测试.主流程控制测试", true), - A8kPipetteCtrlModule("硬件驱动测试.移液枪测试", true), - StepMotorCtrlDriver("硬件驱动测试.步进电机测试", true), + + A8kPipetteCtrlModule("硬件驱动.移液枪测试", false), + StepMotorCtrlDriver("硬件驱动.步进电机测试", false), ActionReactorService("底层调试.单步调试", false),//OK - ReactionPlatesTransmitCtrl("ReactionPlatesTransmitCtrl", false), HbotControlService("HbotControlService", false), TubeTubeFeedingModule("硬件控制.入料模块", false), diff --git a/src/main/java/a8k/service/app/appdata/EmergencyTubeControler.java b/src/main/java/a8k/service/app/appdata/EmergencyTubeControler.java new file mode 100644 index 0000000..b3f0136 --- /dev/null +++ b/src/main/java/a8k/service/app/appdata/EmergencyTubeControler.java @@ -0,0 +1,42 @@ +package a8k.service.app.appdata; + + +import a8k.controler.api.v1.type.EmergencyTubeSetting; +import a8k.service.app.appstate.EmergencySamplePosStateMgrService; +import a8k.service.app.appstate.GStateService; +import a8k.type.appret.ApiV1Ret; +import a8k.type.exception.AppException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Tag(name = "急诊试管", description = "") +@Slf4j +@Controller +@RequestMapping(value = "/api/v1/app/emergencyTube/") +@ResponseBody +public class EmergencyTubeControler { + @Resource + GStateService gstate; + + @Resource + EmergencySamplePosStateMgrService emergencySamplePosStateMgrService; + + @Operation(summary = "提交紧急样本设置") + @PostMapping("/addNew") + public ApiV1Ret addNew(EmergencyTubeSetting setting) throws AppException { + emergencySamplePosStateMgrService.commitEmergencySampleSetting( + setting.getUserid(), + setting.getSampleBarcode(), + setting.getBloodType(), + setting.getProjIds() + ); + return ApiV1Ret.success(); + } + +} diff --git a/src/main/java/a8k/service/app/appdata/ProjIdCardInfoMgrService.java b/src/main/java/a8k/service/app/appdata/ProjIdCardInfoMgrService.java index bf06f7e..6970274 100644 --- a/src/main/java/a8k/service/app/appdata/ProjIdCardInfoMgrService.java +++ b/src/main/java/a8k/service/app/appdata/ProjIdCardInfoMgrService.java @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.List; @Component -@ExtApiTab(cfg = ExtApiTabConfig.ProjIdCardInfoMgrService) public class ProjIdCardInfoMgrService { @Resource GStateService gstate; diff --git a/src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java b/src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java index 773aa1d..826fd2d 100644 --- a/src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java +++ b/src/main/java/a8k/service/app/appstate/EmergencySamplePosStateMgrService.java @@ -21,7 +21,6 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; -@ExtApiTab(cfg = ExtApiTabConfig.EmergencySamplePosStateMgrService) @Component public class EmergencySamplePosStateMgrService { static Logger logger = org.slf4j.LoggerFactory.getLogger(EmergencySamplePosStateMgrService.class); @@ -44,33 +43,23 @@ public class EmergencySamplePosStateMgrService { * * 提交后就默认样本已经放置好了,所以需要前台提醒用户需要先暂停设备,放好样本 */ - @ExtApiFn(name = "提交紧急样本设置", group = "紧急样本设置") public void commitEmergencySampleSetting(String userid, String sampleBarcode, BloodType bloodType,// - @EnginnerPageActionParam(name = "逗号分割项目列表(例子1,2,3)") String projIndexList) throws AppException { + List projIds) throws AppException { EmergencyTubePos emergencyTubePos = gstate.getEmergencyTubePos(); Tube tube = emergencyTubePos.tube; - List projIndex = new ArrayList<>(); List projInfo = new ArrayList<>(); if (gstate.getDeviceWorkState().workState.equals(A8kWorkState.WORKING)) { throw new AppException(A8kEcode.APPE_ACTION_IS_NOT_ALLOWED_WHEN_WORKING); } - if(projIndexList == null || projIndexList.isEmpty()) { + if (projIds.isEmpty()) { throw new AppException(A8kEcode.APPE_PROJ_INDEX_IS_EMPTY); } - for (String index : projIndexList.split(",")) { - projIndex.add(Integer.parseInt(index)); - } - - - if (projIndex.isEmpty()) { - throw new AppException(A8kEcode.APPE_PROJ_INDEX_IS_EMPTY); - } - projInfo = projCfgMgrService.getProjBriefInfo(projIndex); - if (projInfo == null || projInfo.size() != projIndex.size()) { + projInfo = projCfgMgrService.getProjBriefInfo(projIds); + if (projInfo == null || projInfo.size() != projIds.size()) { throw new AppException(A8kEcode.APPE_CAN_NOT_FIND_PROJ_INFO); } @@ -93,7 +82,6 @@ public class EmergencySamplePosStateMgrService { } } - @ExtApiFn(name = "获取急诊样本位状态", group = "急诊样本位状态") public EmergencyTubePos getEmergencyPosRunState() { return gstate.getEmergencyTubePos(); } diff --git a/src/main/java/a8k/service/app/appstate/SensorState.java b/src/main/java/a8k/service/app/appstate/SensorState.java index 7d14a77..72e7de3 100644 --- a/src/main/java/a8k/service/app/appstate/SensorState.java +++ b/src/main/java/a8k/service/app/appstate/SensorState.java @@ -11,6 +11,8 @@ public class SensorState { Integer incubateBoxTemperature = 25; @Schema(description = "废液桶满标志") Boolean wasteBinFullFlag = false; + @Schema(description = "A8K项目卡状态") + Boolean A8kProjCardState = false; public synchronized Integer getPboxTemperature() { return pboxTemperature; diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java index 3656e69..cef3a28 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/OptScanModuleCtrlService.java @@ -32,7 +32,6 @@ import org.springframework.util.Assert; @Component @Slf4j -@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitCtrl) public class OptScanModuleCtrlService { static final Integer overtime = 10000; diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/PlateBoxCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/PlateBoxCtrlService.java index 475a6c4..0656f02 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/PlateBoxCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/PlateBoxCtrlService.java @@ -15,7 +15,6 @@ import org.springframework.stereotype.Component; @Component @Slf4j -@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitCtrl) public class PlateBoxCtrlService { static final Integer overtime = 10000; diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TurnableMoveCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TurnableMoveCtrlService.java index 47c3fe5..f626d25 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TurnableMoveCtrlService.java +++ b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TurnableMoveCtrlService.java @@ -18,7 +18,6 @@ import org.springframework.stereotype.Component; @Component @Slf4j -@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitCtrl) public class TurnableMoveCtrlService { static final Integer overtime = 10000; diff --git a/src/main/java/a8k/service/bases/appevent/AppEvent.java b/src/main/java/a8k/service/bases/appevent/AppEvent.java index 0132bb6..90b38ba 100644 --- a/src/main/java/a8k/service/bases/appevent/AppEvent.java +++ b/src/main/java/a8k/service/bases/appevent/AppEvent.java @@ -6,7 +6,7 @@ import java.util.UUID; public class AppEvent { public String typeName; public Integer timestamp = (int) (new Date().getTime() / 1000); - public String id = UUID.randomUUID().toString(); +// public String id = UUID.randomUUID().toString(); public AppEvent(String typeName) { this.typeName = typeName; diff --git a/src/main/java/a8k/type/appret/ApiV1Ret.java b/src/main/java/a8k/type/appret/ApiV1Ret.java index f46c3d8..9f33f24 100644 --- a/src/main/java/a8k/type/appret/ApiV1Ret.java +++ b/src/main/java/a8k/type/appret/ApiV1Ret.java @@ -13,9 +13,7 @@ import org.springframework.web.method.annotation.HandlerMethodValidationExceptio @JsonInclude(JsonInclude.Include.NON_NULL) public class ApiV1Ret { // 错误信息 - @Schema(name = "数据类型") public String dataType; - @Schema(name = "数据") public T data; // 接口请求时间 diff --git a/src/main/java/a8k/type/ecode/AECodeError.java b/src/main/java/a8k/type/ecode/AECodeError.java index 15e5a2e..8ec50a9 100644 --- a/src/main/java/a8k/type/ecode/AECodeError.java +++ b/src/main/java/a8k/type/ecode/AECodeError.java @@ -1,8 +1,10 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import io.swagger.v3.oas.annotations.media.Schema; public class AECodeError extends AppError { + @Schema(description = "额外信息") public String exmsg; public AECodeError(String exmsg) { diff --git a/src/main/java/a8k/type/ecode/AECommonError.java b/src/main/java/a8k/type/ecode/AECommonError.java index ad6748c..d3aae34 100644 --- a/src/main/java/a8k/type/ecode/AECommonError.java +++ b/src/main/java/a8k/type/ecode/AECommonError.java @@ -1,8 +1,10 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import io.swagger.v3.oas.annotations.media.Schema; public class AECommonError extends AppError { + @Schema(description = "异常信息") public String exmsg; public AECommonError(String exmsg) { diff --git a/src/main/java/a8k/type/ecode/AEConsumeNotEnoughError.java b/src/main/java/a8k/type/ecode/AEConsumeNotEnoughError.java index 14ab437..0c15e07 100644 --- a/src/main/java/a8k/type/ecode/AEConsumeNotEnoughError.java +++ b/src/main/java/a8k/type/ecode/AEConsumeNotEnoughError.java @@ -1,8 +1,10 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import io.swagger.v3.oas.annotations.media.Schema; public class AEConsumeNotEnoughError extends AppError { + @Schema(description = "项目名称") public String projName; public AEConsumeNotEnoughError(String projName) { diff --git a/src/main/java/a8k/type/ecode/AEHardwareError.java b/src/main/java/a8k/type/ecode/AEHardwareError.java index c483ffa..e6d8202 100644 --- a/src/main/java/a8k/type/ecode/AEHardwareError.java +++ b/src/main/java/a8k/type/ecode/AEHardwareError.java @@ -3,9 +3,12 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.CmdId; import a8k.hardware.type.a8kcanprotocol.MId; +import io.swagger.v3.oas.annotations.media.Schema; public class AEHardwareError extends AppError { + @Schema(description = "模块id(辅助调试,直接原始显示就行)") public MId mid; + @Schema(description = "命令id(辅助调试,直接原始显示就行)") public CmdId cmdId; public AEHardwareError(A8kEcode errorCode, MId mid, CmdId cmdId) { diff --git a/src/main/java/a8k/type/ecode/AETubeError.java b/src/main/java/a8k/type/ecode/AETubeError.java index 917075d..fa433b6 100644 --- a/src/main/java/a8k/type/ecode/AETubeError.java +++ b/src/main/java/a8k/type/ecode/AETubeError.java @@ -1,8 +1,10 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import io.swagger.v3.oas.annotations.media.Schema; public class AETubeError extends AppError { + @Schema(description = "试管在试管架中偏移", example = "1") public Integer tubeOff; public AETubeError(A8kEcode ecode, Integer tubeOff) { diff --git a/src/main/java/a8k/type/ecode/AEUnkownExceptionError.java b/src/main/java/a8k/type/ecode/AEUnkownExceptionError.java index 299312d..3e7406a 100644 --- a/src/main/java/a8k/type/ecode/AEUnkownExceptionError.java +++ b/src/main/java/a8k/type/ecode/AEUnkownExceptionError.java @@ -1,12 +1,22 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.Arrays; public class AEUnkownExceptionError extends AppError { + @Schema(description = "异常描述") + public String decription; + @Schema(description = "异常栈信息") + public String stackTrace; Exception exception; + public AEUnkownExceptionError(Exception exception) { super(A8kEcode.CODEERROR_UNKOWN_EXCEPTION); - this.exception = exception; + this.decription = exception.getMessage(); + this.stackTrace = Arrays.toString(exception.getStackTrace()); + this.exception = exception; } } diff --git a/src/main/java/a8k/type/ecode/AppError.java b/src/main/java/a8k/type/ecode/AppError.java index 7b64165..3aa8562 100644 --- a/src/main/java/a8k/type/ecode/AppError.java +++ b/src/main/java/a8k/type/ecode/AppError.java @@ -2,11 +2,16 @@ package a8k.type.ecode; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.utils.ZJsonHelper; +import io.swagger.v3.oas.annotations.media.Schema; public class AppError { + @Schema(description = "错误码") public A8kEcode code; + public String type; + public AppError(A8kEcode errorCode) { this.code = errorCode; + this.type = this.getClass().getSimpleName(); } public String toString() { diff --git a/src/main/java/a8k/utils/ZSqlite.java b/src/main/java/a8k/utils/ZSqlite.java index 11370db..b8bf38e 100644 --- a/src/main/java/a8k/utils/ZSqlite.java +++ b/src/main/java/a8k/utils/ZSqlite.java @@ -3,12 +3,15 @@ package a8k.utils; import a8k.type.db.CommonPage; import jakarta.annotation.Nullable; import lombok.SneakyThrows; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import java.sql.ResultSet; import java.util.List; public class ZSqlite { + private static final Logger log = LoggerFactory.getLogger(ZSqlite.class); JdbcTemplate jdbcTemplate; Class tClass; public String tableName; @@ -58,7 +61,11 @@ public class ZSqlite { } public T findById(int id) { - return jdbcTemplate.query("select * from " + tableName + " where id = ?", this::rowMapperOne, id); + List list = jdbcTemplate.query("select * from " + tableName + " where id = ?", this::rowMapperList, id); + if (list.isEmpty()) { + return null; + } + return list.get(0); } @@ -67,10 +74,10 @@ public class ZSqlite { return tClass.cast(ret); } - @SneakyThrows public T rowMapperOne(ResultSet rs) { - // return (T) ZSqliteJdbcHelper.rowMapper(rs, tClass); - return tClass.cast(ZSqliteJdbcHelper.rowMapper(rs, tClass)); - } + // @SneakyThrows public T rowMapperOne(ResultSet rs) { + // // return (T) ZSqliteJdbcHelper.rowMapper(rs, tClass); + // return tClass.cast(ZSqliteJdbcHelper.rowMapper(rs, tClass)); + // } public Boolean isTableExist() { return ZSqliteJdbcHelper.isTableExist(jdbcTemplate, tableName); @@ -106,7 +113,11 @@ public class ZSqlite { } public T queryOne(String sql, @Nullable Object... args) { - return jdbcTemplate.query(sql, this::rowMapperOne, args); + List list = jdbcTemplate.query(sql, this::rowMapperList, args); + if (list.isEmpty()) { + return null; + } + return list.get(0); } public List queryList(String sql, @Nullable Object... args) {