docs(spec): 添加仓库管理系统和制造执行系统业务场景文档

- 新增入库登记、入库作废、通用出库、退库确认等仓储管理场景
- 添加来料检验、过程检验、完工检验、库存盘点等质量管理场景
- 实现半成品入库出库、库存查询、工单备料台账等库存控制功能
- 集成AGV配送、区域维护、物料档案等基础数据管理场景
- 完善账号角色管理、操作日志、附件中心等系统管理功能
- 补充登录工作台、库存大屏等用户界面交互场景
- 增加MES工单状态流转、BOM维护、数量不符处理等生产管理场景
- 实现工位组合下发、拧紧查询、绩效报表等制造执行功能
- 添加巡检终端、质量检验、生产流程卡等现场作业场景
- 完善预警中心、看板管理等监控告警机制
This commit is contained in:
SunYF
2026-09-21 08:21:39 +08:00
parent 7a925c78c4
commit 0d34bcd6a3
6 changed files with 1624 additions and 160 deletions
View File
-65
View File
@@ -1,65 +0,0 @@
> bj_power_mes@0.1.0 build
> vite build
vite v6.4.3 building for production...
transforming...
鉁?[39m 1717 modules transformed.
rendering chunks...
computing gzip size...
../public/index.html  0.93 kB 鈹?gzip: 0.64 kB
../public/assets/AccountManage-C2vuxiJn.css  0.04 kB 鈹?gzip: 0.06 kB
../public/assets/ProcessFlow-3N9njrbS.css  0.07 kB 鈹?gzip: 0.09 kB
../public/assets/DailyPlan-BDdQczMH.css  0.10 kB 鈹?gzip: 0.10 kB
../public/assets/WorkOrder-D22Hpzah.css  0.22 kB 鈹?gzip: 0.17 kB
../public/assets/RoleManage-CiKSkw8Z.css  0.23 kB 鈹?gzip: 0.17 kB
../public/assets/Login-CjLneD_r.css  0.28 kB 鈹?gzip: 0.22 kB
../public/assets/Performance-apDxO0GG.css  0.29 kB 鈹?gzip: 0.17 kB
../public/assets/Wip-B2fSsftz.css  0.34 kB 鈹?gzip: 0.20 kB
../public/assets/ProcessCard-CZr2KBMZ.css  0.38 kB 鈹?gzip: 0.20 kB
../public/assets/Inspect-B9iD55ul.css  1.29 kB 鈹?gzip: 0.47 kB
../public/assets/help-LjjRk3EO.css  2.05 kB 鈹?gzip: 0.71 kB
../public/assets/index-BDJS_YlO.css  363.39 kB 鈹?gzip: 48.74 kB
../public/assets/perm-DCTK2KrM.js  0.25 kB 鈹?gzip: 0.21 kB
../public/assets/stations-Dzv88YhI.js  0.30 kB 鈹?gzip: 0.23 kB
../public/assets/print-DTtcch1s.js  0.38 kB 鈹?gzip: 0.33 kB
../public/assets/format-Cv489sdL.js  0.42 kB 鈹?gzip: 0.27 kB
../public/assets/Login-DmCBxrQq.js  1.71 kB 鈹?gzip: 1.01 kB
../public/assets/ChangePassword-s6p1SZDQ.js  2.24 kB 鈹?gzip: 1.04 kB
../public/assets/Attachment-BK7vM8A6.js  2.78 kB 鈹?gzip: 1.45 kB
../public/assets/Wip-BhtA64Wf.js  4.93 kB 鈹?gzip: 2.13 kB
../public/assets/PlcSend-BALwsPXD.js  5.26 kB 鈹?gzip: 2.27 kB
../public/assets/AlertCenter-BNTEHWwa.js  5.26 kB 鈹?gzip: 2.31 kB
../public/assets/EventLog-BbNjMdbZ.js  5.65 kB 鈹?gzip: 2.41 kB
../public/assets/MaterialRequest-DW2mD0ap.js  6.38 kB 鈹?gzip: 2.62 kB
../public/assets/RoleManage-D8JUrrkM.js  6.98 kB 鈹?gzip: 3.03 kB
../public/assets/ProductType-CDHoO9KA.js  7.71 kB 鈹?gzip: 2.86 kB
../public/assets/Trace-gVCxZhMx.js  7.77 kB 鈹?gzip: 3.05 kB
../public/assets/Performance-COUMijf6.js  8.52 kB 鈹?gzip: 2.63 kB
../public/assets/ProcessCard-VdAX3Ctb.js  8.65 kB 鈹?gzip: 3.00 kB
../public/assets/AccountManage-B4B5mcv2.js  9.34 kB 鈹?gzip: 3.61 kB
../public/assets/Scan-uubBizpO.js  9.65 kB 鈹?gzip: 3.57 kB
../public/assets/Torque-CWfv13GG.js  10.36 kB 鈹?gzip: 3.54 kB
../public/assets/Bom-C24oLlJ1.js  10.45 kB 鈹?gzip: 3.66 kB
../public/assets/Station-DXlw9Iq6.js  12.20 kB 鈹?gzip: 4.40 kB
../public/assets/QualityInspection-DerZOZPD.js  13.23 kB 鈹?gzip: 4.16 kB
../public/assets/DailyPlan-CJJ7RH3O.js  13.84 kB 鈹?gzip: 4.98 kB
../public/assets/ProcessFlow-Cx8d2It_.js  15.57 kB 鈹?gzip: 5.19 kB
../public/assets/WorkOrder-CCYT-qD3.js  16.84 kB 鈹?gzip: 5.25 kB
../public/assets/Inspect-DiIlkSed.js  22.21 kB 鈹?gzip: 6.30 kB
../public/assets/help--svnxhd4.js  49.44 kB 鈹?gzip: 18.03 kB
../public/assets/index-Bt2-rnMJ.js 1,126.46 kB 鈹?gzip: 372.37 kB
npm.cmd : 
所在位置 行:448 字符: 1
+ & "C:\Program Files\nodejs\npm.cmd" run build 2>&1 | Out-File -Encodi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rollupOptions.output.manualChunks to improve chunking: https://roll
upjs.org/configuration-options/#output-manualchunks
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.[39
m
鉁?built in 6.88s
-95
View File
@@ -1,95 +0,0 @@
p='internal/logic/processflow.go'
lines=open(p,encoding='utf-8').read().split('\n')
# find function start
start=None
for i,l in enumerate(lines):
if l.startswith('func (s *Service) StationTask('):
start=i
break
assert start is not None, 'func not found'
# find matching close brace
depth=0
end=None
for j in range(start,len(lines)):
depth+=lines[j].count('{')
depth-=lines[j].count('}')
if depth==0 and j>start:
end=j
break
assert end is not None, 'no end'
func='''func (s *Service) StationTask(ctx context.Context, stationNo int) (map[string]any, error) {
st, err := s.ctx.EntClient.Station.Query().Where(station.StationNo(stationNo)).First(ctx)
if err != nil {
return nil, errors.New("工位不存在或未配置")
}
var flow *ent.ProcessFlow
if st.FlowId > 0 {
flow, _ = s.ctx.EntClient.ProcessFlow.Get(ctx, st.FlowId)
}
steps := []*ProcessStepTemplate{}
if flow != nil && flow.Status == "ACTIVE" {
steps = s.flowSteps(ctx, flow.ID)
}
orderNos := []string{}
wos, _ := s.ctx.EntClient.WorkOrder.Query().
Where(workorder.StatusIn("CREATED", "RELEASED", "IN_PROGRESS")).
Order(ent.Asc(workorder.FieldID)).Limit(10).All(ctx)
for _, w := range wos {
orderNos = append(orderNos, w.WorkOrderNo)
}
// M4:工位终端按"工艺路线段"驱动(段=并行工位组,谁空停谁)。
// 解析活跃工单的 routeSnapshot,找出本工位所属的路线段,供终端按段执行流程。
routeSegments := []map[string]any{}
for _, w := range wos {
if len(w.RouteSnapshot) == 0 {
continue
}
for _, seg := range w.RouteSnapshot {
stations, _ := seg["stations"].([]any)
inSeg := false
for _, sv := range stations {
switch n := sv.(type) {
case float64:
if int(n) == stationNo {
inSeg = true
}
case int:
if n == stationNo {
inSeg = true
}
}
if inSeg {
break
}
}
if !inSeg {
continue
}
flowId := 0
if fv, ok := seg["flowId"].(float64); ok {
flowId = int(fv)
} else if fv, ok := seg["flowId"].(int); ok {
flowId = fv
}
routeSegments = append(routeSegments, map[string]any{
"orderNo": w.WorkOrderNo,
"seq": seg["seq"],
"segmentType": seg["segmentType"],
"flowId": flowId,
"stations": stations,
})
}
}
return map[string]any{
"stationNo": st.StationNo,
"stationName": st.Name,
"flow": flow,
"flowActive": flow != nil && flow.Status == "ACTIVE",
"steps": steps,
"orderNos": orderNos,
"routeSegments": routeSegments,
}, nil
}'''
out=lines[:start]+func.split('\n')+lines[end+1:]
open(p,'w',encoding='utf-8').write('\n'.join(out))
print("OK StationTask rewritten")
Binary file not shown.
Binary file not shown.