chore: init bj_power monorepo (dashboard/mes/wms/wms_client/workstation), clear subproject git metadata and align naming to folder names

This commit is contained in:
SunYF
2026-08-27 10:09:54 +08:00
commit 1f0ee844a4
408 changed files with 102201 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
syntax = "v1"
import (
"base.api"
)
type (
QueryApisReq {
PageReq
SortReq
Path string `form:"path,optional"`
Method string `form:"method,optional"`
}
CreateApiReq {
Path string `json:"path" validate:"required" comment:"api路径"`
Method string `json:"method" validate:"required" comment:"api请求方法"`
Description string `json:"description,optional" comment:"api描述"`
}
UpdateApiReq {
PathId
Path string `json:"path" validate:"required" comment:"api路径"`
Method string `json:"method" validate:"required" comment:"api请求方法"`
Description string `json:"description,optional" comment:"api描述"`
}
QueryApisReply {
PageReply
Data []ApiReply `json:"data"`
}
ApiReply {
Id int `json:"id"`
Path string `json:"path" comment:"api路径"`
Method string `json:"method" comment:"api请求方法"`
Description string `json:"description" comment:"api描述"`
CreatedAt int64 `json:"createdAt" comment:"创建时间"` // 创建时间
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"` // 更新时间
}
)
@server (
jwt: Auth
group: api
prefix: /api/v1
)
service spherical-api {
@doc "查询接口分页列表"
@handler queryApis
get /apis (QueryApisReq) returns (QueryApisReply)
@doc "获取接口详情"
@handler getApi
get /apis/:id (PathId) returns (ApiReply)
@doc "创建接口"
@handler createApi
post /apis (CreateApiReq) returns (int)
@doc "编辑接口"
@handler updateApi
put /apis/:id (UpdateApiReq)
@doc "删除接口"
@handler deleteApi
delete /apis/:id (PathId)
//////////////////////////////////////////////////
@doc "通过权限获取接口列表"
@handler listApisOfPermission
get /permissions/:id/apis/list (PathId) returns ([]ApiReply)
}
+54
View File
@@ -0,0 +1,54 @@
syntax = "v1"
type (
PageReq {
Page int `form:"page,default=1,range=[1:]" validate:"gte=1"`
Limit int `form:"limit,default=10,range=[1:100]" validate:"gte=1,lte=100"`
}
SortReq {
Sort string `form:"sort,optional"`
Order string `form:"order,optional" validate:"omitempty,oneof=asc desc ascend descend"`
}
PathId {
Id int `path:"id"`
}
BatchExecIds {
Ids []int `json:"ids" comment:"批量操作ID集合"`
}
PageReply {
Page int `json:"page"`
Limit int `json:"limit"`
Total int `json:"total"`
}
BatchExecReply {
Count int `json:"count" comment:"批量操作执行数"`
}
Role {
Id int `json:"id"`
Name string `json:"name"` // 角色名
}
Dept {
Id int `json:"id"`
Name string `json:"name"` // 部门
}
UserReply {
Id int `json:"id"`
Name string `json:"name"` // 名称
Mobile string `json:"mobile"` // 用户名
Gender int `json:"gender"` // M:男|F:女
Avatar string `json:"avatar"` // 头像
Position string `json:"position"` // 职位
Mail string `json:"mail"` // 企业邮箱
MainDepartment int `json:"mainDepartment"` // 主要部门
State int `json:"state,optional" validate:"omitempty,oneof=0 1" comment:"启用状态"` // 0:启用|1:禁用
DepartmentId int `json:"departmentId"`
DepartmentName string `json:"departmentName"`
RoleId int `json:"roleId"`
RoleName string `json:"roleName"`
LastLoginAt int64 `json:"lastLoginAt"` // 最后登录时间
LastLoginIp string `json:"lastLoginIp"` // 最后登录IP
DisabledAt int64 `json:"disabledAt"` // 创建人
CreatedAt int64 `json:"createdAt"` // 创建时间
UpdatedAt int64 `json:"updatedAt"` // 更新时间
}
)
+75
View File
@@ -0,0 +1,75 @@
syntax = "v1"
import (
"user.api"
"base.api"
)
type (
QueryDeptsReq {
PageReq
SortReq
}
CreateDeptReq {
Name string `json:"name" validate:"required" comment:"部门名称"`
ParentId int `json:"parentId" validate:"required" comment:"上级部门"`
Order int `json:"order,optional" comment:"排序, 在父部门中的次序值, order值大的排序靠前"`
}
UpdateDeptReq {
PathId
Name string `json:"name" validate:"required" comment:"部门名称"`
ParentId int `json:"parentId" validate:"required" comment:"上级部门"`
Order int `json:"order,optional" comment:"排序, 在父部门中的次序值, order值大的排序靠前"`
}
QueryDeptsReply {
PageReply
Data []DeptReply `json:"data"`
}
DeptReply {
Id int `json:"id"`
Name string `json:"name" comment:"部门名称"`
ParentId int `json:"parentId" comment:"上级部门"`
Order int `json:"order" comment:"排序, 在父部门中的次序值, order值大的排序靠前"`
CreatedAt int64 `json:"createdAt" comment:"创建时间"` // 创建时间
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"` // 更新时间
}
DeptTree {
Id int `json:"id"`
Name string `json:"name"`
Children []*DeptTree `json:"children,omitempty"`
}
)
@server (
jwt: Auth
group: dept
prefix: /api/v1
)
service spherical-api {
@doc "查询部门分页列表"
@handler queryDepts
get /depts (QueryDeptsReq) returns (QueryDeptsReply)
@doc "获取部门树"
@handler deptsTree
get /depts/tree returns ([]*DeptTree)
@doc "获取部门详情"
@handler getDept
get /depts/:id (PathId) returns (DeptReply)
@doc (
summary: "创建部门"
comment: "创建成功返回部门信息"
)
@handler createDept
post /depts (CreateDeptReq) returns (int)
@doc "编辑部门"
@handler updateDept
put /depts/:id (UpdateDeptReq)
@doc "删除部门"
@handler deleteDept
delete /depts/:id (PathId)
}
+109
View File
@@ -0,0 +1,109 @@
syntax = "v1"
import (
"base.api"
)
type (
QueryEquipmentsReq {
PageReq
SortReq
Keyword string `form:"keyword,optional"`
}
CreateEquipmentReq {
Name string `json:"name" validate:"required,gte=2,lte=20" comment:"设备名称"`
EquipmentTypeId int `json:"equipmentTypeId" validate:"required" comment:"设备类型ID"`
IpAddress string `json:"ipAddress" comment:"IP地址"`
Location string `json:"location" comment:"位置"`
Remark string `json:"remark" comment:"备注"`
SlotCount int `json:"slotCount" comment:"槽位数量"`
Exchange bool `json:"exchange,optional" comment:"是否支持换料"`
Batch bool `json:"batch,optional" comment:"是否批量完成"`
}
UpdateEquipmentReq {
PathId
Name string `json:"name,optional" validate:"gte=2,lte=20" comment:"设备名称"`
EquipmentTypeId int `json:"equipmentTypeId,optional" comment:"设备类型ID"`
IpAddress string `json:"ipAddress" comment:"IP地址"`
Location string `json:"location" comment:"位置"`
Remark string `json:"remark" comment:"备注"`
SlotCount int `json:"slotCount" comment:"槽位数量"`
Exchange bool `json:"exchange,optional" comment:"是否支持换料"`
Batch bool `json:"batch,optional" comment:"是否批量完成"`
}
QueryEquipmentsReply {
PageReply
Data []EquipmentReply `json:"data"`
}
EquipmentReply {
Id int `json:"id"`
Name string `json:"name" comment:"设备名称"`
EquipmentTypeId int `json:"equipmentTypeId" comment:"设备类型ID"`
TypeCode string `json:"typeCode" comment:"设备类型编码"`
TypeName string `json:"typeName" comment:"设备类型名称"`
IpAddress string `json:"ipAddress" comment:"IP地址"`
Location string `json:"location" comment:"位置"`
Status string `json:"status" comment:"状态"`
Remark string `json:"remark" comment:"备注"`
SlotCount int `json:"slotCount" comment:"槽位数量"`
Exchange bool `json:"exchange" comment:"是否支持换料"`
Batch bool `json:"batch" comment:"是否批量完成"`
Slots []EquipmentSlotReply `json:"slots,optional" comment:"槽位列表"`
CreatedAt int64 `json:"createdAt" comment:"创建时间"`
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"`
}
EquipmentSlotReply {
Id int `json:"id"`
SlotNo int `json:"slotNo" comment:"槽位序号"`
Status string `json:"status" comment:"槽位状态"`
CurrentJobId int `json:"currentJobId,optional" comment:"当前工件ID"`
}
EquipmentTypeReply {
Id int `json:"id"`
Code string `json:"code" comment:"类型编码"`
Name string `json:"name" comment:"类型名称"`
Movable bool `json:"movable" comment:"是否可移动"`
DefaultCapacity int `json:"defaultCapacity" comment:"默认槽位容量"`
}
BatchDeleteEquipmentsReq {
Ids []int `json:"ids"`
}
)
@server (
jwt: Auth
group: equipment
prefix: /api/v1
)
service spherical-api {
@doc "查询设备分页列表"
@handler queryEquipments
get /equipments (QueryEquipmentsReq) returns (QueryEquipmentsReply)
@doc "获取设备详情"
@handler getEquipment
get /equipments/:id (PathId) returns (EquipmentReply)
@doc "查询设备类型列表"
@handler listEquipmentTypes
get /equipment-types returns ([]EquipmentTypeReply)
@doc (
summary: "创建设备"
comment: "创建成功返回设备信息"
)
@handler createEquipment
post /equipments (CreateEquipmentReq) returns (int)
@doc "编辑设备"
@handler updateEquipment
put /equipments/:id (UpdateEquipmentReq)
@doc "删除设备"
@handler deleteEquipment
delete /equipments/:id (PathId)
@doc "批量删除设备"
@handler batchDeleteEquipments
post /equipments/batch-delete (BatchDeleteEquipmentsReq)
}
+12
View File
@@ -0,0 +1,12 @@
package apis
import (
_ "github.com/zeromicro/go-zero/tools/goctl/api/format"
_ "github.com/zeromicro/go-zero/tools/goctl/api/gogen"
)
//format
//go:generate go run ./tools/format.go
//generate
//go:generate go run ./tools/generate.go
+36
View File
@@ -0,0 +1,36 @@
syntax = "v1"
import "base.api"
type (
LoginReq {
Username string `json:"username" validate:"required" comment:"账号"`
Password string `json:"password" validate:"required" comment:"密码"`
CaptchaId string `json:"captchaId,optional" comment:"验证码Id"`
CaptchaCode string `json:"captchaCode,optional" comment:"验证码"`
}
RefreshTokenReq {
AccessToken string `header:"Authorization"`
RefreshToken string `json:"refreshToken"`
}
TokenReply {
AccessToken string `json:"accessToken"`
AccessExpire int `json:"accessExpire"`
RefreshToken string `json:"refreshToken"`
RefreshExpire int `json:"refreshExpire"`
}
)
@server (
group: login
prefix: /api/v1
)
service spherical-api {
@doc "登录"
@handler login
post /login (LoginReq) returns (TokenReply)
@doc "刷新token"
@handler refreshToken
post /refreshToken (RefreshTokenReq) returns (TokenReply)
}
+36
View File
@@ -0,0 +1,36 @@
syntax = "v1"
info (
title: "spcm"
desc: "spcm api"
author: "wangcheng"
email: "3316148@qq.com"
version: "v1"
)
import (
"user.api"
"login.api"
"api.api"
"role.api"
"permission.api"
"equipment.api"
"work_order.api"
"job.api"
"dept.api"
"alarm.api"
"dashboard.api"
"product_type.api"
"dock.api"
"machine.api"
"scheduler.api"
"task.api"
"temp_station.api"
"manual_action.api"
"eventlog.api"
"report.api"
"system.api"
"inspection.api"
"micrometer.api"
"wms.api"
)
+98
View File
@@ -0,0 +1,98 @@
syntax = "v1"
import (
"base.api"
)
type (
CreatePermissionReq {
Name string `json:"name,optional" validate:"required" comment:"权限名称"`
Code string `json:"code,optional" validate:"required" comment:"权限代码"`
ParentId *int `json:"parentId,optional" comment:"父权限ID"`
Sort string `json:"sort,optional" comment:"排序"`
IsMenu bool `json:"isMenu" comment:"是否菜单"` // 是否菜单
Description string `json:"description,optional" comment:"权限描述"` // 描述
}
UpdatePermissionReq {
PathId
Name string `json:"name,optional" validate:"required" comment:"权限名称"`
Code string `json:"code,optional" validate:"required" comment:"权限代码"`
ParentId *int `json:"parentId,optional" comment:"父权限ID"`
Sort string `json:"sort,optional" comment:"排序"`
IsMenu bool `json:"isMenu" comment:"是否菜单"` // 是否菜单
Description string `json:"description,optional" comment:"权限描述"` // 描述
}
SetPermissionApisReq {
PathId
Apis []int `json:"apis"`
}
DeletePermissionApiReq {
PathId
ApiId int `path:"apiId"`
}
PermissionReply {
Id int `json:"id,omitempty"`
Name string `json:"name,omitempty" comment:"权限名称"`
Code string `json:"code,omitempty" comment:"权限代码"`
ParentId *int `json:"parentId,omitempty" comment:"父权限ID"`
Sort string `json:"sort,omitempty" comment:"排序"`
IsMenu bool `json:"isMenu,omitempty" comment:"是否菜单"` // 是否菜单
Description string `json:"description,omitempty" comment:"权限描述"` // 描述
CreatedAt int64 `json:"createdAt" comment:"创建时间"`
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"`
}
PermissionTree {
Id int `json:"id"`
Name string `json:"name" comment:"权限名称"`
Code string `json:"code" comment:"权限代码"`
ParentId *int `json:"parentId" comment:"父权限ID"`
Sort string `json:"sort" comment:"排序"`
IsMenu bool `json:"isMenu" comment:"是否菜单"` // 是否菜单
Description string `json:"description,omitempty" comment:"权限描述"` // 描述
Children []PermissionTree `json:"children,omitempty"`
}
)
@server (
jwt: Auth
group: permission
prefix: /api/v1
)
service spherical-api {
@doc "获取权限列表"
@handler listPermissions
get /permissions/list returns ([]PermissionReply)
@doc "获取子权限列表"
@handler listChildrenPermissions
get /permissions/:id/children-permissions/list (PathId) returns ([]PermissionReply)
@doc "获取权限树"
@handler permissionsTree
get /permissions/tree returns (PermissionTree)
@doc "创建权限"
@handler createPermission
post /permissions (CreatePermissionReq) returns (int)
@doc "编辑权限"
@handler updatePermission
put /permissions/:id (UpdatePermissionReq)
@doc "删除权限"
@handler deletePermission
delete /permissions/:id (PathId)
//////////////////////////////////////////////////
@doc "通过角色获取权限ID列表"
@handler listPermissionIdsOfRole
get /roles/:id/permissions/ids (PathId) returns ([]int)
@doc "设置权限接口"
@handler setPermissionApis
put /permissions/:id/apis (SetPermissionApisReq)
@doc "删除权限接口"
@handler deletePermissionApi
delete /permissions/:id/apis/:apiId (DeletePermissionApiReq)
}
+63
View File
@@ -0,0 +1,63 @@
syntax = "v1"
import (
"base.api"
)
type (
CreateProductTypeReq {
Code string `json:"code,optional" validate:"required,max=20"`
Name string `json:"name,optional" validate:"required,max=50"`
Category string `json:"category,optional" validate:"required"`
CncMachineIDs []int `json:"cncMachineIds,optional"`
Remark string `json:"remark,optional" validate:"omitempty,max=255"`
}
UpdateProductTypeReq {
ID int `json:"id"`
Code string `json:"code,optional" validate:"required,max=20"`
Name string `json:"name,optional" validate:"required,max=50"`
Category string `json:"category,optional" validate:"required"`
CncMachineIDs []int `json:"cncMachineIds,optional"`
Remark string `json:"remark,optional" validate:"omitempty,max=255"`
}
ListProductTypesReq {
Keyword string `form:"keyword,optional"`
ActiveOnly bool `form:"activeOnly,optional"`
}
ProductTypeReply {
ID int `json:"id"`
Code string `json:"code"`
Name string `json:"name"`
Category string `json:"category"`
RecipeID *int `json:"recipeId"`
CncMachineIDs []int `json:"cncMachineIds"`
IsActive bool `json:"isActive"`
Remark string `json:"remark,omitempty"`
}
)
@server (
group: product_type
prefix: /api/v1
)
service spherical-api {
@doc "获取产品类型列表"
@handler listProductTypes
get /product-types/list (ListProductTypesReq) returns ([]ProductTypeReply)
@doc "通过ID查询产品类型"
@handler getProductType
get /product-types/:id (PathId) returns (ProductTypeReply)
@doc "创建产品类型"
@handler createProductType
post /product-types (CreateProductTypeReq) returns (int)
@doc "更新产品类型"
@handler updateProductType
put /product-types/:id (UpdateProductTypeReq)
@doc "删除产品类型"
@handler deleteProductType
delete /product-types/:id (PathId)
}
+83
View File
@@ -0,0 +1,83 @@
syntax = "v1"
import (
"base.api"
"user.api"
"permission.api"
)
type (
QueryRolesReq {
PageReq
SortReq
Name string `form:"name,optional"`
}
CreateRoleReq {
Name string `json:"name,optional" validate:"required,gte=2,lte=20" comment:"角色名, 不能超过20个字符"`
Description string `json:"description,optional" comment:"描述, 不能超过60个字符"`
}
UpdateRoleReq {
PathId
Name string `json:"name,optional" validate:"required,gte=2,lte=20" comment:"角色名, 不能超过20个字符"`
Description string `json:"description,optional" comment:"描述, 不能超过60个字符"`
}
SetRolePermissionsReq {
PathId
Permissions []int `json:"permissions,optional" validate:"required"`
}
AddRoleUsersReq {
PathId
Users []int `json:"users,optional" validate:"required"`
}
DeleteRoleUserReq {
PathId
UserId int `path:"userId"`
}
QueryRolesReply {
PageReply
Data []RoleReply `json:"data"`
}
RoleReply {
Id int `json:"id"`
Name string `json:"name" comment:"角色名, 不能超过20个字符"`
Description string `json:"description" comment:"描述, 不能超过60个字符"`
CreatedAt int64 `json:"createdAt" comment:"创建时间"` // 创建时间
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"` // 更新时间
}
)
@server (
jwt: Auth
group: role
prefix: /api/v1
)
service spherical-api {
@doc "查询角色分页列表"
@handler queryRoles
get /roles (QueryRolesReq) returns (QueryRolesReply)
@doc "创建角色"
@handler createRole
post /roles (CreateRoleReq) returns (int)
@doc "编辑角色"
@handler updateRole
put /roles/:id (UpdateRoleReq)
@doc "删除角色"
@handler deleteRole
delete /roles/:id (PathId)
//////////////////////////////////////////////////
@doc "设置角色权限"
@handler setRolePermissions
put /roles/:id/permissions (SetRolePermissionsReq)
@doc "添加角色用户"
@handler addRoleUsers
post /roles/:id/users (AddRoleUsersReq)
@doc "删除角色用户"
@handler deleteRoleUser
delete /roles/:id/users/:userId (DeleteRoleUserReq)
}
+28
View File
@@ -0,0 +1,28 @@
syntax = "v1"
info (
title: "系统状态 API"
desc: "控制面板系统状态查询"
author: "wangcheng"
version: "1.0"
)
type SystemStatusReply {
PlcConnected bool `json:"plcConnected"`
RobotConnected bool `json:"robotConnected"`
LineStatus string `json:"lineStatus"` // running/paused/emergency/idle
ActiveWorkOrders int `json:"activeWorkOrders"`
ActiveJobs int `json:"activeJobs"`
UnacknowledgedAlarms int `json:"unacknowledgedAlarms"`
PendingManualActions int `json:"pendingManualActions"`
}
@server (
prefix: /api/v1
group: system
jwt: Auth
)
service spherical-api {
@handler GetSystemStatus
get /system/status returns (SystemStatusReply)
}
+146
View File
@@ -0,0 +1,146 @@
syntax = "v1"
import (
"base.api"
)
type (
QueryUsersReq {
PageReq
SortReq
Keyword string `form:"keyword,optional"`
Gender int `form:"gender,optional"`
Role int `form:"role,optional"`
}
QueryDeptUsersReq {
PageReq
PathId
WithChildren bool `form:"withChildren"`
}
QueryRoleUsersReq {
PageReq
SortReq
PathId
}
CreateUserReq {
Name string `json:"name" validate:"required" comment:"姓名"` // 名称
Username string `json:"username" validate:"required" comment:"用户名"` // 用户名
Mobile string `json:"mobile" validate:"required,mobile" comment:"手机号"` // 手机号
Password string `json:"password" validate:"required,gte=6,lte=12" comment:"密码"`
Gender int `json:"gender,optional" validate:"omitempty,lte=2" comment:"性别"` // 0:未知|1:男|2:女
RoleId int `json:"roleId,optional" comment:"角色ID"` //角色id
DeptId int `json:"deptId,optional" comment:"部门ID"` //部门id
Position string `json:"position,optional" comment:"职位"` // 职位
Status int `json:"status,optional" validate:"omitempty,oneof=0 1" comment:"启用状态"` // 0:启用|1:禁用
}
UpdateUserReq {
PathId
Name string `json:"name" validate:"required" comment:"姓名"` // 名称
Username string `json:"username" validate:"required" comment:"用户名"` // 用户名
Mobile string `json:"mobile" validate:"required,mobile" comment:"手机号"` // 手机号
Gender int `json:"gender,optional" validate:"omitempty,lte=4" comment:"性别"` // 1:男|2:女
RoleId int `json:"roleId,optional" comment:"角色"` //角色id
State int `json:"state,optional" validate:"omitempty,oneof=0 1" comment:"启用状态"` // 0:启用|1:禁用
DepartmentId int `json:"departmentId,optional" comment:"部门"` //部门id
Position string `json:"position,optional"` // 职位
}
SetUserStateReq {
PathId
Name string `json:"name,optional" comment:"姓名"` // 名称
Status int `json:"status,optional" validate:"omitempty,oneof=0 1" comment:"启用状态"` // 0:启用|1:禁用
}
SetUserRolesReq {
PathId
Roles []int `json:"roles"`
}
SetUserPasswordReq {
OldPassword string `json:"oldPassword,optional" validate:"required,gte=6,lte=12" comment:"当前密码"` // 当前密码
NewPassword string `json:"newPassword,optional" validate:"required,gte=6,lte=12" comment:"新密码"` // 新密码
ConfirmPassword string `json:"confirmPassword,optional" validate:"required,eqfield=NewPassword" comment:"确认密码"`
}
ResetUserPasswordReq {
UserId int `json:"userId"`
}
QueryUsersReply {
PageReply
Data []UserInfoReply `json:"data"`
}
UserInfoReply {
Id int `json:"id"`
Name string `json:"name" comment:"姓名"` // 名称
Username string `json:"username" comment:"用户名"` // 用户名
Mobile string `json:"mobile" comment:"手机号"` // 手机号
Gender int `json:"gender" comment:"性别"` // 0:未知|1:男|2:女
RoleId int `json:"roleId" comment:"角色ID"` // 角色ID
RoleName string `json:"roleName" comment:"角色名称"` // 角色名称
DeptId int `json:"deptId" comment:"部门ID"` // 部门ID
DeptName string `json:"deptName" comment:"部门名称"` // 部门名称
Position string `json:"position" comment:"职位"` // 职位
Status int `json:"status" comment:"启用状态"` // 0:启用|1:禁用
CreatedAt int64 `json:"createdAt" comment:"创建时间"` // 创建时间
UpdatedAt int64 `json:"updatedAt" comment:"更新时间"` // 更新时间
}
)
@server (
jwt: Auth
group: user
prefix: /api/v1
)
service spherical-api {
@doc "查询用户分页列表"
@handler queryUsers
get /users (QueryUsersReq) returns (QueryUsersReply)
@doc "获取用户详情"
@handler getUser
get /users/:id (PathId) returns (UserInfoReply)
@doc "获取当前登录用户信息"
@handler userinfo
get /userinfo returns (UserInfoReply)
@doc (
summary: "创建用户"
comment: "创建成功返回用户信息"
)
@handler createUser
post /users (CreateUserReq) returns (int)
@doc "编辑用户"
@handler updateUser
put /users/:id (UpdateUserReq) returns (UserInfoReply)
@doc "重置密码"
@handler resetPassword
post /users/resetPassword (ResetUserPasswordReq)
@doc "修改密码"
@handler changePassword
post /users/changePassword (SetUserPasswordReq)
@doc "启用用户"
@handler enableUser
post /users/:id/enable (SetUserStateReq)
@doc "禁用用户"
@handler disableUser
post /users/:id/disable (SetUserStateReq)
@doc "删除用户"
@handler deleteUser
delete /users/:id (PathId)
//////////////////////////////////////////////////
@doc "通过部门查询用户分页列表"
@handler queryUsersOfDept
get /depts/:id/users (QueryDeptUsersReq) returns (QueryUsersReply)
@doc "通过角色查询用户分页列表"
@handler queryUsersOfRole
get /roles/:id/users (QueryRoleUsersReq) returns (QueryUsersReply)
@doc "设置用户角色"
@handler setUserRoles
post /users/:id/roles (SetUserRolesReq)
}
+219
View File
@@ -0,0 +1,219 @@
syntax = "v1"
import (
"base.api"
)
type (
// === 工站监控(对齐 frontend-api.md 7.2 节)===
StationJobBrief {
JobId int `json:"jobId"`
WorkOrderId int `json:"workOrderId"`
ProductTypeId int `json:"productTypeId"`
Status string `json:"status"`
PositionRefId string `json:"positionRefId"`
CurrentStepId string `json:"currentStepId"`
CurrentStepName string `json:"currentStepName"`
}
StationMonitorItem {
Id string `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
Status string `json:"status"`
HeartbeatOnline bool `json:"heartbeatOnline"`
CurrentJobs []StationJobBrief `json:"currentJobs"`
WaitingUnloadJobs []StationJobBrief `json:"waitingUnloadJobs"`
UpdatedAt string `json:"updatedAt"`
}
ActiveOrderSummary {
OrderId int `json:"orderId"`
OrderNo string `json:"orderNo"`
Status string `json:"status"`
ProductTypeId int `json:"productTypeId"`
TotalJobs int `json:"totalJobs"`
CompletedJobs int `json:"completedJobs"`
ScrappedJobs int `json:"scrappedJobs"`
}
StationMonitorReply {
Stations []StationMonitorItem `json:"stations"`
ActiveOrders []ActiveOrderSummary `json:"activeOrders"`
}
// === 工单管理(对齐 frontend-api.md 第 5 节)===
QueryWorkOrdersReq {
PageReq
SortReq
Keyword string `form:"keyword,optional"`
Statuses []string `form:"statuses,optional"`
ProductTypeId int `form:"productTypeId,optional"`
}
CreateWorkOrderReq {
ProductTypeId int `json:"productTypeId"`
Quantity int `json:"quantity,optional"`
WorkOrderNo string `json:"workOrderNo,optional"`
Remark string `json:"remark,optional"`
}
CreateWorkOrderReply {
Id int `json:"id"`
}
UpdateWorkOrderReq {
PathId
ProductTypeId int `json:"productTypeId,optional"`
Quantity int `json:"quantity,optional"`
WorkOrderNo string `json:"workOrderNo,optional"`
Remark string `json:"remark,optional"`
}
RestoreWorkOrderReply {
OrderId int `json:"orderId"`
RestoredJobs int `json:"restoredJobs"`
Level string `json:"level"`
ManualRequired bool `json:"manualRequired"`
Message string `json:"message,omitempty"`
}
// === 恢复扫描 ===
RecoveryScanItem {
OrderId int `json:"orderId"`
Status string `json:"status"`
Recoverable bool `json:"recoverable"`
Grade string `json:"grade"`
TotalJobs int `json:"totalJobs"`
RestorableJobs int `json:"restorableJobs"`
Reason string `json:"reason,omitempty"`
}
RecoveryScanReply {
Items []RecoveryScanItem `json:"items"`
}
// === 工单信息 ===
QueryWorkOrdersReply {
PageReply
Data []WorkOrderReply `json:"data"`
}
WorkOrderReply {
Id int `json:"id"`
No string `json:"no"`
WorkOrderNo string `json:"workOrderNo"`
ProductTypeId int `json:"productTypeId"`
ProductTypeName string `json:"productTypeName"`
ProductTypeCode string `json:"productTypeCode"`
Quantity int `json:"quantity"`
FinishedNum int `json:"finishedNum"`
FailNum int `json:"failNum"`
Status string `json:"status"`
Source string `json:"source"`
Remark string `json:"remark,omitempty"`
CreatedTime string `json:"createdTime"`
UpdatedTime string `json:"updatedTime"`
CompletedTime string `json:"completedTime,omitempty"`
}
JobStatusCount {
Status string `json:"status"`
Count int `json:"count"`
}
WorkOrderDetailReply {
WorkOrderReply
ProductTypeName string `json:"productTypeName"`
RecipeName string `json:"recipeName,omitempty"`
JobStats []JobStatusCount `json:"jobStats"`
TotalJobs int `json:"totalJobs"`
}
// === 任务日志(对齐 frontend-api.md 8.4 节)===
QueryTaskLogsReq {
PageReq
SortReq
JobId int `form:"jobId,optional"`
Status string `form:"status,optional"`
TaskKind string `form:"taskKind,optional"`
StartTime string `form:"startTime,optional"`
EndTime string `form:"endTime,optional"`
}
QueryTaskLogsReply {
PageReply
Data []TaskLogReply `json:"data"`
}
TaskLogReply {
Id int `json:"id"`
WorkOrderId int `json:"workOrderId"`
JobId int `json:"jobId"`
StepId string `json:"stepId"`
StepName string `json:"stepName"`
TaskKind string `json:"taskKind"`
Status string `json:"status"`
Content string `json:"content"`
DurationMs int64 `json:"durationMs"`
CreatedAt string `json:"createdAt"`
}
)
@server (
jwt: Auth
group: workorder
prefix: /api/v1
)
service spherical-api {
@doc "工站监控"
@handler stationMonitor
get /stations/monitor returns (StationMonitorReply)
@doc "恢复扫描"
@handler scanRecovery
get /work-orders/recovery/scan returns (RecoveryScanReply)
@doc "查询工单分页列表"
@handler queryWorkOrders
get /work-orders (QueryWorkOrdersReq) returns (QueryWorkOrdersReply)
@doc "查询任务日志分页列表"
@handler queryTaskLogs
get /work-orders/:id/task-logs (QueryTaskLogsReq) returns (QueryTaskLogsReply)
@doc "获取最新任务日志"
@handler getLatestTaskLogs
get /work-orders/logs/latest returns ([]TaskLogReply)
@doc "获取工单详情"
@handler getWorkOrder
get /work-orders/:id (PathId) returns (WorkOrderReply)
@doc "获取带工艺流程信息的工单详情"
@handler getWorkOrderDetail
get /work-orders/:id/detail (PathId) returns (WorkOrderDetailReply)
@doc "创建工单"
@handler createWorkOrder
post /work-orders (CreateWorkOrderReq) returns (CreateWorkOrderReply)
@doc "编辑工单"
@handler updateWorkOrder
put /work-orders/:id (UpdateWorkOrderReq)
@doc "开始工单"
@handler startWorkOrder
post /work-orders/:id/start (PathId)
@doc "暂停工单"
@handler pauseWorkOrder
post /work-orders/:id/pause (PathId)
@doc "恢复工单"
@handler resumeWorkOrder
post /work-orders/:id/resume (PathId)
@doc "断电恢复工单"
@handler restoreWorkOrder
post /work-orders/:id/restore (PathId) returns (RestoreWorkOrderReply)
@doc "取消工单"
@handler cancelWorkOrder
post /work-orders/:id/cancel (PathId)
@doc "停止工单"
@handler stopWorkOrder
post /work-orders/:id/stop (PathId)
@doc "删除工单"
@handler deleteWorkOrder
delete /work-orders/:id (PathId)
@doc "批量删除工单"
@handler deleteWorkOrders
delete /work-orders (BatchExecIds) returns (BatchExecReply)
}