首页
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
Search
1
宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
259 阅读
2
Customer complaints evolve with in-car tech
184 阅读
3
测试
147 阅读
4
内连接,左连接,右连接作用及区别
95 阅读
5
所谓关系
94 阅读
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVA
java基础
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
登录
Search
标签搜索
期刊读物
古文
何瑜明
累计撰写
103
篇文章
累计收到
153
条评论
首页
栏目
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVA
java基础
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
页面
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
搜索到
6
篇与
的结果
2025-05-07
此内容被密码保护
加密文章,请前往内页查看详情
2025年05月07日
2 阅读
0 评论
0 点赞
2025-05-07
挤出逻辑
<body> <div class="container"> <h1>挤出排产</h1> <div class="input-group"> <input type="file" id="excelFile" accept=".xlsx"> <input type="date" id="startDate" required> <button onclick="startScheduling()">开始排产</button> </div> <div id="scheduleResult"></div> </div> <script> const PRODUCTION_PARAMS = { speed: { low: 5000, // ≤16mm medium: 4000, // 17-30mm high: 3500 // >30mm }, diameterGroups: [ { max: 8, name: '0-8mm' }, { max: 11, name: '9-11mm' }, { max: Infinity, name: '12mm+' } ] }; document.addEventListener('DOMContentLoaded', () => { if(typeof XLSX === 'undefined') { alert('错误:核心库加载失败,请检查网络连接'); return; } document.getElementById('startDate').valueAsDate = new Date(); }); function startScheduling() { const fileInput = document.getElementById('excelFile'); const startDate = document.getElementById('startDate').value; if(!fileInput.files.length) return alert("请选择Excel文件"); if(!startDate) return alert("请选择排产开始日期"); const reader = new FileReader(); reader.onload = processExcelFile; reader.readAsArrayBuffer(fileInput.files[0]); } function processExcelFile(event) { try { const workbook = XLSX.read(event.target.result, {type: 'array'}); const sheet = workbook.Sheets[workbook.SheetNames[0]]; const rawData = XLSX.utils.sheet_to_json(sheet, {header:1}); const orders = validateAndFormatData(rawData); const schedule = generateProductionSchedule(orders); renderScheduleTable(schedule); } catch (error) { handleError('文件处理失败', error); } } function validateAndFormatData(rawData) { return rawData.slice(1).map((row, index) => { const dateIndex = 2; if(row.length < 7) throw new Error(`第${index+2}行数据列数不足`); let demandDate; const excelDateValue = row[dateIndex]; if(typeof excelDateValue === 'number') { const parsed = XLSX.SSF.parse_date_code(excelDateValue); demandDate = new Date(parsed.y, parsed.m - 1, parsed.d); } else { demandDate = new Date(excelDateValue); } if(isNaN(demandDate.getTime())) { throw new Error(`第${index+2}行需求日期格式错误,值:${excelDateValue}`); } return { 订单号: String(row[0]).trim(), 需求数量: Number(row[1]), 需求日期: demandDate, 产品口径: Number(row[3]), 实际长度: parseFloat(Number(row[4]).toFixed(2)), 胶料类型: String(row[5]).trim(), 生产机台: String(row[6]).trim(), 挤出基数: Math.ceil(row[1] * 1.1 / 10) * 10, 剩余数量: Math.ceil(row[1] * 1.1 / 10) * 10 }; }).filter(order => order.需求数量 >= 10); } function generateProductionSchedule(orders) { const schedule = {}; const startDate = new Date(document.getElementById('startDate').value); const grouped = groupOrders(orders); const sortedKeys = Object.keys(grouped).sort(); sortedKeys.forEach(key => { const [machine, material, diameterGroup] = key.split('|'); const orderList = grouped[key]; let currentDate = new Date(startDate); const { maxQty: maxDailyQty } = calculateDailyCapacity(orderList[0].产品口径, orderList[0].实际长度); while (orderList.some(o => o.剩余数量 > 0)) { const dateKey = formatDate(currentDate); if (!schedule[machine]) schedule[machine] = {}; if (!schedule[machine][dateKey]) { schedule[machine][dateKey] = { items: [], totalLength: 0, usedQty: 0, capacity: maxDailyQty }; } const day = schedule[machine][dateKey]; let capacityLeft = day.capacity - day.usedQty; for (let order of orderList) { if (order.剩余数量 <= 0 || capacityLeft <= 0) continue; const canAlloc = Math.min(order.剩余数量, capacityLeft); day.items.push({ 订单号: order.订单号, 胶料类型: order.胶料类型, 产品口径: order.产品口径, 实际长度: order.实际长度, 排产数量: canAlloc, 排产长度: canAlloc * order.实际长度, 需求日期: order.需求日期 }); day.totalLength += canAlloc * order.实际长度; day.usedQty += canAlloc; order.剩余数量 -= canAlloc; capacityLeft -= canAlloc; } currentDate = addDays(currentDate, 1); } }); return schedule; } function groupOrders(orders) { const groups = {}; orders.forEach(order => { const diameterGroup = PRODUCTION_PARAMS.diameterGroups.find(g => order.产品口径 <= g.max).name; const key = `${order.生产机台}|${order.胶料类型}|${diameterGroup}`; if (!groups[key]) groups[key] = []; groups[key].push(order); }); return groups; } function calculateDailyCapacity(diameter, length) { let speed; if(diameter <= 16) speed = PRODUCTION_PARAMS.speed.low; else if(diameter <= 30) speed = PRODUCTION_PARAMS.speed.medium; else speed = PRODUCTION_PARAMS.speed.high; const maxQty = Math.floor(speed / length); return { value: speed, maxQty }; } function formatDate(date) { return date.toISOString().split('T')[0]; } function addDays(date, days) { const result = new Date(date); result.setDate(result.getDate() + days); return result; } function renderScheduleTable(schedule) { let html = ''; Object.entries(schedule).forEach(([machine, dateMap]) => { html += `<div class="machine-header"> <h3>${machine} 生产计划</h3> <div class="capacity-info">每日最大产能:${Object.values(dateMap)[0].capacity} 米</div> </div>`; html += `<table> <tr> <th>生产日期</th> <th>订单号</th> <th>口径(mm)</th> <th>长度(m)</th> <th>胶料类型</th> <th>排产数量</th> <th>总长度(m)</th> <th>需求日期</th> <th>状态</th> </tr>`; Object.entries(dateMap).forEach(([date, data]) => { data.items.forEach(item => { const isLate = new Date(date) > new Date(item.需求日期); html += `<tr${isLate ? ' class="warning"' : ''}> <td>${date}</td> <td>${item.订单号}</td> <td>${item.产品口径}</td> <td>${item.实际长度.toFixed(2)}</td> <td>${item.胶料类型}</td> <td>${item.排产数量}</td> <td>${item.排产长度.toFixed(1)}</td> <td>${item.需求日期.toISOString().split('T')[0]}</td> <td>${isLate ? '延迟' : '正常'}</td> </tr>`; }); html += `<tr class="summary-row"> <td colspan="5">当日汇总</td> <td>${data.usedQty}</td> <td>${data.totalLength.toFixed(1)}</td> <td colspan="3"> </td> </tr>`; }); html += `</table>`; }); document.getElementById('scheduleResult').innerHTML = html; } function handleError(message, error) { console.error(`${message}:`, error); alert(`${message},请检查控制台获取详细信息`); } </script> </body>
2025年05月07日
2 阅读
0 评论
0 点赞
2022-08-04
生产周期说明
抱歉,时间太紧,尚未来及编辑说明~~李老师,之前的生产周期今天看的时候发现一些问题,现已纠正,明细如下:1.注塑,焊接,组装的周期计算公式错误导致结果错误;2.登账周期的时间段是处于整个入库周期时间范围的,所以不应该加上应该减去生产周期.xlsx
2022年08月04日
33 阅读
0 评论
0 点赞
2022-07-04
精细化排产难点
之前的计划逻辑是通过BOM将订单分解成各工序的任务总量,然后将各种产品任务分配到适合生产它们的机台,再根据排产结果进行调配,以平衡机台之间的生产负荷程度,最后再根据负荷程度计算出所需排产时间,生产人员,投产物料等预算数量。这种方法的好处是能够快速地、准确地得到,在现有的固定资产水平下,满足订单生产所需基本要素水平。因为这种方法是按照最理想地状态来进行排产,没有包含各工序速率差异和等待间隔,计算结果就是生产所能实现地最优结果。(结果受订单总量影响) 但是这种算法的优点也是它的缺点,因为生产间隔和速率差异是实际存在且无法抹去的,所以领导会要求去核算出瓶颈工序,我非常理解这个要求的目的:1.如果是固定资产方面重要的但又薄弱的生产环节,公司就组织采购,提升该环节的配给能力;2.如果是技术水平方面,公司就组织外部协作或者安排工程部门进行技术升级或者改造;3.如果是生产辅助方面,包括人员,辅材等等,那就启动某些机制来提高供应能力和服务水平;4.如果是排产优化方面,那就优化排产。 总结一句话我计划核算主要任务就是提前反馈出这些薄弱环节,然后供有关部门去分析和应对。难点一:反馈做不到精准和全面 以上4点,优化排产我会尽力,但主要看领导意思吧,因为这个排的好不好真没啥标准可以参考的,因为难以兼顾,所以往往容易出问题,但偏偏对公司来说又是调整成本最低的,其变化情况可以多到没完没了,牵一发而动全身,就很怕领导想法又不一样,没完没了的追求精益,然后改来改去的,疲于奔命还没个结果,只能领导咋说我咋干,毕竟谦虚使人受益(此处领导排除老大)。领导不说,我就尽力而为。反正就是咬死不可能真的兼顾到完美程度。(提前摊手)第三点是辅助部门要解决的问题,辅助部门的工作就是围绕生产来进行的,生产和销售才是最主要的,所以不会考虑他们。第二点是技术问题,对生产实际产量,历史产量我必然了解的,但正常产量的标准和正常的节拍应该是多少,这个技术部门在试模生产时,没有评估过,或者数据有但是我没见过。平常的生产多或者少也未见评估或者记录,所以这一点,在我核算的计划里也不会体现,因为缺少数据依据。只能靠大家自己感觉和分析了。难点二:排产问题极其复杂,能不能排是个问题,能不能排出结果又是一个问题,如何描述反馈让人看懂还是个问题 仍在努力,做完再说明,尽力明日下午交付。
2022年07月04日
25 阅读
0 评论
0 点赞
2022-06-29
生产经营的主导者——企业生产计划管理的作用分析
生产经营的主导者——企业生产计划管理的作用分析.pdf
2022年06月29日
17 阅读
0 评论
0 点赞
1
2
0:00