Skip to content

Commit fdca0e6

Browse files
committed
Updated website dockers creation scripts
1 parent e916f41 commit fdca0e6

File tree

12 files changed

+1726
-196
lines changed

12 files changed

+1726
-196
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ logcat.txt
3939
screenshot.png
4040
AI_MultiBarcodes_Capture/release/
4141
screenshot2.png
42+
WebInterface/DOCKER_CLEANUP_SAFETY.md
43+
WebInterface/SYMBOLOGY_MAPPING_RULES.md

AI_MultiBarcodes_Capture/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
<uses-permission android:name="com.symbol.emdk.permission.EMDK" />
8686
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
8787
<uses-permission android:name="android.permission.INTERNET" />
88+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
89+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
8890

8991
<uses-permission android:name="android.permission.CAMERA" />
9092

AI_MultiBarcodes_Capture/src/main/java/com/zebra/ai_multibarcodes_capture/java/CapturedBarcodesActivity.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@
6868
import java.util.Map;
6969
import java.util.concurrent.ExecutorService;
7070
import java.util.concurrent.Executors;
71+
import java.net.InetAddress;
72+
import java.net.NetworkInterface;
73+
import java.util.Collections;
74+
import android.net.wifi.WifiManager;
75+
import android.net.ConnectivityManager;
76+
import android.net.Network;
77+
import android.net.NetworkInfo;
7178

7279
public class CapturedBarcodesActivity extends AppCompatActivity {
7380

@@ -736,6 +743,11 @@ private String convertSessionDataToJson(SessionData sessionData) {
736743
rootObject.addProperty("device_info", deviceHostname);
737744
android.util.Log.d("CapturedBarcodes", "Device hostname: " + deviceHostname);
738745

746+
// Add device IP address
747+
String deviceIP = getDeviceIPAddress();
748+
rootObject.addProperty("device_ip", deviceIP);
749+
android.util.Log.d("CapturedBarcodes", "Device IP address: " + deviceIP);
750+
739751
Gson gson = new Gson();
740752
String jsonResult = gson.toJson(rootObject);
741753
android.util.Log.d("CapturedBarcodes", "JSON conversion completed successfully");
@@ -764,6 +776,48 @@ private String getDeviceHostname() {
764776
}
765777
}
766778

779+
private String getDeviceIPAddress() {
780+
try {
781+
android.util.Log.d("CapturedBarcodes", "Getting device IP address");
782+
783+
// First try to get WiFi IP address
784+
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
785+
if (wifiManager != null && wifiManager.isWifiEnabled()) {
786+
int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
787+
if (ipAddress != 0) {
788+
String wifiIP = String.format(Locale.US, "%d.%d.%d.%d",
789+
(ipAddress & 0xff),
790+
(ipAddress >> 8 & 0xff),
791+
(ipAddress >> 16 & 0xff),
792+
(ipAddress >> 24 & 0xff));
793+
android.util.Log.d("CapturedBarcodes", "WiFi IP address: " + wifiIP);
794+
return wifiIP;
795+
}
796+
}
797+
798+
// If WiFi not available, try to get IP from network interfaces
799+
for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
800+
for (InetAddress inetAddress : Collections.list(networkInterface.getInetAddresses())) {
801+
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress()) {
802+
String hostAddress = inetAddress.getHostAddress();
803+
// Check if it's IPv4
804+
if (hostAddress != null && hostAddress.indexOf(':') < 0) {
805+
android.util.Log.d("CapturedBarcodes", "Network interface IP address: " + hostAddress);
806+
return hostAddress;
807+
}
808+
}
809+
}
810+
}
811+
812+
android.util.Log.w("CapturedBarcodes", "No valid IP address found");
813+
return "0.0.0.0";
814+
815+
} catch (Exception e) {
816+
android.util.Log.e("CapturedBarcodes", "Error getting device IP address", e);
817+
return "0.0.0.0";
818+
}
819+
}
820+
767821
private boolean performHttpPost(String endpointUrl, String jsonData) throws IOException {
768822
android.util.Log.d("CapturedBarcodes", "performHttpPost() called");
769823
android.util.Log.d("CapturedBarcodes", "Endpoint URL: " + endpointUrl);

WebInterface/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ EXPOSE_MYSQL=false
3737
# =========================================================
3838

3939
# Database Connection Settings
40-
DB_HOST=db
40+
DB_HOST=127.0.0.1
4141
DB_NAME=barcode_wms
4242
DB_USER=wms_user
4343
DB_PASS=wms_password

WebInterface/database/init.sql

Lines changed: 70 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,77 @@
22
CREATE DATABASE IF NOT EXISTS barcode_wms;
33
USE barcode_wms;
44

5+
-- Symbology Reference Table - SINGLE SOURCE OF TRUTH
6+
DROP TABLE IF EXISTS symbologies;
7+
CREATE TABLE symbologies (
8+
id INT PRIMARY KEY,
9+
name VARCHAR(50) NOT NULL,
10+
UNIQUE KEY unique_id (id),
11+
UNIQUE KEY unique_name (name)
12+
);
13+
14+
-- Insert EXACT values from Android enum EBarcodesSymbologies.java
15+
INSERT INTO symbologies (id, name) VALUES
16+
(-1, 'UNKNOWN'),
17+
(0, 'EAN 8'),
18+
(1, 'EAN 13'),
19+
(2, 'UPC A'),
20+
(3, 'UPC E'),
21+
(4, 'AZTEC'),
22+
(5, 'CODABAR'),
23+
(6, 'CODE128'),
24+
(7, 'CODE39'),
25+
(8, 'I2OF5'),
26+
(9, 'GS1 DATABAR'),
27+
(10, 'DATAMATRIX'),
28+
(11, 'GS1 DATABAR EXPANDED'),
29+
(12, 'MAILMARK'),
30+
(13, 'MAXICODE'),
31+
(14, 'PDF417'),
32+
(15, 'QRCODE'),
33+
(16, 'DOTCODE'),
34+
(17, 'GRID MATRIX'),
35+
(18, 'GS1 DATAMATRIX'),
36+
(19, 'GS1 QRCODE'),
37+
(20, 'MICROQR'),
38+
(21, 'MICROPDF'),
39+
(22, 'USPOSTNET'),
40+
(23, 'USPLANET'),
41+
(24, 'UK POSTAL'),
42+
(25, 'JAPANESE POSTAL'),
43+
(26, 'AUSTRALIAN POSTAL'),
44+
(27, 'CANADIAN POSTAL'),
45+
(28, 'DUTCH POSTAL'),
46+
(29, 'US4STATE'),
47+
(30, 'US4STATE FICS'),
48+
(31, 'MSI'),
49+
(32, 'CODE93'),
50+
(33, 'TRIOPTIC39'),
51+
(34, 'D2OF5'),
52+
(35, 'CHINESE 2OF5'),
53+
(36, 'KOREAN 3OF5'),
54+
(37, 'CODE11'),
55+
(38, 'TLC39'),
56+
(39, 'HANXIN'),
57+
(40, 'MATRIX 2OF5'),
58+
(41, 'UPCE1'),
59+
(42, 'GS1 DATABAR LIM'),
60+
(43, 'FINNISH POSTAL 4S'),
61+
(44, 'COMPOSITE AB'),
62+
(45, 'COMPOSITE C');
63+
564
-- Table to store barcode capture sessions
665
CREATE TABLE IF NOT EXISTS capture_sessions (
766
id INT AUTO_INCREMENT PRIMARY KEY,
867
session_timestamp DATETIME NOT NULL,
968
device_info VARCHAR(500),
69+
device_ip VARCHAR(45),
1070
total_barcodes INT DEFAULT 0,
1171
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
1272
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
1373
INDEX idx_session_timestamp (session_timestamp),
14-
INDEX idx_created_at (created_at)
74+
INDEX idx_created_at (created_at),
75+
INDEX idx_device_ip (device_ip)
1576
);
1677

1778
-- Table to store individual barcode data
@@ -35,89 +96,36 @@ CREATE TABLE IF NOT EXISTS barcodes (
3596
INDEX idx_processed (processed)
3697
);
3798

38-
-- Table to store barcode symbology mappings (based on Android app constants)
39-
CREATE TABLE IF NOT EXISTS symbology_types (
40-
id INT PRIMARY KEY,
41-
name VARCHAR(100) NOT NULL UNIQUE,
42-
description VARCHAR(200),
43-
active BOOLEAN DEFAULT TRUE
44-
);
45-
46-
-- Insert symbology types based on Android app EBarcodesSymbologies
47-
INSERT INTO symbology_types (id, name, description) VALUES
48-
(0, 'UNKNOWN', 'Unknown symbology type'),
49-
(1, 'AUSTRALIAN_POSTAL', 'Australian Postal barcode'),
50-
(2, 'AZTEC', 'Aztec 2D barcode'),
51-
(3, 'CANADIAN_POSTAL', 'Canadian Postal barcode'),
52-
(4, 'CHINESE_2OF5', 'Chinese 2 of 5 barcode'),
53-
(5, 'CODABAR', 'Codabar barcode'),
54-
(6, 'CODE11', 'Code 11 barcode'),
55-
(7, 'CODE39', 'Code 39 barcode'),
56-
(8, 'CODE93', 'Code 93 barcode'),
57-
(9, 'CODE128', 'Code 128 barcode'),
58-
(10, 'COMPOSITE_AB', 'Composite AB barcode'),
59-
(11, 'COMPOSITE_C', 'Composite C barcode'),
60-
(12, 'D2OF5', 'Discrete 2 of 5 barcode'),
61-
(13, 'DATAMATRIX', 'Data Matrix 2D barcode'),
62-
(14, 'DOTCODE', 'DotCode 2D barcode'),
63-
(15, 'DUTCH_POSTAL', 'Dutch Postal barcode'),
64-
(16, 'EAN_8', 'EAN-8 barcode'),
65-
(17, 'EAN_13', 'EAN-13 barcode'),
66-
(18, 'FINNISH_POSTAL_4S', 'Finnish Postal 4-State barcode'),
67-
(19, 'GRID_MATRIX', 'Grid Matrix 2D barcode'),
68-
(20, 'GS1_DATABAR', 'GS1 DataBar barcode'),
69-
(21, 'GS1_DATABAR_EXPANDED', 'GS1 DataBar Expanded barcode'),
70-
(22, 'GS1_DATABAR_LIM', 'GS1 DataBar Limited barcode'),
71-
(23, 'GS1_DATAMATRIX', 'GS1 Data Matrix barcode'),
72-
(24, 'GS1_QRCODE', 'GS1 QR Code barcode'),
73-
(25, 'HANXIN', 'Han Xin Code 2D barcode'),
74-
(26, 'I2OF5', 'Interleaved 2 of 5 barcode'),
75-
(27, 'JAPANESE_POSTAL', 'Japanese Postal barcode'),
76-
(28, 'KOREAN_3OF5', 'Korean 3 of 5 barcode'),
77-
(29, 'MAILMARK', 'Royal Mail Mailmark barcode'),
78-
(30, 'MATRIX_2OF5', 'Matrix 2 of 5 barcode'),
79-
(31, 'MAXICODE', 'MaxiCode 2D barcode'),
80-
(32, 'MICROPDF', 'MicroPDF417 barcode'),
81-
(33, 'MICROQR', 'Micro QR Code barcode'),
82-
(34, 'MSI', 'MSI barcode'),
83-
(35, 'PDF417', 'PDF417 2D barcode'),
84-
(36, 'QRCODE', 'QR Code 2D barcode'),
85-
(37, 'TLC39', 'TLC-39 barcode'),
86-
(38, 'TRIOPTIC39', 'Trioptic Code 39 barcode'),
87-
(39, 'UK_POSTAL', 'UK Postal barcode'),
88-
(40, 'UPC_A', 'UPC-A barcode'),
89-
(41, 'UPC_E', 'UPC-E barcode'),
90-
(42, 'UPCE1', 'UPC-E1 barcode'),
91-
(43, 'USPLANET', 'USPS PLANET barcode'),
92-
(44, 'USPOSTNET', 'USPS POSTNET barcode'),
93-
(45, 'US4STATE', 'USPS 4-State barcode'),
94-
(46, 'US4STATE_FICS', 'USPS 4-State FICS barcode');
9599

96100
-- Create view for easy barcode data retrieval with symbology names
101+
DROP VIEW IF EXISTS barcode_details;
97102
CREATE VIEW barcode_details AS
98103
SELECT
99104
b.id,
100105
b.session_id,
101106
b.value,
102107
b.symbology,
103-
COALESCE(st.name, 'UNKNOWN') as symbology_name,
108+
COALESCE(s.name, 'UNKNOWN') as symbology_name,
104109
b.quantity,
105110
b.timestamp,
106111
b.processed,
107112
b.notes,
108113
b.created_at,
109114
cs.session_timestamp,
110-
cs.device_info
115+
cs.device_info,
116+
cs.device_ip
111117
FROM barcodes b
112-
LEFT JOIN symbology_types st ON b.symbology = st.id
118+
LEFT JOIN symbologies s ON b.symbology = s.id
113119
LEFT JOIN capture_sessions cs ON b.session_id = cs.id;
114120

115121
-- Create view for session statistics
122+
DROP VIEW IF EXISTS session_statistics;
116123
CREATE VIEW session_statistics AS
117124
SELECT
118125
cs.id,
119126
cs.session_timestamp,
120127
cs.device_info,
128+
cs.device_ip,
121129
cs.created_at,
122130
COUNT(b.id) as total_barcodes,
123131
COUNT(DISTINCT b.symbology) as unique_symbologies,
@@ -128,7 +136,7 @@ SELECT
128136
COUNT(CASE WHEN b.processed = FALSE THEN 1 END) as pending_count
129137
FROM capture_sessions cs
130138
LEFT JOIN barcodes b ON cs.id = b.session_id
131-
GROUP BY cs.id, cs.session_timestamp, cs.device_info, cs.created_at;
139+
GROUP BY cs.id, cs.session_timestamp, cs.device_info, cs.device_ip, cs.created_at;
132140

133141
-- Sample data for testing (optional)
134142
-- INSERT INTO capture_sessions (session_timestamp, device_info, total_barcodes)

WebInterface/docker-compose.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.8'
2-
31
services:
42
multibarcode-webinterface:
53
build:

0 commit comments

Comments
 (0)