人工线下加工工单的计划时间计算优化需求
This commit is contained in:
@@ -145,8 +145,6 @@ class MrpProduction(models.Model):
|
|||||||
else:
|
else:
|
||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@api.depends('workorder_ids.tool_state_remark')
|
@api.depends('workorder_ids.tool_state_remark')
|
||||||
def _compute_tool_state_remark(self):
|
def _compute_tool_state_remark(self):
|
||||||
for item in self:
|
for item in self:
|
||||||
@@ -810,7 +808,6 @@ class MrpProduction(models.Model):
|
|||||||
if td_ids:
|
if td_ids:
|
||||||
work.sequence = td_ids[0].sequence
|
work.sequence = td_ids[0].sequence
|
||||||
|
|
||||||
|
|
||||||
def _reset_work_order_sequence_1(self):
|
def _reset_work_order_sequence_1(self):
|
||||||
"""
|
"""
|
||||||
工单工序排序方法(旧)
|
工单工序排序方法(旧)
|
||||||
@@ -910,54 +907,30 @@ class MrpProduction(models.Model):
|
|||||||
self._reset_work_order_sequence()
|
self._reset_work_order_sequence()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def production_process(self, pro_plan):
|
||||||
|
type_map = {'装夹预调': False, 'CNC加工': False, '解除装夹': False}
|
||||||
|
# 最后一次加工结束时间
|
||||||
|
last_time = pro_plan.date_planned_start
|
||||||
|
# 预置时间
|
||||||
|
works = self.workorder_ids
|
||||||
|
for index,work in enumerate(works):
|
||||||
|
count = type_map.get(work.routing_type)
|
||||||
|
date_planned_end = None
|
||||||
|
date_planned_start = None
|
||||||
|
if self.production_type=='自动化产线加工':
|
||||||
|
date_planned_start,date_planned_end,last_time = work.auto_production_process(last_time,count,type_map)
|
||||||
|
elif self.production_type=='':
|
||||||
|
date_planned_start,date_planned_end,last_time = work.manual_offline_process(last_time,index)
|
||||||
|
work.update_work_start_end(date_planned_start,date_planned_end)
|
||||||
|
# def
|
||||||
def process_range_time(self):
|
def process_range_time(self):
|
||||||
for production in self:
|
for production in self:
|
||||||
works = production.workorder_ids
|
works = production.workorder_ids
|
||||||
pro_plan = self.env['sf.production.plan'].search([('production_id', '=', production.id)], limit=1)
|
pro_plan = self.env['sf.production.plan'].search([('production_id', '=', production.id)], limit=1)
|
||||||
if not pro_plan:
|
if not pro_plan:
|
||||||
continue
|
continue
|
||||||
type_map = {'装夹预调': False, 'CNC加工': False, '解除装夹': False}
|
if production.production_type:
|
||||||
# 最后一次加工结束时间
|
production.production_process(pro_plan)
|
||||||
last_time = pro_plan.date_planned_start
|
|
||||||
# 预置时间
|
|
||||||
for work in works:
|
|
||||||
count = type_map.get(work.routing_type)
|
|
||||||
date_planned_end = None
|
|
||||||
date_planned_start = None
|
|
||||||
duration_expected = datetime.timedelta(minutes=work.duration_expected)
|
|
||||||
reserve_time = datetime.timedelta(minutes=work.reserved_duration)
|
|
||||||
if not count:
|
|
||||||
# 第一轮加工
|
|
||||||
if work.routing_type == '装夹预调':
|
|
||||||
date_planned_end = last_time - reserve_time
|
|
||||||
date_planned_start = date_planned_end - duration_expected
|
|
||||||
elif work.routing_type == 'CNC加工':
|
|
||||||
date_planned_start = last_time
|
|
||||||
date_planned_end = last_time + duration_expected
|
|
||||||
last_time = date_planned_end
|
|
||||||
else:
|
|
||||||
date_planned_start = last_time + reserve_time
|
|
||||||
date_planned_end = date_planned_start + duration_expected
|
|
||||||
last_time = date_planned_end
|
|
||||||
type_map.update({work.routing_type: True})
|
|
||||||
else:
|
|
||||||
date_planned_start = last_time + reserve_time
|
|
||||||
date_planned_end = date_planned_start + duration_expected
|
|
||||||
last_time = date_planned_end
|
|
||||||
work.leave_id.write({
|
|
||||||
'date_from': date_planned_start,
|
|
||||||
'date_to': date_planned_end,
|
|
||||||
})
|
|
||||||
# work.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end})
|
|
||||||
# 设置一个较大的结束时间,防止在设置开始时间时,结束时间小于开始时间
|
|
||||||
work.date_planned_finished = datetime.datetime.today() + datetime.timedelta(days=100)
|
|
||||||
work.date_planned_start = date_planned_start
|
|
||||||
work.date_planned_finished = date_planned_end
|
|
||||||
routing_workcenter = self.env['mrp.routing.workcenter'].sudo().search(
|
|
||||||
[('name', '=', work.routing_type)])
|
|
||||||
|
|
||||||
work.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end,
|
|
||||||
'duration_expected': routing_workcenter.time_cycle})
|
|
||||||
|
|
||||||
# 修改标记已完成方法
|
# 修改标记已完成方法
|
||||||
def button_mark_done1(self):
|
def button_mark_done1(self):
|
||||||
|
|||||||
@@ -1980,3 +1980,55 @@ class CMMprogram(models.Model):
|
|||||||
'program_create_date': datetime.strptime(item['program_create_date'], '%Y-%m-%d %H:%M:%S'),
|
'program_create_date': datetime.strptime(item['program_create_date'], '%Y-%m-%d %H:%M:%S'),
|
||||||
}))
|
}))
|
||||||
return cmm_program
|
return cmm_program
|
||||||
|
|
||||||
|
def update_work_start_end(self,date_planned_start,date_planned_end):
|
||||||
|
self.leave_id.write({
|
||||||
|
'date_from': date_planned_start,
|
||||||
|
'date_to': date_planned_end,
|
||||||
|
})
|
||||||
|
self.date_planned_finished = datetime.datetime.today() + datetime.timedelta(days=100)
|
||||||
|
self.date_planned_start = date_planned_start
|
||||||
|
self.date_planned_finished = date_planned_end
|
||||||
|
routing_workcenter = self.env['mrp.routing.workcenter'].sudo().search(
|
||||||
|
[('name', '=', self.routing_type)])
|
||||||
|
|
||||||
|
self.write({'date_planned_start': date_planned_start, 'date_planned_finished': date_planned_end,
|
||||||
|
'duration_expected': routing_workcenter.time_cycle})
|
||||||
|
|
||||||
|
def auto_production_process(self, last_time, is_first, type_map):
|
||||||
|
date_planned_end = None
|
||||||
|
date_planned_start = None
|
||||||
|
duration_expected = datetime.timedelta(minutes=self.duration_expected)
|
||||||
|
reserve_time = datetime.timedelta(minutes=self.reserved_duration)
|
||||||
|
if is_first:
|
||||||
|
# 第一轮加工
|
||||||
|
if self.routing_type == '装夹预调':
|
||||||
|
date_planned_end = last_time - reserve_time
|
||||||
|
date_planned_start = date_planned_end - duration_expected
|
||||||
|
elif self.routing_type == 'CNC加工':
|
||||||
|
date_planned_start = last_time
|
||||||
|
date_planned_end = last_time + duration_expected
|
||||||
|
last_time = date_planned_end
|
||||||
|
else:
|
||||||
|
date_planned_start = last_time + reserve_time
|
||||||
|
date_planned_end = date_planned_start + duration_expected
|
||||||
|
last_time = date_planned_end
|
||||||
|
type_map.update({self.routing_type: True})
|
||||||
|
else:
|
||||||
|
date_planned_start = last_time + reserve_time
|
||||||
|
date_planned_end = date_planned_start + duration_expected
|
||||||
|
last_time = date_planned_end
|
||||||
|
return date_planned_start, date_planned_end, last_time
|
||||||
|
def manual_offline_process(self,last_time,is_first):
|
||||||
|
date_planned_end = None
|
||||||
|
date_planned_start = None
|
||||||
|
duration_expected = datetime.timedelta(minutes=self.duration_expected)
|
||||||
|
reserve_time = datetime.timedelta(minutes=self.reserved_duration)
|
||||||
|
if is_first:
|
||||||
|
date_planned_start = last_time
|
||||||
|
date_planned_end = last_time + duration_expected
|
||||||
|
|
||||||
|
else:
|
||||||
|
date_planned_start = last_time + reserve_time
|
||||||
|
date_planned_end = date_planned_start + duration_expected
|
||||||
|
return date_planned_start, date_planned_end,last_time
|
||||||
Reference in New Issue
Block a user