Browse Source

odometer 프로토콜 필드 처리 수정

v2
최원형 3 months ago
parent
commit
ac3e7f2e76
  1. 2
      src/main/java/org/mobidgim/mobidigimproject/service/SettingService.java
  2. 2
      src/main/resources/static/js/navigation.js
  3. 7
      src/main/resources/static/js/protocol/odometer.js
  4. 68
      src/main/resources/static/js/protocol/protocolData.js
  5. 8
      src/main/resources/static/js/protocol/protocolValidation.js

2
src/main/java/org/mobidgim/mobidigimproject/service/SettingService.java

@ -97,7 +97,7 @@ public class SettingService {
if (request.getProtocol() != Protocol.OPC_UA) request.setOPC_UA(null);
if (request.getProtocol() != Protocol.MODBUS) request.setMODBUS(null);
if (request.getCanInput() != CanInput.ON) request.setCAN(null);
if (!"on".equalsIgnoreCase(request.getOdoMeter())) {
if (!"on".equalsIgnoreCase(request.getOdoOn())) {
request.setOdometerSpeed(null);
request.setOdometerDir(null);
}

2
src/main/resources/static/js/navigation.js

@ -19,7 +19,7 @@ export function createNavigation() {
const topbarProtocolActions = document.querySelector('.topbar-protocol-actions');
const protocolSelect = byId('reg_protocol');
const canInputSelect = byId('reg_can_input');
const odometerSelect = byId('OdoMeter');
const odometerSelect = byId('odo_on');
function showPage(pageName) {
Object.values(pages).forEach((page) => {

7
src/main/resources/static/js/protocol/odometer.js

@ -2,14 +2,15 @@ import { byId } from '../utils/dom.js';
function buildRow(target, data = {}) {
const safeData = data && typeof data === 'object' ? data : {};
const sourceValue = safeData.source ?? safeData.odo_speed_source ?? '';
return `
<tr class="odometer-row" data-target="${target}">
<td>${target}</td>
<td>
<select class="odometer-source-input">
<option value="can" ${safeData.odo_speed_source === 'can' ? 'selected' : ''}>can</option>
<option value="hw" ${safeData.odo_speed_source === 'hw' ? 'selected' : ''}>hw</option>
<option value="can" ${sourceValue === 'can' ? 'selected' : ''}>can</option>
<option value="hw" ${sourceValue === 'hw' ? 'selected' : ''}>hw</option>
</select>
</td>
<td><input class="odometer-id-input" value="${safeData.id ?? ''}"></td>
@ -39,7 +40,7 @@ export function createOdometerController() {
}
return {
odo_speed_source: row.querySelector('.odometer-source-input')?.value?.trim() ?? '',
source: row.querySelector('.odometer-source-input')?.value?.trim() ?? '',
id: row.querySelector('.odometer-id-input')?.value?.trim() ?? '',
shift: row.querySelector('.odometer-shift-input')?.value?.trim() ?? '',
expr: row.querySelector('.odometer-expr-input')?.value?.trim() ?? '',

68
src/main/resources/static/js/protocol/protocolData.js

@ -4,7 +4,26 @@ import { byId } from '../utils/dom.js';
export const normProtocol = (value) => String(value ?? '').trim().replace(/[-\s]+/g, '_').toUpperCase();
export const getOpcArr = (data) => data?.OPC_UA ?? data?.['OPC-UA'] ?? [];
const checkboxIds = ['ai0', 'ai1', 'ai2', 'ai3', 'di0', 'di1', 'di2', 'di3'];
function normalizeLegacyOdometerKeys(register) {
if (!register || typeof register !== 'object') {
return register;
}
if (register.OdoMeter !== undefined && register.odo_on === undefined) {
register.odo_on = register.OdoMeter;
}
if (register.odo_Meter !== undefined && register.odo_on === undefined) {
register.odo_on = register.odo_Meter;
}
delete register.OdoMeter;
delete register.odo_Meter;
return register;
}
const checkboxIds = ['ai0', 'ai1', 'di0', 'di1'];
const toLower = (value) => String(value ?? '').trim().toLowerCase();
const toUpper = (value) => String(value ?? '').trim().toUpperCase();
@ -31,7 +50,7 @@ function normalizeValueForElement(htmlId, value) {
return normProtocol(value);
case 'reg_can_input':
case 'reg_dr_on_off':
case 'OdoMeter':
case 'odo_on':
case 'reg_two_byte_order':
return toLower(value);
case 'reg_four_byte_order':
@ -46,7 +65,7 @@ function normalizeValueForElement(htmlId, value) {
}
export function normalizeRegisterForPost(register) {
const normalized = JSON.parse(JSON.stringify(register || {}));
const normalized = normalizeLegacyOdometerKeys(JSON.parse(JSON.stringify(register || {})));
const toUpperSnake = (value) => String(value ?? '').trim().toUpperCase().replace(/[-\s]+/g, '_');
if (normalized.protocol) {
@ -57,12 +76,8 @@ export function normalizeRegisterForPost(register) {
normalized.can_input = String(normalized.can_input).trim().toUpperCase();
}
if (normalized.OdoMeter) {
normalized.OdoMeter = String(normalized.OdoMeter).trim().toLowerCase();
}
if (normalized.odo_Meter) {
normalized.odo_Meter = String(normalized.odo_Meter).trim().toLowerCase();
if (normalized.odo_on) {
normalized.odo_on = String(normalized.odo_on).trim().toLowerCase();
}
if (normalized.MEID !== undefined && normalized.MEID !== null) {
@ -100,7 +115,7 @@ export function createProtocolDataController({
const protocolSelect = byId('reg_protocol');
const canInputSelect = byId('reg_can_input');
const drOnOffSelect = byId('reg_dr_on_off');
const odometerSelect = byId('OdoMeter');
const odometerSelect = byId('odo_on');
function syncProtocolMenus() {
navigation.toggleProtocolMenus(protocolSelect?.value, canInputSelect?.value, odometerSelect?.value);
@ -137,7 +152,7 @@ export function createProtocolDataController({
}
function collectProtocolData() {
const register = getLastLoadedRegisterData();
const register = normalizeLegacyOdometerKeys(getLastLoadedRegisterData());
Object.entries(REGISTER_ID_MAP).forEach(([htmlId, dtoKey]) => {
const element = byId(htmlId);
@ -160,10 +175,10 @@ export function createProtocolDataController({
const odometerData = odometerController.collectData();
if (toLower(register.dr_on) !== 'on') {
register.odo_Meter = 'off';
register.odo_on = 'off';
register.odo_speed = null;
register.odo_direction = null;
} else if (String(register.odo_Meter ?? '').toLowerCase() === 'on') {
} else if (String((register.odo_on ?? register.odo_Meter) ?? '').toLowerCase() === 'on') {
register.odo_speed = odometerData.odo_speed;
register.odo_direction = odometerData.odo_direction;
} else {
@ -171,6 +186,7 @@ export function createProtocolDataController({
register.odo_direction = null;
}
normalizeLegacyOdometerKeys(register);
return register;
}
@ -179,7 +195,9 @@ export function createProtocolDataController({
return;
}
setLastLoadedRegisterData(register);
const normalizedRegister = normalizeLegacyOdometerKeys({ ...register });
setLastLoadedRegisterData(normalizedRegister);
Object.entries(REGISTER_ID_MAP).forEach(([htmlId, dtoKey]) => {
const element = byId(htmlId);
@ -187,8 +205,8 @@ export function createProtocolDataController({
return;
}
if (Object.prototype.hasOwnProperty.call(register, dtoKey)) {
const value = register[dtoKey];
if (Object.prototype.hasOwnProperty.call(normalizedRegister, dtoKey)) {
const value = normalizedRegister[dtoKey];
if (element.type === 'checkbox') {
element.checked = value === '1' || value === true;
} else {
@ -207,22 +225,22 @@ export function createProtocolDataController({
checkboxIds.forEach((id) => {
const checkbox = byId(id);
if (checkbox) {
checkbox.checked = register[id] === '1' || register[id] === true;
checkbox.checked = normalizedRegister[id] === '1' || normalizedRegister[id] === true;
}
});
if (register.protocol && protocolSelect) {
const protocol = normProtocol(register.protocol);
if (normalizedRegister.protocol && protocolSelect) {
const protocol = normProtocol(normalizedRegister.protocol);
protocolSelect.value = protocol;
setLastLoadedRegisterData({ ...register, protocol });
setLastLoadedRegisterData({ ...normalizedRegister, protocol });
}
modbusController.renderRows(Array.isArray(register.MODBUS) ? register.MODBUS : []);
opcUaController.renderRows(Array.isArray(getOpcArr(register)) ? getOpcArr(register) : []);
canController.renderRows(Array.isArray(register.CAN) ? register.CAN : []);
modbusController.renderRows(Array.isArray(normalizedRegister.MODBUS) ? normalizedRegister.MODBUS : []);
opcUaController.renderRows(Array.isArray(getOpcArr(normalizedRegister)) ? getOpcArr(normalizedRegister) : []);
canController.renderRows(Array.isArray(normalizedRegister.CAN) ? normalizedRegister.CAN : []);
odometerController.renderRows({
odo_speed: register.odo_speed ?? null,
odo_direction: register.odo_direction ?? null,
odo_speed: normalizedRegister.odo_speed ?? null,
odo_direction: normalizedRegister.odo_direction ?? null,
});
syncOdometerAvailability();
syncProtocolMenusDeferred();

8
src/main/resources/static/js/protocol/protocolValidation.js

@ -30,7 +30,7 @@ export function getRegisterConfigValidationError(data) {
}
if (String(data.dr_on ?? '').toLowerCase() !== 'on' && String(data.odo_on ?? '').toLowerCase() === 'on') {
return "'odo_Meter' cannot be on when 'dr_on' is off.";
return "'odo_on' cannot be on when 'dr_on' is off.";
}
if (data.protocol === 'MODBUS') {
@ -82,13 +82,13 @@ export function getRegisterConfigValidationError(data) {
const direction = data.odo_direction;
for (const [label, item] of [['odo_speed', speed], ['odo_direction', direction]]) {
if (!hasAnyValue(item, ['odo_speed_source', 'id', 'shift', 'expr', 'mask'])) {
if (!hasAnyValue(item, ['source', 'odo_speed_source', 'id', 'shift', 'expr', 'mask'])) {
continue;
}
const source = String(item?.odo_speed_source ?? '').trim().toLowerCase();
const source = String(item?.source ?? item?.odo_speed_source ?? '').trim().toLowerCase();
if (!source) {
return `${label} missing 'odo_speed_source'.`;
return `${label} missing 'source'.`;
}
if (source === 'can') {

Loading…
Cancel
Save