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;
+ }
}