Эх сурвалжийг харах

feat(预设数据):
- 新增预设角色、流程模式、流程步骤数据
- App启动时检查预设数据并添加到数据库
- 优化数据库初始化逻辑
- 新增Context扩展方法readJsonFromAssets
- 初始化页面背景修改

周文健 8 сар өмнө
parent
commit
909d89bc3e

BIN
app/src/main/assets/data.db


+ 104 - 0
app/src/main/assets/preset/preset_sys_role.json

@@ -0,0 +1,104 @@
+[
+  {
+    "roleId": 1,
+    "roleName": "超级管理员",
+    "roleKey": "admin",
+    "roleSort": 1,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "admin",
+    "createTime": "2024-09-04 15:11:42",
+    "updateBy": null,
+    "updateTime": null,
+    "remark": "超级管理员",
+    "marsDataScope": "1"
+  },
+  {
+    "roleId": 2,
+    "roleName": "作业管理员",
+    "roleKey": "jtdrawer",
+    "roleSort": 2,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "admin",
+    "createTime": "2024-09-04 15:11:42",
+    "updateBy": "admin",
+    "updateTime": "2025-06-03 16:26:03",
+    "remark": "普通角色",
+    "marsDataScope": "1"
+  },
+  {
+    "roleId": 3,
+    "roleName": "作业负责人",
+    "roleKey": "jtlocker",
+    "roleSort": 3,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "admin",
+    "createTime": "2024-09-06 10:56:30",
+    "updateBy": "admin",
+    "updateTime": "2025-06-03 16:27:23",
+    "remark": "开锁解锁",
+    "marsDataScope": "1"
+  },
+  {
+    "roleId": 4,
+    "roleName": "作业参与人",
+    "roleKey": "jtcolocker",
+    "roleSort": 4,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "admin",
+    "createTime": "2024-09-11 10:54:15",
+    "updateBy": "mars",
+    "updateTime": "2025-03-12 16:24:57",
+    "remark": "打卡,第一次打卡进场,第二次打卡出场",
+    "marsDataScope": "1"
+  },
+  {
+    "roleId": 5,
+    "roleName": "作业观察员",
+    "roleKey": "jtguard",
+    "roleSort": 5,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "admin",
+    "createTime": "2024-09-11 10:54:40",
+    "updateBy": "admin",
+    "updateTime": "2024-09-11 10:56:01",
+    "remark": "作业数据查询到处",
+    "marsDataScope": "1"
+  },
+  {
+    "roleId": 17,
+    "roleName": "系统配置员",
+    "roleKey": "sysconfig",
+    "roleSort": 0,
+    "dataScope": "1",
+    "menuCheckStrictly": 1,
+    "deptCheckStrictly": 1,
+    "status": "0",
+    "delFlag": "0",
+    "createBy": "mars",
+    "createTime": "2025-04-02 18:41:45",
+    "updateBy": "mars",
+    "updateTime": "2025-04-02 18:42:55",
+    "remark": "",
+    "marsDataScope": "1"
+  }
+]

+ 98 - 0
app/src/main/assets/preset/preset_workflow_mode.json

@@ -0,0 +1,98 @@
+[
+  {
+    "modeId": 1,
+    "modeCode": "1",
+    "isPreset": true,
+    "modeName": "上锁-共锁-解锁",
+    "modeTitle": "上锁-共锁-解锁",
+    "modeDescription": "包含上锁-共锁-解锁步骤",
+    "isColockSupport": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 2,
+    "modeCode": "2",
+    "isPreset": true,
+    "modeName": "上锁-解锁",
+    "modeTitle": "上锁-解锁",
+    "modeDescription": "包含上锁-解锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 3,
+    "modeCode": "3",
+    "isPreset": true,
+    "modeName": "解锁-上锁",
+    "modeTitle": "解锁-上锁",
+    "modeDescription": "包含解锁-上锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 4,
+    "modeCode": "4",
+    "isPreset": true,
+    "modeName": "上锁",
+    "modeTitle": "上锁",
+    "modeDescription": "包含上锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 5,
+    "modeCode": "5",
+    "isPreset": true,
+    "modeName": "解锁",
+    "modeTitle": "解锁",
+    "modeDescription": "包含解锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 6,
+    "modeCode": "6",
+    "isPreset": true,
+    "modeName": "LOTO八大步骤(玛氏)",
+    "modeTitle": "LOTO八大步骤(玛氏)",
+    "modeDescription": "LOTO八大步骤(玛氏)",
+    "isColockSupport": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  }
+]

+ 684 - 0
app/src/main/assets/preset/preset_workflow_step.json

@@ -0,0 +1,684 @@
+[
+  {
+    "stepId": 1,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": true,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 2,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 3,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "共锁",
+    "stepTitle": "共锁",
+    "stepTitleShort": "共锁",
+    "stepIcon": "access-control.svg",
+    "stepDescription": "共锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": true,
+    "enableReleaseColock": true,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 4,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 4,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 5,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 6,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 7,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 8,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 9,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 10,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 11,
+    "modeId": 4,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 12,
+    "modeId": 4,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 13,
+    "modeId": 5,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 14,
+    "modeId": 5,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 15,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "识别工作内容",
+    "stepTitle": "识别工作内容",
+    "stepTitleShort": "识别工作内容",
+    "stepIcon": "ballot-check.svg",
+    "stepDescription": "识别工作内容",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 16,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "判断能量源与隔离方式",
+    "stepTitle": "判断能量源与隔离方式",
+    "stepTitleShort": "判断能量源与隔离方式",
+    "stepIcon": "bolt.svg",
+    "stepDescription": "判断能量源与隔离方式",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 17,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "通知所有受影响的人员",
+    "stepTitle": "通知所有受影响的人员",
+    "stepTitleShort": "通知所有受影响的人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "通知所有受影响的人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": true,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 18,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 4,
+    "stepName": "正常操作停机",
+    "stepTitle": "正常操作停机",
+    "stepTitleShort": "正常操作停机",
+    "stepIcon": "power.svg",
+    "stepDescription": "正常操作停机",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 19,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 5,
+    "stepName": "上锁并挂牌",
+    "stepTitle": "上锁并挂牌",
+    "stepTitleShort": "上锁并挂牌",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁并挂牌",
+    "confirmType": 0,
+    "confirmRoleCode": "jtlocker",
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 20,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 6,
+    "stepName": "能量隔离证实",
+    "stepTitle": "能量隔离证实",
+    "stepTitleShort": "能量隔离证实",
+    "stepIcon": "bolt-slash.svg",
+    "stepDescription": "能量隔离证实",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 21,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 7,
+    "stepName": "取锁前检查",
+    "stepTitle": "取锁前检查",
+    "stepTitleShort": "取锁前检查",
+    "stepIcon": "shield-check.svg",
+    "stepDescription": "取锁前检查",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 22,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 8,
+    "stepName": "拆锁恢复开关",
+    "stepTitle": "拆锁恢复开关",
+    "stepTitleShort": "拆锁恢复开关",
+    "stepIcon": "rotate-left.svg",
+    "stepDescription": "拆锁恢复开关",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  }
+]

+ 10 - 8
app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt

@@ -72,14 +72,16 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
             BackupScheduler.applySaved(this@SplashActivity)
             DbReadyGate.await()
             StartModbusEvent.sendStartModbusEvent()
-            viewModel.checkSysMenuAndRole().observe(this@SplashActivity) {
-                val isAppInit = MMKVConstants.APP_INIT.getMMKVData(false)
-                if (isAppInit) {
-                    startActivity(Intent(this@SplashActivity, LoginActivity::class.java))
-                    finish()
-                } else {
-                    startActivity(Intent(this@SplashActivity, InitActivity::class.java))
-                    finish()
+            viewModel.checkPresetData().observe(this@SplashActivity){
+                viewModel.checkSysMenuAndRole().observe(this@SplashActivity) {
+                    val isAppInit = MMKVConstants.APP_INIT.getMMKVData(false)
+                    if (isAppInit) {
+                        startActivity(Intent(this@SplashActivity, LoginActivity::class.java))
+                        finish()
+                    } else {
+                        startActivity(Intent(this@SplashActivity, InitActivity::class.java))
+                        finish()
+                    }
                 }
             }
         }

+ 20 - 2
app/src/main/java/com/grkj/iscs/features/splash/viewmodel/SplashViewModel.kt

@@ -2,7 +2,13 @@ package com.grkj.iscs.features.splash.viewmodel
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.database.PresetData
+import com.grkj.data.logic.IRoleLogic
 import com.grkj.data.logic.ISysMenuLogic
+import com.grkj.data.logic.IWorkflowLogic
+import com.grkj.data.logic.impl.standard.RoleLogic
+import com.grkj.data.logic.impl.standard.UserLogic
+import com.grkj.data.logic.impl.standard.WorkflowLogic
 import com.grkj.ui_base.base.BaseViewModel
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -10,9 +16,21 @@ import javax.inject.Inject
 
 @HiltViewModel
 class SplashViewModel @Inject constructor(
-    val sysMenuRepository: ISysMenuLogic
+    val sysMenuRepository: ISysMenuLogic,
+    val roleLogic: IRoleLogic,
+    val workflowLogic: IWorkflowLogic
 ) : BaseViewModel() {
-
+    /**
+     * 检查预设数据
+     */
+    fun checkPresetData(): LiveData<Boolean>{
+        return liveData(Dispatchers.IO){
+            roleLogic.addPresetRoleData(PresetData.presetSysRole)
+            workflowLogic.addPresetWorkflowMode(PresetData.presetWorkflowMode)
+            workflowLogic.addPresetWorkflowStep(PresetData.presetWorkflowStep)
+            emit(true)
+        }
+    }
 
     /**
      * 检查菜单和角色

+ 1 - 0
app/src/main/res/layout/activity_init.xml

@@ -5,6 +5,7 @@
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:background="@drawable/bg_main"
         android:fitsSystemWindows="true">
 
         <androidx.fragment.app.FragmentContainerView

+ 6 - 0
data/src/main/java/com/grkj/data/dao/RoleDao.kt

@@ -100,4 +100,10 @@ interface RoleDao {
      */
     @Query("select * from sys_user_role")
     fun getAllUserRoles(): List<SysUserRole>
+
+    /**
+     * 添加预设角色
+     */
+    @Insert(onConflict = OnConflictStrategy.IGNORE)
+    fun insertRoles(presetSysRole: List<SysRole>)
 }

+ 12 - 0
data/src/main/java/com/grkj/data/dao/WorkflowStepDao.kt

@@ -113,4 +113,16 @@ interface WorkflowStepDao {
      */
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     fun insertSteps(step: List<WorkflowStep>)
+
+    /**
+     * 添加预设流程模式步骤
+     */
+    @Insert(onConflict = OnConflictStrategy.IGNORE)
+    fun insertPresetSteps(presetWorkflowStep: List<WorkflowStep>)
+
+    /**
+     * 添加预设流程模式
+     */
+    @Insert(onConflict = OnConflictStrategy.IGNORE)
+    fun insertWorkflowModes(presetWorkflowMode: List<WorkflowMode>)
 }

+ 35 - 13
data/src/main/java/com/grkj/data/database/ISCSDatabase.kt

@@ -83,7 +83,7 @@ abstract class ISCSDatabase : RoomDatabase() {
         private fun buildDatabase(mode: ReopenMode): ISCSDatabase {
             val context = SIKCore.getApplication()
 
-            // 目录与首启落地(保持你原逻辑)
+            // 1) 确保目录
             val parentDir = EXTERNAL_DB_FILE.parentFile
             if (parentDir != null && !parentDir.exists()) {
                 if (!parentDir.mkdirs()) {
@@ -92,38 +92,59 @@ abstract class ISCSDatabase : RoomDatabase() {
                     logger.info("创建目录: ${parentDir.absolutePath}")
                 }
             }
+
+            // 2) 复制预置库(可选)
+            var hasPrepackaged = false
             if (!EXTERNAL_DB_FILE.exists()) {
                 runCatching {
                     context.assets.open("data.db").use { input ->
                         FileOutputStream(EXTERNAL_DB_FILE).use { output -> input.copyTo(output) }
                     }
+                    hasPrepackaged = true
                     logger.info("已从 assets 复制数据库到: ${EXTERNAL_DB_FILE.absolutePath}")
-                }.onFailure { e -> logger.error("复制数据库失败", e) }
+                }.onFailure { e ->
+                    // 复制失败很正常(比如没放 data.db),这里仅记录日志,不要创建空文件
+                    logger.warn("未找到 assets/data.db,将创建全新加密数据库", e)
+                }
+            } else {
+                // 外部已经有一个文件(可能是历史明文库)
+                hasPrepackaged = true
             }
-            ensureCiphered(EXTERNAL_DB_FILE)
 
-            // SQLCipher Hook
-            val passphrase: ByteArray = AESConfig.defaultConfig.key()
-            val hook = object : SQLiteDatabaseHook {
-                override fun preKey(connection: SQLiteConnection) { /* no-op */
+            // 3) 仅当确实有“现成文件”时才尝试加密迁移
+            //    - 若是明文预置库:ensureCiphered(...) 里做 ATTACH/导出/替换
+            //    - 若不存在任何文件:跳过这步,交给 Room+SQLCipher 创建全新加密库
+            if (hasPrepackaged && EXTERNAL_DB_FILE.exists()) {
+                runCatching {
+                    ensureCiphered(EXTERNAL_DB_FILE)
+                }.onFailure { e ->
+                    // 不要让这里阻断启动;最坏情况:让 Room 直接用密钥打开(若是已加密)或报错日志
+                    logger.error("ensureCiphered 处理预置库失败,请检查是否是明文库或损坏文件", e)
                 }
+            } else {
+                logger.info("未检测到预置库,将由 Room+SQLCipher 创建全新加密数据库")
+            }
 
+            // 4) SQLCipher Hook
+            val passphrase: ByteArray = AESConfig.defaultConfig.key()
+            val hook = object : SQLiteDatabaseHook {
+                override fun preKey(connection: SQLiteConnection) { /* no-op */ }
                 override fun postKey(connection: SQLiteConnection) {
                     connection.execute("PRAGMA foreign_keys=ON", null, null)
                     connection.executeForString("PRAGMA journal_mode=WAL", null, null)
                     connection.execute("PRAGMA synchronous=NORMAL", null, null)
                 }
             }
-            // ✅ 修正:把 hook 传进来
             val factory = SupportOpenHelperFactory(passphrase, hook, true)
 
+            // 5) 构建 Room(让它去“创建或打开”)
             val builder = Room.databaseBuilder(
                 context,
                 ISCSDatabase::class.java,
-                EXTERNAL_DB_FILE.absolutePath // 这里也给绝对路径,配合上面的工厂双保险
+                EXTERNAL_DB_FILE.absolutePath
             )
                 .openHelperFactory(factory)
-                .setJournalMode(JournalMode.WRITE_AHEAD_LOGGING)
+                .setJournalMode(RoomDatabase.JournalMode.WRITE_AHEAD_LOGGING)
                 .addMigrations(*ISCSMigrations.migrationData)
                 .addCallback(object : RoomDatabase.Callback() {
                     override fun onOpen(db: SupportSQLiteDatabase) {
@@ -131,15 +152,16 @@ abstract class ISCSDatabase : RoomDatabase() {
                     }
                 })
 
-            // 恢复模式下**不要** fallbackToDestructiveMigration,避免清库
             if (mode == ReopenMode.NORMAL) {
-                // 如需保留 fallback,可在正常运行模式启用:
+                // 如需保留 fallback 可在正常模式启用:
                 // builder.fallbackToDestructiveMigration()
             }
 
             val db = builder.build()
-            // 触发实际打开
+
+            // 6) 触发实际打开(若不存在文件:此处会直接创建“已加密”的新库)
             db.openHelper.writableDatabase
+
             return db
         }
 

+ 48 - 0
data/src/main/java/com/grkj/data/database/PresetData.kt

@@ -0,0 +1,48 @@
+package com.grkj.data.database
+
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.grkj.data.model.dos.SysRole
+import com.grkj.data.model.dos.WorkflowMode
+import com.grkj.data.model.dos.WorkflowStep
+import com.grkj.shared.utils.extension.readJsonFromAssets
+import com.sik.sikcore.SIKCore
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+
+/**
+ * 预设数据
+ */
+object PresetData {
+    private val gson = Gson()
+    private const val ASSETS_DIR = "preset"
+
+    private val logger: Logger = LoggerFactory.getLogger(PresetData::class.java)
+
+    /**
+     * 预设角色
+     */
+    val presetSysRole: List<SysRole> = run {
+        val presetSysRole = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_sys_role.json")
+        logger.info("预设数据:$presetSysRole")
+        gson.fromJson(presetSysRole, object : TypeToken<List<SysRole>>() {}.type)
+    }
+
+    /**
+     * 预设流程模式
+     */
+    val presetWorkflowMode: List<WorkflowMode> = run {
+        val presetWorkflowMode = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_workflow_mode.json")
+        logger.info("预设数据:$presetWorkflowMode")
+        gson.fromJson(presetWorkflowMode, object : TypeToken<List<WorkflowMode>>() {}.type)
+    }
+
+    /**
+     * 预设流程模式步骤
+     */
+    val presetWorkflowStep: List<WorkflowStep> = run {
+        val presetWorkflowStep = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_workflow_step.json")
+        logger.info("预设数据:$presetWorkflowStep")
+        gson.fromJson(presetWorkflowStep, object : TypeToken<List<WorkflowStep>>() {}.type)
+    }
+}

+ 1 - 0
data/src/main/java/com/grkj/data/logic/BaseLogic.kt

@@ -1,5 +1,6 @@
 package com.grkj.data.logic
 
+import com.grkj.data.model.dos.WorkflowMode
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 

+ 5 - 0
data/src/main/java/com/grkj/data/logic/IRoleLogic.kt

@@ -54,4 +54,9 @@ interface IRoleLogic {
      * 获取角色下的用户
      */
     fun getUserIdsByRole(roleIds: List<Long>): List<Long>
+
+    /**
+     * 添加预设角色
+     */
+    fun addPresetRoleData(presetSysRole: List<SysRole>)
 }

+ 10 - 0
data/src/main/java/com/grkj/data/logic/IWorkflowLogic.kt

@@ -74,4 +74,14 @@ interface IWorkflowLogic {
      * 检查预设流程模式的步骤图标
      */
     fun checkPresetWorkflowStepIcon()
+
+    /**
+     * 添加预设流程模式
+     */
+    fun addPresetWorkflowMode(presetWorkflowMode: List<WorkflowMode>)
+
+    /**
+     * 添加预设流程步骤
+     */
+    fun addPresetWorkflowStep(presetWorkflowStep: List<WorkflowStep>)
 }

+ 4 - 0
data/src/main/java/com/grkj/data/logic/impl/network/NetworkRoleLogic.kt

@@ -50,6 +50,10 @@ class NetworkRoleLogic @Inject constructor() : BaseLogic(), IRoleLogic {
         TODO("Not yet implemented")
     }
 
+    override fun addPresetRoleData(presetSysRole: List<SysRole>) {
+        TODO("Not yet implemented")
+    }
+
     override fun addRoleData(addRoleDo: AddRoleDo) {
         TODO("Not yet implemented")
     }

+ 8 - 0
data/src/main/java/com/grkj/data/logic/impl/network/NetworkWorkflowLogic.kt

@@ -71,4 +71,12 @@ class NetworkWorkflowLogic @Inject constructor()  : BaseLogic(), IWorkflowLogic{
     override fun checkPresetWorkflowStepIcon() {
         TODO("Not yet implemented")
     }
+
+    override fun addPresetWorkflowMode(presetWorkflowMode: List<WorkflowMode>) {
+        TODO("Not yet implemented")
+    }
+
+    override fun addPresetWorkflowStep(presetWorkflowStep: List<WorkflowStep>) {
+        TODO("Not yet implemented")
+    }
 }

+ 4 - 0
data/src/main/java/com/grkj/data/logic/impl/standard/RoleLogic.kt

@@ -41,6 +41,10 @@ class RoleLogic @Inject constructor(val roleDao: RoleDao, val sysMenuDao: SysMen
         return roleDao.getUserIdsByRoleIds(roleIds)
     }
 
+    override fun addPresetRoleData(presetSysRole: List<SysRole>) {
+        roleDao.insertRoles(presetSysRole)
+    }
+
     override fun deleteUserRoleByUserId(userIds: List<Long>) {
         roleDao.deleteUserRoleByUserIds(userIds)
     }

+ 8 - 0
data/src/main/java/com/grkj/data/logic/impl/standard/WorkflowLogic.kt

@@ -42,6 +42,14 @@ class WorkflowLogic @Inject constructor(val workflowStepDao: WorkflowStepDao) :
         workflowStepDao.insertSteps(workflowSteps)
     }
 
+    override fun addPresetWorkflowMode(presetWorkflowMode: List<WorkflowMode>) {
+        workflowStepDao.insertWorkflowModes(presetWorkflowMode)
+    }
+
+    override fun addPresetWorkflowStep(presetWorkflowStep: List<WorkflowStep>) {
+        workflowStepDao.insertPresetSteps(presetWorkflowStep)
+    }
+
     override fun checkPresetWorkflowStepIcon() {
         val workflowModes = getWorkflowModes()
         for (mode in workflowModes) {

+ 14 - 0
shared/src/main/java/com/grkj/shared/utils/extension/Context.kt

@@ -0,0 +1,14 @@
+package com.grkj.shared.utils.extension
+
+import android.content.Context
+import java.io.BufferedReader
+import java.io.InputStreamReader
+
+/**
+ * 从 assets 中读取 JSON 文件并返回字符串
+ */
+fun Context.readJsonFromAssets(path: String): String {
+    return assets.open(path).use { inputStream ->
+        BufferedReader(InputStreamReader(inputStream)).readText()
+    }
+}