diff --git a/pom.xml b/pom.xml index 36cedc2..04470ea 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,11 @@ 2.3.0 + + org.springframework.boot + spring-boot-starter-validation + + diff --git a/src/main/java/a8k/controler/AppSettingControler.java b/src/main/java/a8k/controler/AppSettingControler.java new file mode 100644 index 0000000..c3185aa --- /dev/null +++ b/src/main/java/a8k/controler/AppSettingControler.java @@ -0,0 +1,136 @@ +package a8k.controler; + +import a8k.service.app.appsetting.AppSettingsMgrService; +import a8k.service.db.type.AppSetting; +import a8k.service.db.type.appsetting.settingenum.*; +import a8k.type.appret.AppRetV2; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +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.util.Assert; +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 AppRetV2 getAppSettings() { + return AppRetV2.success(appSettingsMgrService.getAppSettings()); + } + + + @Operation(summary = "设置语言") + @PostMapping("/setLanguage") + public AppRetV2 setLanguage(@NotNull LanguageType val) { + appSettingsMgrService.setLanguage(val); + return AppRetV2.success(); + } + + + @Operation(summary = "设置自动打印报告") + @PostMapping("/setAutoPrint") + public AppRetV2 setAutoPrint(@NotNull Boolean val) { + appSettingsMgrService.setAutoPrint(val); + return AppRetV2.success(); + } + + + @Operation(summary = "设置自动登出") + @PostMapping("/setAutoLogout") + public AppRetV2 setAutoLogout(@NotNull Boolean val) { + appSettingsMgrService.setAutoLogout(val); + return AppRetV2.success(); + } + + + @Operation(summary = "设置LIS类型") + @PostMapping("/setLISType") + public AppRetV2 setLISType(@NotNull LISTypeEnum val) { + appSettingsMgrService.setLISType(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LIS协议") + @PostMapping("/setLISProtocol") + public AppRetV2 setLISProtocol(@NotNull LISProtocolEnum val) { + appSettingsMgrService.setLISProtocol(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LIS接口") + @PostMapping("/setLIFIf") + public AppRetV2 setLIFIf(@NotNull LISIFType val) { + appSettingsMgrService.setLIFIf(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LIS是否自动上报报告") + @PostMapping("/setLISAutoExport") + public AppRetV2 setLISAutoExport( @NotNull Boolean val) { + appSettingsMgrService.setLISAutoExport(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LIS串口波特率") + @PostMapping("/setLISSerialBaudrate") + public AppRetV2 setLISSerialBaudrate(@NotNull LISSerialBaudrateType val) { + appSettingsMgrService.setLISSerialBaudrate(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LISIP") + @PostMapping("/setLISNetIp") + public AppRetV2 setLISNetIp(@NotNull String val) { + appSettingsMgrService.setLISNetIp(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置LIS端口") + @PostMapping("/setLISNetPort") + public AppRetV2 setLISNetPort(@NotNull Integer val) { + appSettingsMgrService.setLISNetPort(val); + return AppRetV2.success(); + + } + + + @Operation(summary = "设置设备温度") + @PostMapping("/setTemperature") + public AppRetV2 setTemperature(Integer val) { + log.info("setTemperature:{}", val); + appSettingsMgrService.setTemperature(val); + return AppRetV2.success(); + } + +} diff --git a/src/main/java/a8k/controler/UsrControler.java b/src/main/java/a8k/controler/UsrControler.java index 94a3be7..0ebdc33 100644 --- a/src/main/java/a8k/controler/UsrControler.java +++ b/src/main/java/a8k/controler/UsrControler.java @@ -27,58 +27,58 @@ public class UsrControler { // EXT FUNC // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - @Operation(description = "用户登录") + @Operation(summary = "用户登录") @PostMapping("login") public AppRetV2 login(String account, String password) throws AppException { return AppRetV2.success(appUserMgrService.login(account, password)); } - @Operation(description = "用户登出") + @Operation(summary = "用户登出") @PostMapping("unlogin") public AppRetV2 unlogin() { return AppRetV2.success(); } - @Operation(description = "获取当前用户") + @Operation(summary = "获取当前用户") @PostMapping("getLoginUsr") public AppRetV2 getLoginUsr() { return AppRetV2.success(new AppUser()); } - @Operation(description = "获取用户列表") + @Operation(summary = "获取用户列表") @PostMapping("getUsrlist") public AppRetV2> getUsrlist() { return AppRetV2.success(appUserMgrService.getUsrlist()); } - @Operation(description = "用户添加") + @Operation(summary = "用户添加") @PostMapping("addUser") public AppRetV2> addUser(String account, String password, UsrRole role) throws AppException { return AppRetV2.success(appUserMgrService.addUser(account, password, role)); } - @Operation(description = "删除用户") + @Operation(summary = "删除用户") @PostMapping("delUser") public AppRetV2> delUser(String account) { return AppRetV2.success(appUserMgrService.delUser(account)); } - @Operation(description = "修改用户密码") + @Operation(summary = "修改用户密码") @PostMapping("modifyUsrPwd") public AppRetV2> modifyUsrPwd(String account, String password) throws AppException { return AppRetV2.success(appUserMgrService.modifyUsrPwd(account, password)); } - @Operation(description = "修改用户权限") + @Operation(summary = "修改用户权限") @PostMapping("modifyUsrRole") public AppRetV2> modifyUsrRole(String account, UsrRole usrRole) throws AppException { return AppRetV2.success(appUserMgrService.modifyUsrRole(account, usrRole)); } - @Operation(description = "修改用户名称") + @Operation(summary = "修改用户名称") @PostMapping("modifyUsrAccount") public AppRetV2> modifyUsrAccount(String account, String newaccount) throws AppException { return AppRetV2.success(appUserMgrService.modifyUsrAccount(account, newaccount)); diff --git a/src/main/java/a8k/service/app/appsetting/AppSettingsMgr.java b/src/main/java/a8k/service/app/appsetting/AppSettingsMgrService.java similarity index 54% rename from src/main/java/a8k/service/app/appsetting/AppSettingsMgr.java rename to src/main/java/a8k/service/app/appsetting/AppSettingsMgrService.java index cd17d15..4bc9413 100644 --- a/src/main/java/a8k/service/app/appsetting/AppSettingsMgr.java +++ b/src/main/java/a8k/service/app/appsetting/AppSettingsMgrService.java @@ -15,24 +15,8 @@ import org.springframework.stereotype.Component; @Component @ExtApiTab(cfg = ExtApiTabConfig.AppSettingsMgr) -public class AppSettingsMgr { - Logger logger = org.slf4j.LoggerFactory.getLogger(AppSettingsMgr.class); - - static class ORDER { - final static int getAppSetting = 1; - final static int setLanguage = 2; - final static int setAutoPrint = 3; - final static int setAutoLogout = 4; - final static int setLISType = 5; - final static int setLISProtocol = 6; - final static int setLIFIf = 7; - final static int setLISAutoExport = 8; - final static int setLISSerialBaudrate = 9; - final static int setLISNetIp = 10; - final static int setLISNetPort = 11; - final static int setTemperature = 12; - - } +public class AppSettingsMgrService { + Logger logger = org.slf4j.LoggerFactory.getLogger(AppSettingsMgrService.class); @Resource AppSettingDBService appSettingDBService; @@ -51,110 +35,84 @@ public class AppSettingsMgr { // EXT FUNC // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - @ExtApiFn(name = "getAppSetting", group = "读取", order = ORDER.getAppSetting) + public AppSetting getAppSettings() { return appSettingDBService.get(); } - @ExtApiFn(name = "getEnumRangeLanguageType", group = "枚举类型") - public LanguageType[] getEnumRangeLanguageType() { - return LanguageType.values(); - } - - @ExtApiFn(name = "getEnumRangeAppSettingType", group = "枚举类型") - public LISTypeEnum[] getEnumRangeLISTypeEnum() { - return LISTypeEnum.values(); - } - - @ExtApiFn(name = "getEnumRangeLISProtocolEnum", group = "枚举类型") - public LISProtocolEnum[] getEnumRangeLISProtocolEnum() { - return LISProtocolEnum.values(); - } - - @ExtApiFn(name = "getEnumRangeLISIFTypeEnum", group = "枚举类型") - public LISIFType[] getEnumRangeLISIFType() { - return LISIFType.values(); - } - - @ExtApiFn(name = "getEnumRangeLISSerialBaudrateType", group = "枚举类型") - public LISSerialBaudrateType[] getEnumRangeLISSerialBaudrateType() { - return LISSerialBaudrateType.values(); - } - - @ExtApiFn(name = "setLanguage", group = "设置", order = ORDER.setLanguage) public void setLanguage(LanguageType val) { AppSetting setting = appSettingDBService.get(); setting.language = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setAutoPrint", group = "设置", order = ORDER.setAutoPrint) + public void setAutoPrint(Boolean val) { AppSetting setting = appSettingDBService.get(); setting.autoPrint = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setAutoLogout", group = "设置", order = ORDER.setAutoLogout) + public void setAutoLogout(Boolean val) { AppSetting setting = appSettingDBService.get(); setting.autoLogout = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISType", group = "设置", order = ORDER.setLISType) + public void setLISType(LISTypeEnum val) { AppSetting setting = appSettingDBService.get(); setting.LISType = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISProtocol", group = "设置", order = ORDER.setLISProtocol) + public void setLISProtocol(LISProtocolEnum val) { AppSetting setting = appSettingDBService.get(); setting.LISProtocol = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLIFIf", group = "设置", order = ORDER.setLIFIf) + public void setLIFIf(LISIFType val) { AppSetting setting = appSettingDBService.get(); setting.LIFIf = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISAutoExport", group = "设置", order = ORDER.setLISAutoExport) + public void setLISAutoExport(Boolean val) { AppSetting setting = appSettingDBService.get(); setting.LISAutoExport = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISSerialBaudrate", group = "设置", order = ORDER.setLISSerialBaudrate) + public void setLISSerialBaudrate(LISSerialBaudrateType val) { AppSetting setting = appSettingDBService.get(); setting.LISSerialBaudrate = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISNetIp", group = "设置", order = ORDER.setLISNetIp) + public void setLISNetIp(String val) { AppSetting setting = appSettingDBService.get(); setting.LISNetIp = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setLISNetPort", group = "设置", order = ORDER.setLISNetPort) + public void setLISNetPort(Integer val) { AppSetting setting = appSettingDBService.get(); setting.LISNetPort = val; appSettingDBService.update(setting); } - @ExtApiFn(name = "setTemperature", group = "设置", order = ORDER.setTemperature) + public void setTemperature(Integer val) { AppSetting setting = appSettingDBService.get(); - setting.temperature = val; + setting.setTemperature(val); appSettingDBService.update(setting); } diff --git a/src/main/java/a8k/service/app/background/TemperatureCtrlService.java b/src/main/java/a8k/service/app/background/TemperatureCtrlService.java index 8e3ef1d..03dc009 100644 --- a/src/main/java/a8k/service/app/background/TemperatureCtrlService.java +++ b/src/main/java/a8k/service/app/background/TemperatureCtrlService.java @@ -1,7 +1,7 @@ package a8k.service.app.background; -import a8k.service.app.appsetting.AppSettingsMgr; +import a8k.service.app.appsetting.AppSettingsMgrService; import a8k.service.app.devicectrl.driver.TemperatureControlDriver; import a8k.service.db.type.AppSetting; import a8k.service.test.state.VirtualDevice; @@ -22,7 +22,7 @@ public class TemperatureCtrlService { VirtualDevice virtualDevice; @Resource - AppSettingsMgr appSettingsMgr; + AppSettingsMgrService appSettingsMgrService; Integer temperature = 0; Thread temperatureCtrlThread = null; @@ -41,7 +41,7 @@ public class TemperatureCtrlService { return; } - AppSetting setting = appSettingsMgr.getAppSettings(); + AppSetting setting = appSettingsMgrService.getAppSettings(); temperature = setting.getTemperature(); temperatureControlDriver.startCtrlTemperature(temperature.doubleValue()); @@ -53,7 +53,7 @@ public class TemperatureCtrlService { try { Thread.sleep(1000); - Integer targetTemperature = appSettingsMgr.getAppSettings().getTemperature(); + Integer targetTemperature = appSettingsMgrService.getAppSettings().getTemperature(); if (!targetTemperature.equals(temperature)) { temperature = targetTemperature; temperatureControlDriver.startCtrlTemperature(temperature.doubleValue()); diff --git a/src/main/java/a8k/service/db/AppSettingDBService.java b/src/main/java/a8k/service/db/AppSettingDBService.java index 4b0a931..53ae5cf 100644 --- a/src/main/java/a8k/service/db/AppSettingDBService.java +++ b/src/main/java/a8k/service/db/AppSettingDBService.java @@ -6,11 +6,13 @@ import a8k.service.db.type.AppSetting; import a8k.utils.ZSqliteJdbcHelper; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; +import jakarta.validation.Valid; import lombok.SneakyThrows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; import java.sql.ResultSet; import java.util.List; @@ -19,6 +21,7 @@ import java.util.List; * ID卡数据库服务 */ @Component +@Validated public class AppSettingDBService { private static final Logger logger = LoggerFactory.getLogger(AppSettingDBService.class); private static final String tableName = "zapp_a8k_appsetting"; @@ -53,7 +56,7 @@ public class AppSettingDBService { return list.get(0); } - public void update(AppSetting appSetting) { + public void update(@Valid AppSetting appSetting) { ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, AppSetting.class, appSetting); } diff --git a/src/main/java/a8k/service/db/type/AppSetting.java b/src/main/java/a8k/service/db/type/AppSetting.java index c0b8fa7..b061db2 100644 --- a/src/main/java/a8k/service/db/type/AppSetting.java +++ b/src/main/java/a8k/service/db/type/AppSetting.java @@ -1,20 +1,61 @@ package a8k.service.db.type; import a8k.service.db.type.appsetting.settingenum.*; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.Data; @Data +@Schema(description = "AppSetting") public class AppSetting { - public int id = 0; - public LanguageType language = LanguageType.zh_CN; - public Boolean autoPrint = false; - public Boolean autoLogout = false; - public LISTypeEnum LISType = LISTypeEnum.SINGLE_TRACK; - public LISProtocolEnum LISProtocol = LISProtocolEnum.Boditech; - public LISIFType LIFIf = LISIFType.NETWORK; - public Boolean LISAutoExport = true; + public int id = 0; + + @Schema(description = "语言") + @NotNull + public LanguageType language = LanguageType.zh_CN; + + @Schema(description = "自动打印报告") + @NotNull + public Boolean autoPrint = false; + + @Schema(description = "自动登出") + @NotNull + public Boolean autoLogout = false; + + @Schema(description = "LIS类型") + @NotNull + public LISTypeEnum LISType = LISTypeEnum.SINGLE_TRACK; + + @Schema(description = "LIS协议") + @NotNull + public LISProtocolEnum LISProtocol = LISProtocolEnum.Boditech; + + @Schema(description = "LIS接口") + @NotNull + public LISIFType LIFIf = LISIFType.NETWORK; + + @Schema(description = "LIS是否自动上报报告") + @NotNull + public Boolean LISAutoExport = true; + + @Schema(description = "LIS串口波特率") + @NotNull public LISSerialBaudrateType LISSerialBaudrate = LISSerialBaudrateType.B9600; - public String LISNetIp = "127.0.0.1"; - public Integer LISNetPort = 9973; - public Integer temperature = 25; + + @Schema(description = "LISIP") + @NotNull + public String LISNetIp = "127.0.0.1"; + + @Schema(description = "LIS端口") + @NotNull + public Integer LISNetPort = 9973; + + @Schema(description = "设备温度") + @NotNull + @Min(15) + @Max(35) + public Integer temperature = 25; + } diff --git a/src/main/java/a8k/type/appret/AppRetV1.java b/src/main/java/a8k/type/appret/AppRetV1.java index 848978a..b27d867 100644 --- a/src/main/java/a8k/type/appret/AppRetV1.java +++ b/src/main/java/a8k/type/appret/AppRetV1.java @@ -4,7 +4,10 @@ import a8k.type.ecode.AppCodeError; import a8k.type.ecode.AppError; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.type.exception.AppException; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.ValidationException; import lombok.Getter; +import org.springframework.web.method.annotation.HandlerMethodValidationException; public class AppRetV1 { // 错误信息 @@ -36,6 +39,10 @@ public class AppRetV1 { AppRetV1 r = new AppRetV1(); if (e instanceof AppException hexcep) { r.ecode = hexcep.error; + } else if (e instanceof ValidationException ex) { + r.ecode = new AppCodeError(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE, ex.getLocalizedMessage()); + } else if (e instanceof HandlerMethodValidationException validationE) { + r.ecode = new AppCodeError(A8kEcode.CODEERROR_PARAM_OUT_OF_RANGE, validationE.getMessage()); } else { r.ecode = new AppCodeError(e.getMessage()); } diff --git a/src/main/java/a8k/type/appret/AppRetV2.java b/src/main/java/a8k/type/appret/AppRetV2.java index 81888bd..d183dfc 100644 --- a/src/main/java/a8k/type/appret/AppRetV2.java +++ b/src/main/java/a8k/type/appret/AppRetV2.java @@ -36,7 +36,7 @@ public class AppRetV2 { return r; } - public static AppRetV2 success() { + public static AppRetV2 success() { return new AppRetV2<>(); } diff --git a/src/main/java/a8k/type/ecode/AppCodeError.java b/src/main/java/a8k/type/ecode/AppCodeError.java index 789c403..eac02ea 100644 --- a/src/main/java/a8k/type/ecode/AppCodeError.java +++ b/src/main/java/a8k/type/ecode/AppCodeError.java @@ -11,5 +11,9 @@ public class AppCodeError extends AppError { this.exmsg = exmsg; } + public AppCodeError(A8kEcode ecode, String exmsg) { + super(ecode); + this.exmsg = exmsg; + } }