Browse Source

update

tags/v0
zhaohe 1 year ago
parent
commit
c5948de26e
  1. 11
      src/main/java/a8k/service/appconsumable/AppConsumablesMgrService.java
  2. 19
      src/main/java/a8k/service/appctrl/AppCtrlService.java
  3. 72
      src/main/java/a8k/service/appsettings/AppSettingsMgr.java
  4. 6
      src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java
  5. 2
      src/main/java/a8k/service/hardware/canbus/protocol/RegIndex.java
  6. 119
      src/main/java/a8k/service/project_mgr/AppProjectItemMgrService.java

11
src/main/java/a8k/service/appconsumable/AppConsumablesMgrService.java

@ -10,11 +10,18 @@ import a8k.service.appconsumable.base.ReactantItem;
import a8k.service.appconsumable.base.TipGroupInfo;
import a8k.service.appstate.AppStateMgrService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@EngineerPageTab(name = "应用-耗材管理服务", order = EnginnerPageTabOrder.AppConsumablesMgrService)
@Component
public class AppConsumablesMgrService {
static Logger logger = org.slf4j.LoggerFactory.getLogger(AppConsumablesMgrService.class);
static class ORDER {
static final int scanningConsumables = 1;
static final int getConsumables = 2;
}
@Resource
ProjectColorAllocer projectColorAllocer;
@ -23,7 +30,7 @@ public class AppConsumablesMgrService {
AppStateMgrService stateMgrService;
//扫描耗材
@EnginnerPageAction(name = "扫描耗材")
@EnginnerPageAction(name = "扫描耗材", order = ORDER.scanningConsumables)
public AppRet<Consumables> scanningConsumables() {
Consumables var = new Consumables();
for (int i = 0; i < 6; i++) {
@ -43,7 +50,7 @@ public class AppConsumablesMgrService {
return AppRet.success(var);
}
@EnginnerPageAction(name = "获取耗材状态")
@EnginnerPageAction(name = "获取耗材状态", order = ORDER.getConsumables)
public AppRet<Consumables> getConsumables() {
return AppRet.success(stateMgrService.getConsumable());
}

19
src/main/java/a8k/service/appctrl/AppCtrlService.java

@ -13,9 +13,12 @@ public class AppCtrlService {
static final Logger logger = org.slf4j.LoggerFactory.getLogger(AppCtrlService.class);
static class ORDER {
static final int initDevice = 1;
static final int initDevice = 1;
static final int shutdown = 2;
static final int startProcess = 3;
static final int pauseProcess = 4;
static final int forceStopProcess = 5;
static final int stopProcess = 6;
}
@EnginnerPageAction(name = "初始化设备", group = "设备基础控制", order = ORDER.initDevice)
@ -24,31 +27,31 @@ public class AppCtrlService {
}
//关机
@EnginnerPageAction(name = "关机", group = "设备基础控制", order = 1)
@EnginnerPageAction(name = "关机", group = "设备基础控制", order = ORDER.shutdown)
public AppRet<Object> shutdown() {
return AppRet.success();
}
//启动
@EnginnerPageAction(name = "启动", group = "应用控制", groupOrder = 1, order = 1)
@EnginnerPageAction(name = "启动", group = "应用控制", order = ORDER.startProcess)
public AppRet<Object> startProcess() {
return AppRet.success();
}
//暂停
@EnginnerPageAction(name = "暂停", group = "应用控制", order = 2)
@EnginnerPageAction(name = "暂停", group = "应用控制", order = ORDER.pauseProcess)
public AppRet<Object> pauseProcess() {
return AppRet.success();
}
//急停
@EnginnerPageAction(name = "急停", group = "应用控制", order = 3)
@EnginnerPageAction(name = "急停", group = "应用控制", order = ORDER.forceStopProcess)
public AppRet<Object> forceStopProcess() {
return AppRet.success();
}
//停止
@EnginnerPageAction(name = "停止", group = "应用控制", order = 4)
@EnginnerPageAction(name = "停止", group = "应用控制", order = ORDER.stopProcess)
public AppRet<Object> stopProcess() {
return AppRet.success();
}

72
src/main/java/a8k/service/appsettings/AppSettingsMgr.java

@ -3,12 +3,14 @@ package a8k.service.appsettings;
import a8k.appbase.appret.AppRet;
import a8k.controler.engineer.utils.EngineerPageTab;
import a8k.controler.engineer.utils.EnginnerPageAction;
import a8k.controler.engineer.utils.EnginnerPageTabOrder;
import a8k.db.AppSetting;
import a8k.service.appsettings.base.AppSettingTab;
import a8k.service.appsettings.base.AppOptionName;
import a8k.service.appsettings.settingenum.AutoLogoutTime;
import a8k.service.appsettings.settingenum.LISProtocol;
import a8k.service.appsettings.settingenum.LISType;
import a8k.service.hardware.canbus.protocol.A8kEcode;
import com.iflytop.uf.UfActiveRecord;
import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
@ -20,25 +22,20 @@ import java.util.Map;
import java.util.Objects;
@Component
@EngineerPageTab(name = "AppSettings")
@EngineerPageTab(name = "应用-系统设置", order = EnginnerPageTabOrder.AppSettingsMgr)
public class AppSettingsMgr {
Logger logger = org.slf4j.LoggerFactory.getLogger(AppSettingsMgr.class);
static Integer settingPageVersion = 1;
List<AppSetting> dbGetAppSettings() {
return UfActiveRecord.find(AppSetting.class);
static class ORDER {
static final int getAppSettings = 1;
static final int getTabs = 2;
static final int setSysDate = 3;
static final int setSysTime = 4;
static final int setOptionVal = 5;
}
AppSetting dbGetAppSetting(AppOptionName name) {
return UfActiveRecord.findOne(AppSetting.class, Map.of("name", name.name()));
}
static Integer settingPageVersion = 2;
void dbClearAppSettings() {
var items = dbGetAppSettings();
for (var item : items) {
item.delete();
}
}
@PostConstruct
public void init() {
@ -51,12 +48,12 @@ public class AppSettingsMgr {
}
}
public void initsettingdb() {
AppSetting.setBuildGroup(AppSettingTab.DEVICE);
AppSetting.addIntegerOption(AppOptionName.SETTING_PAGE_VERSION, settingPageVersion);
AppSetting.addDateOption(AppOptionName.DATE, "");
AppSetting.addTimeOption(AppOptionName.TIME, "");
AppSetting.addTimezoneOption(AppOptionName.TIMEZONE, "");
AppSetting.addEnumOption(AppOptionName.LANGUAGE, new String[]{"zh_CN", "en_US"}, "zh_CN");
AppSetting.addBooleanOption(AppOptionName.AUTO_PRINT, false);
AppSetting.addEnumOption(AppOptionName.AUTO_LOGOUT, AutoLogoutTime.cgetValues(), AutoLogoutTime.T03_00.name());
@ -72,13 +69,36 @@ public class AppSettingsMgr {
AppSetting.addFixStringOption(AppOptionName.MCU_VERSION, "v1.0.0");
}
List<AppSetting> dbGetAppSettings() {
return UfActiveRecord.find(AppSetting.class);
}
@EnginnerPageAction(name = "getAppSettings")
AppSetting dbGetAppSetting(AppOptionName name) {
return UfActiveRecord.findOne(AppSetting.class, Map.of("name", name.name()));
}
Boolean isOptionLegal(AppOptionName name, String val) {
//TODO:添加校验逻辑
return true;
}
void dbClearAppSettings() {
var items = dbGetAppSettings();
for (var item : items) {
item.delete();
}
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// EXT FUNC
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@EnginnerPageAction(name = "getAppSettings", order = ORDER.getAppSettings)
public AppRet<List<AppSetting>> getAppSettings() {
return AppRet.success(dbGetAppSettings());
}
@EnginnerPageAction(name = "getTabs")
@EnginnerPageAction(name = "getTabs", order = ORDER.getTabs)
public AppRet<List<String>> getTabs() {
List<String> groups = new ArrayList<>();
for (AppSettingTab group : AppSettingTab.values()) {
@ -87,30 +107,28 @@ public class AppSettingsMgr {
return AppRet.success(groups);
}
@EnginnerPageAction(name = "setSysDate")
@EnginnerPageAction(name = "setSysDate", order = ORDER.setSysDate)
public void setSysDate(Integer Year, Integer Month, Integer Day) {
logger.info("setSysDate {}-{}-{}", Year, Month, Day);
}
@EnginnerPageAction(name = "setSysTime")
@EnginnerPageAction(name = "setSysTime", order = ORDER.setSysTime)
public void setSysTime(Integer Hour, Integer Minute, Integer Second) {
logger.info("setSysTime {}:{}:{}", Hour, Minute, Second);
}
@EnginnerPageAction(name = "setSysTimezone")
public void setSysTimezone(String timezone) {
logger.info("setSysTimezone {}", timezone);
}
@EnginnerPageAction(name = "setOptionVal")
public void setOptionVal(AppOptionName optionName,String val){
@EnginnerPageAction(name = "setOptionVal", order = ORDER.setOptionVal)
public AppRet<Object> setOptionVal(AppOptionName optionName, String val) {
logger.info("setOptionVal {}={}", optionName, val);
if (!isOptionLegal(optionName, val)) {
return AppRet.fail(A8kEcode.AppOptionIsInvalid);
}
AppSetting appSetting = dbGetAppSetting(optionName);
if(appSetting != null){
if (appSetting != null) {
appSetting.value = val;
appSetting.save();
}
return AppRet.success();
}
}

6
src/main/java/a8k/service/hardware/canbus/protocol/A8kEcode.java

@ -40,6 +40,12 @@ public enum A8kEcode {
TubeHolderCfgNotExist(200, "试管架配置不存在"), //
TubeCfgNotExist(201, "试管配置不存在"), //
A8kIDCardOffline(300, "未检测到ID卡"), //
A8kIDCardContentError(301, "ID卡内容错误"), //
A8kIDCardVersionIsLow(302, "ID卡版本过低"), //
AppOptionIsInvalid(400, "AppOptionIsInvalid"), //
//
// FOR HARDWARE
//

2
src/main/java/a8k/service/hardware/canbus/protocol/RegIndex.java

@ -165,7 +165,7 @@ public enum RegIndex {
kreg_id_card_reader_raw_sector_size(10301), //
kreg_id_card_reader_raw_sector_num(10302), //
kreg_id_card_reader_is_online(10303), //
kreg_id_card_reader_is_online(10303,false), //
/***********************************************************************************************************************
* 板夹仓扫码 *

119
src/main/java/a8k/service/project_mgr/AppProjectItemMgrService.java

@ -15,10 +15,7 @@ import a8k.service.appeventbus.appevent.A8kCanBusOnConnectEvent;
import a8k.service.appeventbus.appevent.A8kHardwareReport;
import a8k.service.appeventbus.appevent.AppEvent;
import a8k.service.hardware.canbus.A8kCanBusService;
import a8k.service.hardware.canbus.protocol.A8kPacket;
import a8k.service.hardware.canbus.protocol.CmdId;
import a8k.service.hardware.canbus.protocol.MId;
import a8k.service.hardware.canbus.protocol.RegIndex;
import a8k.service.hardware.canbus.protocol.*;
import a8k.service.appstate.AppStateMgrService;
import a8k.utils.wq.ZWorkQueue;
import jakarta.annotation.PostConstruct;
@ -35,6 +32,13 @@ import java.util.Map;
public class AppProjectItemMgrService implements AppEventListener {
static Logger logger = org.slf4j.LoggerFactory.getLogger(AppProjectItemMgrService.class);
static class ORDER {
static final int readIDCardInfo = 1;
static final int saveIDCardInfo = 2;
static final int getProjectInfoList = 3;
static final int getProjectInfo = 4;
}
@Resource
A8kCanBusService canBus;
@ -52,6 +56,10 @@ public class AppProjectItemMgrService implements AppEventListener {
eventBus.regListener(this);
}
/**
* 事件总线事件处理
* @param event e
*/
@Override public void onAppEvent(AppEvent event) {
if (event instanceof A8kHardwareReport canPacket) {
A8kPacket packet = canPacket.getReportPacket();
@ -70,6 +78,11 @@ public class AppProjectItemMgrService implements AppEventListener {
}
}
/**
* 从数据库中获取项目信息
* @param lotName 项目名称
* @return 项目信息
*/
ProjectInfo dbGetProjectInfo(String lotName) {
return ProjectInfo.findOne(ProjectInfo.class, Map.of("lotName", lotName));
}
@ -83,11 +96,54 @@ public class AppProjectItemMgrService implements AppEventListener {
return result;
}
/**
* 添加项目信息
* @param newpinfo 项目信息
* @return A8kEcode
*/
public A8kEcode dbSaveProjectInfo(ProjectInfo newpinfo) {
var pinfo = ProjectInfo.findOne(ProjectInfo.class, Map.of("lotName", newpinfo.lotName));
if (pinfo != null && newpinfo.updateChipVersion < pinfo.updateChipVersion) {
return A8kEcode.A8kIDCardVersionIsLow;
} else {
if (pinfo != null) {
pinfo.delete();
}
newpinfo.save();
}
return A8kEcode.Success;
}
/**
* 判断是否是新的项目信息
* @param newpinfo 新的项目信息
* @return 是否是新的项目信息
*/
Boolean isNewProjectInfo(ProjectInfo newpinfo) {
var pinfo = ProjectInfo.findOne(ProjectInfo.class, Map.of("lotName", newpinfo.lotName));
return pinfo == null || newpinfo.updateChipVersion >= pinfo.updateChipVersion;
}
Boolean isProjectInfoLegal(ProjectInfo pinfo) {
if (pinfo == null) {
return false;
}
if (pinfo.lotName == null || pinfo.lotName.isEmpty()) {
return false;
}
if (pinfo.updateChipVersion == null) {
return false;
}
return true;
}
/**
* 读取ID卡信息并构造ProjectInfo
* @return 项目信息
*/
private ProjectInfo readAndConstructProjectInfo() {
//读取ID卡信息
byte[] data = null;
@ -97,8 +153,8 @@ public class AppProjectItemMgrService implements AppEventListener {
//TODO:
// 解析ID
// 构造ProjectInfo
} catch (HardwareException e) {
throw new RuntimeException(e);
return new ProjectInfo();
} catch (HardwareException ignored) {
}
return null;
}
@ -114,39 +170,48 @@ public class AppProjectItemMgrService implements AppEventListener {
// 存储项目信息到数据库中
// 调用 stateMgr.setCurrentIdCardInfo(); 将ID卡信息存储到状态管理器中
ProjectInfo pjinfo = readAndConstructProjectInfo();
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// PUBLIC
// EXT
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@EnginnerPageAction(name = "获取项目信息(简单)", order = 1)
public AppRet<List<ProjectInfoSimple>> getProjectInfoSimple() {
return AppRet.success(dbGetProjectInfos());
@EnginnerPageAction(name = "读取ID卡信息", order = ORDER.readIDCardInfo)
public AppRet<ProjectInfo> readIDCardInfo() {
ProjectInfo pinfo = readAndConstructProjectInfo();
return AppRet.success(pinfo);
}
@EnginnerPageAction(name = "添加项目信息", order = 2)
public AppRet<String> addProjectInfo(ProjectInfo newpinfo) {
var pinfo = ProjectInfo.findOne(ProjectInfo.class, Map.of("lotName", newpinfo.lotName));
if (pinfo != null && newpinfo.updateChipVersion < pinfo.updateChipVersion) {
return AppRet.success("新项目版本低于数据库中的项目版本,不更新");
} else {
if (pinfo != null) {
pinfo.delete();
}
newpinfo.save();
@EnginnerPageAction(name = "保存ID卡信息", order = ORDER.saveIDCardInfo)
public AppRet<ProjectInfo> saveIDCardInfo() {
ProjectInfo pinfo = readAndConstructProjectInfo();
if (pinfo == null) {
return AppRet.fail(A8kEcode.A8kIDCardOffline);
}
if (!isProjectInfoLegal(pinfo)) {
return AppRet.fail(A8kEcode.A8kIDCardContentError);
}
return AppRet.success("添加成功");
A8kEcode ecode = dbSaveProjectInfo(pinfo);
if (ecode != A8kEcode.Success) {
return AppRet.fail(ecode);
}
return AppRet.success(pinfo);
}
@EnginnerPageAction(name = "读取ID卡信息", order = 3)
public AppRet<ProjectInfo> readIDCardInfo() {
ProjectInfo pinfo = readAndConstructProjectInfo();
return AppRet.success(pinfo);
@EnginnerPageAction(name = "获取项目信息列表", order = ORDER.getProjectInfoList)
public AppRet<List<ProjectInfoSimple>> getProjectInfoList() {
return AppRet.success(dbGetProjectInfos());
}
@EnginnerPageAction(name = "获取项目信息", order = ORDER.getProjectInfo)
public AppRet<ProjectInfo> getProjectInfo(String lotName) {
return AppRet.success(dbGetProjectInfo(lotName));
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// STATUS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@EnginnerPageStatu(name = "ID卡状态")
public Boolean idCardStatus() {
try {

Loading…
Cancel
Save