根据日生产计划产量排产,制定每2小时理论计划生产产量。
每2小时计划产量 = 每2小时工作时间(秒)/生产计划节拍(秒)。
假设,生产计划节拍 : 25.0(秒)/台
工厂以每天8点00分钟作为当日工作日的起始时间。
相关表设计如下:
01. 工作课程表(表名称:duty_time)如下
...|.....|.....|....|work_flag
本日|08:00|08:20|早会|非工作时间(0)
本日|08:20|12:00|工作|工作时间(1)
本日|12:00|12:35|吃饭|非工作时间(0)
本日|12:35|17:30|工作|工作时间(1)
本日|17:30|18:00|吃饭|非工作时间(0)
本日|18:00|20:00|工作|工作时间(1)
本日|20:00|20:20|晚会|非工作时间(0)
本日|20:20|01:00|工作|工作时间(1)
次日|01:00|01:35|吃饭|非工作时间(0)
次日|01:35|06:30|工作|工作时间(1)
次日|06:30|07:00|吃饭|非工作时间(0)
次日|07:00|08:00|工作|工作时间(1)
将工作课表起止时间转换分钟数(分) (表名称:duty_time) 分钟数(分)=时*60+分;跨日(次日)+1440;
day|start_time|end_time|work_type|work_flag|start_int|end_int
本日|08:00|08:20|早会|非工作时间(0)|480|500
...|.....|.....|....|...........|....|...
...|.....|.....|....|...........|....|...
次日|07:00|08:00|工作| 工作时间(1) |1860|1920
每2小时计划生产量:8点~10点时间段,记录在10点时计划产量。
时间点|计划产量(xxx)10|xxx12|xxx14|xxx16|xxx18|xxx20|xxx22|xxx00|xxx02|xxx04|xxx06|xxx08|xxx
02. 制作每2小时时间段数值表(表名称:segment_model),起始时间是逻辑工作日8点 分钟数(分)=时*60+分;跨日(次日)+1440;
序号|开始时间点|结束时间点|开始时间点分钟|结束时间点分钟|
no|start_time|end_time|start_int|end_int
01|08:00|10:00| 480| 600
02|10:00|12:00| 600| 720
03|12:00|14:00| 720| 840
04|14:00|16:00| 840| 960
05|16:00|18:00| 960|1080
06|18:00|20:00|1080|1200
07|20:00|22:00|1200|1320
08|22:00|00:00|1320|1440
09|00:00|02:00|1440|1560
10|02:00|04:00|1560|1680
11|04:00|06:00|1680|1800
12|06:00|08:00|1800|1920
03. 制作分钟数值表“查表法模板表”(表名称:minute_time_table),起始时间是逻辑工作日 分钟数(分)=时*60+分;跨日(次日)+1440; 以每天8点00分钟作为当日工作日的起始时间点。制作“模板表”,模板表以8点01分开始,每次递增一分钟。 “模板表”算法思想是:“截止08点x分钟”时,理论计划产量 =(x分钟-08点)*60(秒)/生产节拍(秒)。所以从08点01分钟开始做模板数据。
序号|时:分|分钟数
no |minute_time|minute_int
0001|08:01| 481
0002|08:02| 482
0003|08:03| 483
....|.....|...
....|.....|...
....|.....|...
0958|23:58|1438
0959|23:59|1439
0960|00:00|1440
0961|00:01|1441
0962|00:02|1442
....|.....|...
....|.....|...
....|.....|...
1438|07:58|1918
1439|07:59|1919
1440|08:00|1920
04. SQL简单算法,求解
SELECT tmp.id,tmp.start_time,tmp.end_time,SUM(tmp.work_flag) AS work_time_duration,SUM(tmp.work_flag)*60/25.0 AS work_count
FROM (
/*=====*/SELECT sgmt.id,sgmt.start_time,sgmt.end_time,sgmt.start_int,sgmt.end_int,mint.minute_time,mint.minute_int,--duty.start_time,--duty.end_time,--duty.start_int,--duty.end_int,duty.work_type,duty.work_flagFROM demo.segment_model AS sgmtLEFT JOIN demo.minute_time_table AS mintON mint.minute_int > sgmt.start_intAND mint.minute_int<= sgmt.end_intLEFT JOIN demo.duty_time AS dutyON duty.start_int < mint.minute_intAND duty.end_int >= mint.minute_int
/*======*/
)AS tmpGROUP BY tmp.id,tmp.start_time,tmp.end_timeORDER BY tmp.id
每2个小时时间段的工作分钟数(扣除开会,吃饭时间,只统计工作时间分钟数值),以及在工作时间分钟数值下的理论计划生产数量,结果如下
id|开始时间| 结束时间| 工作分钟| 生产数量
id|start_time|end_time|duration|work_count
01| 08:00| 10:00| 100| 240
02| 10:00| 12:00| 120| 288
03| 12:00| 14:00| 085| 204
04| 14:00| 16:00| 120| 288
05| 16:00| 18:00| 120| 288
06| 18:00| 20:00| 120| 288
07| 20:00| 22:00| 100| 240
08| 22:00| 00:00| 120| 288
09| 00:00| 02:00| 085| 204
10| 02:00| 04:00| 120| 288
11| 04:00| 06:00| 120| 288
12| 06:00| 08:00| 090| 216