docs(spec): 添加仓库管理系统和制造执行系统业务场景文档
- 新增入库登记、入库作废、通用出库、退库确认等仓储管理场景 - 添加来料检验、过程检验、完工检验、库存盘点等质量管理场景 - 实现半成品入库出库、库存查询、工单备料台账等库存控制功能 - 集成AGV配送、区域维护、物料档案等基础数据管理场景 - 完善账号角色管理、操作日志、附件中心等系统管理功能 - 补充登录工作台、库存大屏等用户界面交互场景 - 增加MES工单状态流转、BOM维护、数量不符处理等生产管理场景 - 实现工位组合下发、拧紧查询、绩效报表等制造执行功能 - 添加巡检终端、质量检验、生产流程卡等现场作业场景 - 完善预警中心、看板管理等监控告警机制
This commit is contained in:
@@ -1,65 +0,0 @@
|
|||||||
|
|
||||||
> bj_power_mes@0.1.0 build
|
|
||||||
> vite build
|
|
||||||
|
|
||||||
[36mvite v6.4.3 [32mbuilding for production...[36m[39m
|
|
||||||
transforming...
|
|
||||||
[32m鉁?[39m 1717 modules transformed.
|
|
||||||
rendering chunks...
|
|
||||||
computing gzip size...
|
|
||||||
[2m../public/[22m[32mindex.html [39m[1m[2m 0.93 kB[22m[1m[22m[2m 鈹?gzip: 0.64 kB[22m
|
|
||||||
[2m../public/[22m[35massets/AccountManage-C2vuxiJn.css [39m[1m[2m 0.04 kB[22m[1m[22m[2m 鈹?gzip: 0.06 kB[22m
|
|
||||||
[2m../public/[22m[35massets/ProcessFlow-3N9njrbS.css [39m[1m[2m 0.07 kB[22m[1m[22m[2m 鈹?gzip: 0.09 kB[22m
|
|
||||||
[2m../public/[22m[35massets/DailyPlan-BDdQczMH.css [39m[1m[2m 0.10 kB[22m[1m[22m[2m 鈹?gzip: 0.10 kB[22m
|
|
||||||
[2m../public/[22m[35massets/WorkOrder-D22Hpzah.css [39m[1m[2m 0.22 kB[22m[1m[22m[2m 鈹?gzip: 0.17 kB[22m
|
|
||||||
[2m../public/[22m[35massets/RoleManage-CiKSkw8Z.css [39m[1m[2m 0.23 kB[22m[1m[22m[2m 鈹?gzip: 0.17 kB[22m
|
|
||||||
[2m../public/[22m[35massets/Login-CjLneD_r.css [39m[1m[2m 0.28 kB[22m[1m[22m[2m 鈹?gzip: 0.22 kB[22m
|
|
||||||
[2m../public/[22m[35massets/Performance-apDxO0GG.css [39m[1m[2m 0.29 kB[22m[1m[22m[2m 鈹?gzip: 0.17 kB[22m
|
|
||||||
[2m../public/[22m[35massets/Wip-B2fSsftz.css [39m[1m[2m 0.34 kB[22m[1m[22m[2m 鈹?gzip: 0.20 kB[22m
|
|
||||||
[2m../public/[22m[35massets/ProcessCard-CZr2KBMZ.css [39m[1m[2m 0.38 kB[22m[1m[22m[2m 鈹?gzip: 0.20 kB[22m
|
|
||||||
[2m../public/[22m[35massets/Inspect-B9iD55ul.css [39m[1m[2m 1.29 kB[22m[1m[22m[2m 鈹?gzip: 0.47 kB[22m
|
|
||||||
[2m../public/[22m[35massets/help-LjjRk3EO.css [39m[1m[2m 2.05 kB[22m[1m[22m[2m 鈹?gzip: 0.71 kB[22m
|
|
||||||
[2m../public/[22m[35massets/index-BDJS_YlO.css [39m[1m[2m 363.39 kB[22m[1m[22m[2m 鈹?gzip: 48.74 kB[22m
|
|
||||||
[2m../public/[22m[36massets/perm-DCTK2KrM.js [39m[1m[2m 0.25 kB[22m[1m[22m[2m 鈹?gzip: 0.21 kB[22m
|
|
||||||
[2m../public/[22m[36massets/stations-Dzv88YhI.js [39m[1m[2m 0.30 kB[22m[1m[22m[2m 鈹?gzip: 0.23 kB[22m
|
|
||||||
[2m../public/[22m[36massets/print-DTtcch1s.js [39m[1m[2m 0.38 kB[22m[1m[22m[2m 鈹?gzip: 0.33 kB[22m
|
|
||||||
[2m../public/[22m[36massets/format-Cv489sdL.js [39m[1m[2m 0.42 kB[22m[1m[22m[2m 鈹?gzip: 0.27 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Login-DmCBxrQq.js [39m[1m[2m 1.71 kB[22m[1m[22m[2m 鈹?gzip: 1.01 kB[22m
|
|
||||||
[2m../public/[22m[36massets/ChangePassword-s6p1SZDQ.js [39m[1m[2m 2.24 kB[22m[1m[22m[2m 鈹?gzip: 1.04 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Attachment-BK7vM8A6.js [39m[1m[2m 2.78 kB[22m[1m[22m[2m 鈹?gzip: 1.45 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Wip-BhtA64Wf.js [39m[1m[2m 4.93 kB[22m[1m[22m[2m 鈹?gzip: 2.13 kB[22m
|
|
||||||
[2m../public/[22m[36massets/PlcSend-BALwsPXD.js [39m[1m[2m 5.26 kB[22m[1m[22m[2m 鈹?gzip: 2.27 kB[22m
|
|
||||||
[2m../public/[22m[36massets/AlertCenter-BNTEHWwa.js [39m[1m[2m 5.26 kB[22m[1m[22m[2m 鈹?gzip: 2.31 kB[22m
|
|
||||||
[2m../public/[22m[36massets/EventLog-BbNjMdbZ.js [39m[1m[2m 5.65 kB[22m[1m[22m[2m 鈹?gzip: 2.41 kB[22m
|
|
||||||
[2m../public/[22m[36massets/MaterialRequest-DW2mD0ap.js [39m[1m[2m 6.38 kB[22m[1m[22m[2m 鈹?gzip: 2.62 kB[22m
|
|
||||||
[2m../public/[22m[36massets/RoleManage-D8JUrrkM.js [39m[1m[2m 6.98 kB[22m[1m[22m[2m 鈹?gzip: 3.03 kB[22m
|
|
||||||
[2m../public/[22m[36massets/ProductType-CDHoO9KA.js [39m[1m[2m 7.71 kB[22m[1m[22m[2m 鈹?gzip: 2.86 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Trace-gVCxZhMx.js [39m[1m[2m 7.77 kB[22m[1m[22m[2m 鈹?gzip: 3.05 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Performance-COUMijf6.js [39m[1m[2m 8.52 kB[22m[1m[22m[2m 鈹?gzip: 2.63 kB[22m
|
|
||||||
[2m../public/[22m[36massets/ProcessCard-VdAX3Ctb.js [39m[1m[2m 8.65 kB[22m[1m[22m[2m 鈹?gzip: 3.00 kB[22m
|
|
||||||
[2m../public/[22m[36massets/AccountManage-B4B5mcv2.js [39m[1m[2m 9.34 kB[22m[1m[22m[2m 鈹?gzip: 3.61 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Scan-uubBizpO.js [39m[1m[2m 9.65 kB[22m[1m[22m[2m 鈹?gzip: 3.57 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Torque-CWfv13GG.js [39m[1m[2m 10.36 kB[22m[1m[22m[2m 鈹?gzip: 3.54 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Bom-C24oLlJ1.js [39m[1m[2m 10.45 kB[22m[1m[22m[2m 鈹?gzip: 3.66 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Station-DXlw9Iq6.js [39m[1m[2m 12.20 kB[22m[1m[22m[2m 鈹?gzip: 4.40 kB[22m
|
|
||||||
[2m../public/[22m[36massets/QualityInspection-DerZOZPD.js [39m[1m[2m 13.23 kB[22m[1m[22m[2m 鈹?gzip: 4.16 kB[22m
|
|
||||||
[2m../public/[22m[36massets/DailyPlan-CJJ7RH3O.js [39m[1m[2m 13.84 kB[22m[1m[22m[2m 鈹?gzip: 4.98 kB[22m
|
|
||||||
[2m../public/[22m[36massets/ProcessFlow-Cx8d2It_.js [39m[1m[2m 15.57 kB[22m[1m[22m[2m 鈹?gzip: 5.19 kB[22m
|
|
||||||
[2m../public/[22m[36massets/WorkOrder-CCYT-qD3.js [39m[1m[2m 16.84 kB[22m[1m[22m[2m 鈹?gzip: 5.25 kB[22m
|
|
||||||
[2m../public/[22m[36massets/Inspect-DiIlkSed.js [39m[1m[2m 22.21 kB[22m[1m[22m[2m 鈹?gzip: 6.30 kB[22m
|
|
||||||
[2m../public/[22m[36massets/help--svnxhd4.js [39m[1m[2m 49.44 kB[22m[1m[22m[2m 鈹?gzip: 18.03 kB[22m
|
|
||||||
[2m../public/[22m[36massets/index-Bt2-rnMJ.js [39m[1m[33m1,126.46 kB[39m[22m[2m 鈹?gzip: 372.37 kB[22m
|
|
||||||
npm.cmd : [33m
|
|
||||||
所在位置 行:448 字符: 1
|
|
||||||
+ & "C:\Program Files\nodejs\npm.cmd" run build 2>&1 | Out-File -Encodi ...
|
|
||||||
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
+ CategoryInfo : NotSpecified: ([33m: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
|
|
||||||
[32m鉁?built in 6.88s[39m
|
|
||||||
@@ -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.
Reference in New Issue
Block a user