chore: 初始开源发布

iotlcm-app:小程序端 + 用户端服务。

- app/:uni-app 小程序前端(基于 unibest,MIT)
  - 微信 AppID → YOUR_WX_APPID,uni-app AppID → __UNI__YOURAPPID
  - 内网后端地址 → admin.iotlcm.example.com
  - 应用标题与 unibest 模板 README 重写(保留上游致谢与 MIT 声明)
- server/:GoFrame 用户端服务(基于 XiuAdmin,Apache-2.0)
  - module xiuadmin → git.5iot.com/iotlcm-public/iotlcm-app(360 文件)
  - 支付回调地址 → app.iotlcm.example.com,商户名与应用名泛化
  - 真实手机号 → 合法 11 位编造号(保留号段前 3 位 + 后 4 位)
  - 依赖号码尾部的断言同步更新
  - 补 server/LICENSE(Apache-2.0)
- 移除内部资产:CI 触发器
- 补根 README,LF 行尾 + .gitattributes

已知:TestSysDept_RefreshDeptAncestors 在源仓同一提交上同样失败,属既有缺陷。
This commit is contained in:
MiFaZhan
2026-10-26 14:01:25 +08:00
commit 2ed5dfa6a1
1013 changed files with 138466 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
package consts
const (
ConfigKeyAppRegisterDeptId = "iot.register.app.dept"
ConfigKeyAppRegisterRoleId = "iot.register.app.role"
)
+151
View File
@@ -0,0 +1,151 @@
package consts
const (
// 批次异步状态 batch_status
BatchAsyncStatusCreated = 0
BatchAsyncStatusPending = 1
BatchAsyncStatusProcessing = 2
BatchAsyncStatusSuccess = 3
BatchAsyncStatusFailed = 4
BatchAsyncStatusPartialSuccess = 5
// 兼容旧业务命名。
BatchStatusNormal = BatchAsyncStatusCreated
BatchStatusSuccess = BatchAsyncStatusSuccess
// 批次运行结果 run_result
BatchRunResultPending = 0
BatchRunResultRunning = 1
BatchRunResultSuccess = 2
BatchRunResultFailed = 3
BatchRunResultPartialSuccess = 4
// 批次明细状态 detail_status
BatchDetailStatusPending = 0
BatchDetailStatusRunning = 1
BatchDetailStatusSuccess = 2
BatchDetailStatusFailed = 3
BatchSourceTypeBatchSelect = 0
BatchTypePrepare = 4
BatchTypeAllocate = 3
BatchTypeRenew = 101
BatchTypeChange = 102
BatchTypeStart = 103
BatchTypeStop = 104
BatchTypeRestart = 105
BatchTypeDataStart = 109
BatchTypeDataStop = 110
BatchNoPrefixAllocate = "ALC"
BatchNoPrefixRenew = "REN"
BatchNoPrefixChange = "CHG"
BatchNoPrefixStart = "STR"
BatchNoPrefixStop = "STP"
BatchNoPrefixRestart = "RST"
BatchNoPrefixDataStart = "DOP"
BatchNoPrefixDataStop = "DST"
BatchNoPrefixWarning = "SWC"
BlankOutStatusNo = 1
)
const (
DownloadStatusPending = 0
DownloadStatusGenerated = 1
DownloadStatusRunning = 2
DownloadStatusFailed = 3
)
const (
ResourceTypeExcel = 1
ResourceExportSceneAllocate = 3
ResourceExportSceneRenew = 101
)
const (
ResourceBatchDownloadTaskSimCardAllocate = "卡划拨结果"
ResourceBatchDownloadTaskSimCardRenew = "卡续费结果"
SimCardAllocateSubDirImportExcel = "sim-card-allocate/import"
SimCardAllocateSubDirResultExcel = "sim-card-allocate/result"
SimCardRenewSubDirImportExcel = "sim-card-renew/import"
SimCardRenewSubDirResultExcel = "sim-card-renew/result"
)
const (
CustomerTypeAgent = 1
CustomerTypeTerminal = 2
OrderTypeCardSubscribe = 1
OrderTypeBalanceRecharge = 2
OrderStatusPendingPay = 0
OrderStatusCompleted = 5
OrderReturnStatusNone = 0
OrderReturnStatusPending = 1
OrderReturnStatusRunning = 2
OrderReturnStatusPartial = 3
OrderReturnStatusSuccess = 4
PayTypeBalance = 0
PayTypeOnline = 1
PayStatusUnpaid = 0
PayStatusPaid = 2
ShippingMethodNone = 3
ProductTypeCard = 1
ProductTypeBalance = 4
PayModeYearMonth = 1
PackageBusinessTypeSubscribe = 0
PackageBusinessTypeChange = 1
PackageBusinessTypeRenew = 2
PackageStatusNone = 0
PackageStatusPending = 1
PackageStatusEffective = 2
PackageStatusExpired = 3
EffectiveStatusPending = 0
EffectiveStatusEffective = 1
EffectiveStatusExpired = 2
EffectiveStatusTerminated = 3
EffectiveStatusVoided = 4
)
const (
V3ApiSimBossCardStatusPendingActivate = 1
V3ApiSimBossCardStatusActivated = 2
V3ApiSimBossCardStatusStopped = 4
)
const (
SimCardStatusOperTypeStop = "0"
SimCardStatusOperTypeStart = "1"
SimCardDataOperTypeStart = 0
SimCardDataOperTypeStop = 1
SimCardDataApnName = "CMIOT"
)
const (
ImportStatusSuccess = "success"
ImportStatusFailed = "failed"
)
const (
BalanceIncome = 0
BalanceExpense = 1
BalanceTransactionTypeRecharge = 0
BalanceTransactionTypeConsume = 1
BalanceTransactionChannelBalance = 0
BalanceTransactionChannelWechat = 2
BalanceTransactionChannelAlipay = 3
BalanceTransactionChannelMock = 9
)
+13
View File
@@ -0,0 +1,13 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
KeySysAuthToken = "login:%d:%s" // 系统认证token缓存 login:{userId}:{uuid}
KeySysAuthTokenReject = "login_reject:%d:%s:" // 系统认证token拒绝缓存 login_reject:{userId}:{uuid}
KeyLoginScanWechat = "login:scan:wechat:%d" // 系统二维码登录缓存 hash Key:SceneId field:tempUserId value:QrcodeCacheModel
KeyUserBindWechat = "user:bind:wechat:%d" // 系统二维码绑定缓存 hash Key:SceneId field:userId value:QrcodeCacheModel
)
+41
View File
@@ -0,0 +1,41 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
import "github.com/gogf/gf/v2/errors/gcode"
var (
// 账号不存在
CodeUserNotFound = gcode.New(10001, "账号不存在", nil)
// 账号已删除
CodeUserDeleted = gcode.New(10002, "账号已删除", nil)
// 密码错误
CodeUserPasswordError = gcode.New(10003, "密码错误", nil)
// 账号已禁用
CodeUserDisabled = gcode.New(10004, "账号已禁用", nil)
// 账号已锁定
CodeUserLocked = gcode.New(10005, "账号已锁定", nil)
// 账号已过期
CodeUserExpired = gcode.New(10006, "账号已过期", nil)
// 验证码错误
CodeCaptchaError = gcode.New(10007, "验证码错误", nil)
// 用户名已存在
CodeUserExists = gcode.New(10008, "用户名已存在", nil)
// 部门不存在
CodeDeptNotFound = gcode.New(10009, "部门不存在", nil)
// 手机号已存在
CodePhoneExists = gcode.New(10010, "手机号已存在", nil)
// 邮箱已存在
CodeEmailExists = gcode.New(10011, "邮箱已存在", nil)
// 登录已过期
CodeLoginExpired = gcode.New(10012, "登录已过期", nil)
// 部门下有子部门,不能删除
CodeDeptHasSub = gcode.New(10013, "部门下有子部门,不能删除", nil)
// 没有权限
CodeNoPermission = gcode.New(10014, "没有权限", nil)
// 无效Token
CodeInvalidToken = gcode.New(10015, "无效Token", nil)
)
+21
View File
@@ -0,0 +1,21 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
ConfigOssUrlPath = "sys.oss.urlPath" // 上传文件Url路径 "http://ab.com/" 或 "/" 或 "resource/upload|http://ab.com/upload"
ConfigOssFileTypeKey = "sys.oss.fileType" // 上传文件类型
ConfigOssImgTypeKey = "sys.oss.imgType" // 上传图片类型
ConfigOssFileSizeKey = "sys.oss.fileSize" // 上传文件大小
ConfigOssImgSizeKey = "sys.oss.imgSize" // 上传图片大小
ConfigOnlineForceLogout = "sys.online.forceLogout" // 在线用户强制退出
ConfigOssNewFileTypePath = "sys.oss.newFileTypePath.%d" // 上传文件类型路径 ${newFileType}
)
const (
ConfigOnlineForceLogoutTrue = "true" // 在线用户强制退出
ConfigOnlineForceLogoutFalse = "false" // 在线用户强制退出
)
+10
View File
@@ -0,0 +1,10 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
ContextKey = "ContextKey" // 上下文变量存储键名,前后端系统共享
)
+6
View File
@@ -0,0 +1,6 @@
package consts
const (
DBNameDefault = "default"
DBNameMemory = "memorydb"
)
+55
View File
@@ -0,0 +1,55 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
EventKeyServerClose = "server_close" // 服务关闭 args=[]
)
const (
EventKeyUserLogin = "user_login" // 用户登录 args=[uid,]
EventKeyUserLogout = "user_logout" // 用户退出 args=[uid,]
EventKeyUserCreate = "user_create" // 用户创建 args=[uid,]
EventKeyUserDelete = "user_delete" // 用户删除 args=[uidArray,]
EventKeyUserUpdate = "user_update" // 用户更新 args=[uid,]
)
const (
EventKeyDBSysConfigUpdate = "db.sys_config_update" // 系统配置创建更新删除 args=[configId, tenantId,key?]
EventKeyDBSysConfigCreate = "db.sys_config_create" // 系统配置创建 args=[configId, tenantId,key?]
EventKeyDBSysConfigDelete = "db.sys_config_delete" // 系统配置删除 args=[configId, tenantId]
)
const (
EventKeyDBSysDeptCreate = "db.sys_dept_create" // 系统部门创建 args=[deptId,]
EventKeyDBSysDeptUpdate = "db.sys_dept_update" // 系统部门更新 args=[deptId,]
EventKeyDBSysDeptDelete = "db.sys_dept_delete" // 系统部门删除 args=[deptId[],]
)
const (
EventKeyDBSysTenantCreate = "db.sys_tenant_create" // 租户创建 args=[pk,]
EventKeyDBSysTenantUpdate = "db.sys_tenant_update" // 租户更新 args=[pk,]
EventKeyDBSysTenantDelete = "db.sys_tenant_delete" // 租户删除 args=[pk[],]
EventKeyDBSysRoleCreate = "db.sys_role_create" // 角色创建 args=[pk,]
EventKeyDBSysRoleUpdate = "db.sys_role_update" // 角色更新 args=[pk,]
EventKeyDBSysRoleDelete = "db.sys_role_delete" // 角色删除 args=[pk[],]
EventKeyDBSysMenuCreate = "db.sys_menu_create" // 菜单创建 args=[pk,]
EventKeyDBSysMenuUpdate = "db.sys_menu_update" // 菜单更新 args=[pk,]
EventKeyDBSysMenuDelete = "db.sys_menu_delete" // 菜单删除 args=[pk[],]
EventKeyDBSysPostCreate = "db.sys_post_create" // 岗位创建 args=[pk,]
EventKeyDBSysPostUpdate = "db.sys_post_update" // 岗位更新 args=[pk,]
EventKeyDBSysPostDelete = "db.sys_post_delete" // 岗位删除 args=[pk[],]
EventKeyDBSysDictDataCreate = "db.sys_dict_data_create" // 字典数据创建 args=[pk,]
EventKeyDBSysDictDataUpdate = "db.sys_dict_data_update" // 字典数据更新 args=[pk,]
EventKeyDBSysDictDataDelete = "db.sys_dict_data_delete" // 字典数据删除 args=[pk[],]
EventKeyDBSysDictTypeCreate = "db.sys_dict_type_create" // 字典类型创建 args=[pk,]
EventKeyDBSysDictTypeUpdate = "db.sys_dict_type_update" // 字典类型更新 args=[pk,]
EventKeyDBSysDictTypeDelete = "db.sys_dict_type_delete" // 字典类型删除 args=[pk[],]
)
+14
View File
@@ -0,0 +1,14 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
HTTPContentTypeXml = "text/xml"
HTTPContentTypeHtml = "text/html"
HTTPContentTypeStream = "text/event-stream"
HTTPContentTypeJson = "application/json"
HTTPContentTypeExcel = "application/octet-stream"
)
+15
View File
@@ -0,0 +1,15 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
// 内存缓存KEY常量 注明 key组成和 过期时间 清理方式
const (
MemCacheDeptName = "dept_name_%d" // 部门名称缓存 部门id:name 24小时过期
MemCacheUserInfo = "user_info_%d" // 用户信息缓存 用户id:miniinfo 24小时过期 用户修改是清理
MemCacheUserAccessCodeList = "user_access_code_list_%d" // 用户访问码列表缓存 用户id:access_code_list 24小时过期 用户退出清理
MemCacheUserRoleDataAccessCodeList = "user_role_data_access_code_list_%d" // 用户角色数据访问码列表缓存 用户id:role_id:data_access_code_list 24小时过期 用户退出清理
MemCacheSystemConfig = "system_config_%s" // 系统配置缓存 租户ID:map[key]value 24小时过期
)
+20
View File
@@ -0,0 +1,20 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
const (
QueueSysOptLog = "queue:sys_opt_log"
)
// 数据库变动类型
const (
DbChgTypeAdd = "add" // 数据库变动新增
DbChgTypeEdit = "edit" // 数据库变动编辑
DbChgTypeDel = "del" // 数据库变动删除
)
const (
BroadcastDbChg = "broadcast:db:chg" // 数据库配置表变动更新广播消息 obj{table_name,pk,type:add/edit/del,data:{主要字段数据}}
)
+150
View File
@@ -0,0 +1,150 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
var (
// 默认系统租客编号,禁止修改编号
DefaultSystemTenantCode = "000000"
SuperAdminRoleId = int64(1)
)
var (
// 状态: 0正常 1停用
SysStatusNormal = "0"
SysStatusDisable = "1"
)
var (
// 菜单状态: 0正常 1停用
SysMenuStatusNormal = "0"
SysMenuStatusDisable = "1"
)
var (
// 菜单类型: M目录 C菜单 F按钮
SysMenuTypeDir = "M"
SysMenuTypeMenu = "C"
SysMenuTypeBtn = "F"
)
var (
// 菜单可见: 0显示 1隐藏
SysMenuVisibleShow = "0"
SysMenuVisibleHide = "1"
)
var (
// 菜单是否为外链: 0是 1否
SysMenuIsFrameNo = 1
SysMenuIsFrameYes = 0
)
var (
// 用户状态: 0正常 1停用
SysUserStatusNormal = "0"
SysUserStatusDisable = "1"
SysUserStatusLocked = "2"
SysUserStatusExpired = "3"
SysUserStatusDeleted = "4"
)
var (
// 角色菜单数据范围: 0继承角色数据范围
SysRoleMenuDataScopeRole = "0"
// 角色数据范围: 1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限 5仅本人数据权限 6本部门及以下或本人数据权限 7本组织及本组织下一级数据权限 8本组织下一级数据权限
SysRoleDataScopeAll = "1"
SysRoleDataScopeCustom = "2"
SysRoleDataScopeDept = "3"
SysRoleDataScopeDeptAndBelow = "4"
SysRoleDataScopePersonal = "5"
SysRoleDataScopeDeptAndBelowOrPersonal = "6"
SysRoleDataScopeOrgAndNextLevel = "7"
SysRoleDataScopeOrgNextLevel = "8"
)
var (
// 上传文件类型: 1文件 2图片
SysUploadFileTypeFile = "file"
SysUploadFileTypeImg = "img"
)
var (
// 新文件类型
SysUploadNewFileTypeUserFile = 1 // 用户文件
SysUploadNewFileTypeUserImg = 2 // 用户图片
SysUploadNewFileTypeDeviceFile = 3 // 设备文件 ${device_key}
)
var (
// 新文件类型路径
SysUploadNewFileTypePathUserFile = "user/file" // 用户文件
SysUploadNewFileTypePathUserImg = "user/img" // 用户图片
SysUploadNewFileTypePathDeviceFile = "device" // 设备文件 ${device_key}
)
var (
// 用户性别: 0男 1女 2未知
SysUserSexMale = "0"
SysUserSexFemale = "1"
SysUserSexUnknown = "2"
)
var (
// 用户类型: pc端 app端
SysUserTypeSys = "sys_user"
SysUserTypeAPP = "app_user"
)
var (
// AppTerminalDeptId 仅作为旧数据兜底默认部门;终端用户身份以 sys_config 的小程序角色和所属组织配置为准。
AppTerminalDeptId = int64(147)
)
var (
// 部门状态: 0正常 1停用
SysDeptStatusNormal = "0"
SysDeptStatusDisable = "1"
)
var (
// 任务状态: 0正常 1停用
SysJobStatusNormal = "0"
SysJobStatusDisable = "1"
)
var (
// 计划执行策略 0不限制并发 1限制并发
SysJobMisfirePolicyMulty = 1
SysJobMisfirePolicyOnce = 2
)
var (
// 权限码前缀 x-check-permission
SysCheckPermissionPrefix = "cp"
SysCheckPermissionRolePrefix = "cpr:" // 角色权限码前缀+角色权限
SysCheckPermissionMenuPrefix = "cpm:" // 菜单权限码前缀+菜单权限
SysCheckPermissionDeptPrefix = "cpd:" // 部门权限码前缀+部门编码
SysCheckPermissionPostPrefix = "cpp:" // 岗位权限码前缀+岗位编码
SysCheckPermissionUserPrefix = "cpu:" // 用户权限码前缀+用户名
SysCheckPermissionCurrentUser = "cpc:current:user" // 当前登录用户默认权限
SysCheckPermissionTerminalUser = "cpa:terminal:user" // 小程序终端用户专用权限
)
var StatusSlice = []int{0, 1}
var (
// 公告范围: 1全部 2指定组织 3指定用户
NoticeRangeAll = 1
NoticeRangeDept = 2
NoticeRangeUser = 3
)
var (
// 租户配置
ConfigKeyTenantDefaultRegisterDeptId = "iot.register.dept"
ConfigKeyTenantDefaultRegisterRoleId = "iot.register.role"
)
var (
// 微信平台
SourceWechatMp = "wechat_mp"
)
+23
View File
@@ -0,0 +1,23 @@
// Package consts
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package consts
// 服务器监控信息
const (
MonitorServerHost = "host"
MonitorServerSysLoad = "sysLoad"
MonitorServerCpu = "cpu"
MonitorServerMem = "mem"
MonitorServerDisk = "disk"
MonitorServerNet = "net"
MonitorServerGo = "go"
)
// WEBSOCKET订阅Tag 服务器监控信息
const (
WSTagMonitorServer = "ws:tag:monitor:server" // WEBSOCKET订阅Tag 服务器监控信息
WSEventMonitorServer = "ws:event:monitor:server:%s" // WEBSOCKET订阅 服务器监控信息 %s in [host,sysLoad,cpu,disk,net,go]
)