- IM: 新增浮窗聊天(ImFloatWindow)、管理页(monitor/config/service/message)、SSE推送 - 工作流: 新增待办/我的流程页面及后端服务 - 打印: 新增打印模板、出库单打印(PrintPage)、模板种子脚本 - 工作台: 增强快捷入口与工作台数据 - 修复: TagsView页签关闭、CrudPage通用表格增强 - 移除导航菜单中的即时通讯入口,改为右下角浮窗
129 lines
6.0 KiB
JavaScript
129 lines
6.0 KiB
JavaScript
/**
|
||
* 一次性演示:为庄口 GYZ-2026-002 补充分工段生产数据(幂等,可重复执行)
|
||
* 选茧(领料5000→上车茧3200) → 煮茧(送茧2800) → 缫丝(下丝900) → 复摇(返丝830) → 秤大丝(820)
|
||
* 用法:node server/scripts/seed-zhuangkou-progress.mjs
|
||
*/
|
||
const BASE = process.env.F9MES_API || 'http://localhost:5136';
|
||
const PHONE = '13800000000';
|
||
const PASSWORD = '123456';
|
||
const PZ_ID = 1; // 工艺庄口 GYZ-2026-002
|
||
const RAW_ZK_ID = 2; // 原料庄口(选茧按原料庄口关联)
|
||
|
||
async function api(h, method, url, body) {
|
||
const res = await fetch(BASE + url, {
|
||
method,
|
||
headers: h,
|
||
body: body ? JSON.stringify(body) : undefined,
|
||
});
|
||
const text = await res.text();
|
||
let json = null;
|
||
try { json = JSON.parse(text); } catch { /* ignore */ }
|
||
if (!res.ok || (json && json.code !== 0)) {
|
||
throw new Error(`HTTP ${res.status} ${url}: ${text.slice(0, 300)}`);
|
||
}
|
||
return json;
|
||
}
|
||
|
||
async function clearRows(h, table, field, value) {
|
||
const r = await api(h, 'POST', `/api/data/${table}/page`, {
|
||
page: 1, size: 200, filters: [{ field, value }],
|
||
});
|
||
const items = (r.data && r.data.items) || [];
|
||
if (!items.length) return 0;
|
||
const ids = items.map((i) => i.id);
|
||
await api(h, 'POST', `/api/data/${table}/deleteRange`, ids);
|
||
return ids.length;
|
||
}
|
||
|
||
async function main() {
|
||
const login = await api({ 'Content-Type': 'application/json' }, 'POST', '/api/auth/login', {
|
||
phone: PHONE,
|
||
password: PASSWORD,
|
||
});
|
||
const token = login.data.token;
|
||
const h = { Authorization: 'Bearer ' + token, 'Content-Type': 'application/json' };
|
||
|
||
// 0) 清理该庄口旧演示数据(幂等)
|
||
const cleared = {
|
||
xuan: await clearRows(h, 'ProXuan_Daily', 'zhuangkouId', RAW_ZK_ID),
|
||
boil: await clearRows(h, 'ProQian_CocoonBoiling', 'processZhuangkouId', PZ_ID),
|
||
thread: await clearRows(h, 'ProQian_ThreadRecord', 'processZhuangkouId', PZ_ID),
|
||
hou: await clearRows(h, 'ProHou_Daily', 'processZhuangkouId', PZ_ID),
|
||
weigh: await clearRows(h, 'ProHou_WeighBig', 'processZhuangkouId', PZ_ID),
|
||
order: await clearRows(h, 'ProPlan_WorkOrder', 'processZhuangkouId', PZ_ID),
|
||
};
|
||
console.log('已清理旧数据:', JSON.stringify(cleared));
|
||
|
||
// 1) 生产计划工单(选茧 + 前缫),插入后自动联动重算庄口总体进度
|
||
await api(h, 'POST', '/api/data/ProPlan_WorkOrder/add', {
|
||
orderNo: 'WO-2026-08-001', processZhuangkouId: PZ_ID, targetProcess: 0,
|
||
planInput: 5000, planOutput: 4000, planStartDate: '2026-08-14T08:00:00', planEndDate: '2026-08-20T08:00:00', status: 1,
|
||
});
|
||
await api(h, 'POST', '/api/data/ProPlan_WorkOrder/add', {
|
||
orderNo: 'WO-2026-08-002', processZhuangkouId: PZ_ID, targetProcess: 1,
|
||
planInput: 3500, planOutput: 1500, planStartDate: '2026-08-14T08:00:00', planEndDate: '2026-08-22T08:00:00', status: 1,
|
||
});
|
||
console.log('工单已创建(选茧计划产出4000kg / 前缫计划产丝1500kg)');
|
||
|
||
// 2) 选茧日报:领料 5000 → 上车茧 3200
|
||
const xuans = [
|
||
{ dailyDate: '2026-08-14T08:00:00', teamId: 1, zhuangkouId: RAW_ZK_ID, inputWeight: 3000, goodWeight: 1900, wasteWeight: 950, workerCount: 12, workHours: 8 },
|
||
{ dailyDate: '2026-08-15T08:00:00', teamId: 1, zhuangkouId: RAW_ZK_ID, inputWeight: 2000, goodWeight: 1300, wasteWeight: 550, workerCount: 12, workHours: 8 },
|
||
];
|
||
for (const row of xuans) {
|
||
const r = await api(h, 'POST', '/api/data/ProXuan_Daily/add', row);
|
||
console.log('选茧日报 id=' + (r.data && (r.data.id ?? JSON.stringify(r.data).slice(0, 60))));
|
||
}
|
||
|
||
// 3) 煮茧送茧 2800
|
||
const boils = [
|
||
{ boilDate: '2026-08-14T09:00:00', processZhuangkouId: PZ_ID, specId: 1, inputWeight: 1500, boilerNo: 'A01' },
|
||
{ boilDate: '2026-08-15T09:00:00', processZhuangkouId: PZ_ID, specId: 1, inputWeight: 1300, boilerNo: 'A02' },
|
||
];
|
||
for (const row of boils) {
|
||
const r = await api(h, 'POST', '/api/data/ProQian_CocoonBoiling/add', row);
|
||
console.log('煮茧 id=' + (r.data && (r.data.id ?? JSON.stringify(r.data).slice(0, 60))));
|
||
}
|
||
|
||
// 4) 缫丝落丝 900
|
||
const threads = [
|
||
{ recordDate: '2026-08-14T18:00:00', processZhuangkouId: PZ_ID, machineId: 1, shift: 1, threadCount: 48, weight: 480, specId: 1, employeeId: 1 },
|
||
{ recordDate: '2026-08-15T18:00:00', processZhuangkouId: PZ_ID, machineId: 2, shift: 2, threadCount: 42, weight: 420, specId: 1, employeeId: 1 },
|
||
];
|
||
for (const row of threads) {
|
||
const r = await api(h, 'POST', '/api/data/ProQian_ThreadRecord/add', row);
|
||
console.log('缫丝落丝 id=' + (r.data && (r.data.id ?? JSON.stringify(r.data).slice(0, 60))));
|
||
}
|
||
|
||
// 5) 复摇日报:上机 850 → 返丝 830
|
||
const hous = [
|
||
{ dailyDate: '2026-08-14T20:00:00', processZhuangkouId: PZ_ID, teamId: 2, inputWeight: 450, outputWeight: 440, outputCount: 44 },
|
||
{ dailyDate: '2026-08-15T20:00:00', processZhuangkouId: PZ_ID, teamId: 2, inputWeight: 400, outputWeight: 390, outputCount: 39 },
|
||
];
|
||
for (const row of hous) {
|
||
const r = await api(h, 'POST', '/api/data/ProHou_Daily/add', row);
|
||
console.log('复摇日报 id=' + (r.data && (r.data.id ?? JSON.stringify(r.data).slice(0, 60))));
|
||
}
|
||
|
||
// 6) 秤大丝 820
|
||
const weigh = await api(h, 'POST', '/api/data/ProHou_WeighBig/add', {
|
||
billNo: 'W-20260815-001', processZhuangkouId: PZ_ID, weighDate: '2026-08-15T21:00:00', totalWeight: 820, packageCount: 41,
|
||
});
|
||
console.log('秤大丝 id=' + (weigh.data && (weigh.data.id ?? JSON.stringify(weigh.data).slice(0, 60))));
|
||
|
||
// 7) 回读分工段进度
|
||
const r = await api(h, 'GET', '/api/workbench/zhuangkou-progress');
|
||
const d = r.data || {};
|
||
console.log('--- zhuangkou-progress total=' + d.total + ' producing=' + d.producing);
|
||
const it = (d.items || [])[0];
|
||
if (it) {
|
||
console.log('庄口=' + it.code + ' 状态=' + it.statusText + ' 总体进度=' + it.progress + ' 计划产丝=' + it.planOutput + 'kg');
|
||
for (const s of it.stages) console.log(' ' + s.name + ' ' + s.flow + ' 实际=' + s.actual + ' 基准=' + s.base + ' rate=' + s.rate + '%');
|
||
}
|
||
}
|
||
|
||
main().catch((e) => {
|
||
console.error('ERR: ' + e.message);
|
||
process.exit(1);
|
||
});
|