diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index 4358b35d..80ae21e7 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -8,7 +8,7 @@ from odoo.http import request class Manufacturing_Connect(http.Controller): - @http.route('/AutoDeviceApi/GetWoInfo', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, + @http.route('/AutoDeviceApi/GetWoInfo', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def get_Work_Info(self, **kw): """ @@ -21,6 +21,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/GetWoInfo'}) logging.info('RfidCode:%s' % ret['RfidCode']) if 'RfidCode' in ret: workorder = request.env['mrp.workorder'].sudo().search([('rfid_code', '=', ret['RfidCode'])]) @@ -60,6 +62,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/GetShiftPlan'}) if 'ProductionLine' in ret: workorder_ids = request.env['mrp.workorder'].sudo().get_plan_workorder(ret['ProductionLine']) else: @@ -113,6 +117,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/QcCheck'}) logging.info('RfidCode:%s' % ret['RfidCode']) if 'RfidCode' in ret: workorder = request.env['mrp.workorder'].sudo().search( @@ -150,6 +156,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': ['工单已开始']} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/FeedBackStart'}) production_id = ret['BillId'] routing_type = ret['CraftId'] equipment_id = ret["DeviceId"] @@ -193,6 +201,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': ['工单已结束']} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/FeedBackEnd'}) production_id = ret['BillId'] routing_type = ret['CraftId'] workorder = request.env['mrp.workorder'].sudo().search( @@ -237,6 +247,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/PartQualityInspect'}) production_id = ret['BillId'] routing_type = ret['CraftId'] workorder = request.env['mrp.workorder'].sudo().search( @@ -293,6 +305,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/CMMProgDolod'}) if 'RfidCode' in ret: logging.info('RfidCode:%s' % ret['RfidCode']) workorder = request.env['mrp.workorder'].sudo().search( @@ -331,6 +345,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/NCProgDolod'}) if 'RfidCode' in ret: logging.info('RfidCode:%s' % ret['RfidCode']) workorder = request.env['mrp.workorder'].sudo().search( @@ -370,6 +386,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': []} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/LocationChange'}) logging.info('LocationChange_ret===========:%s' % ret) RfidCode = ret['RfidCode'] ChangeType = ret['ChangeType'] @@ -426,6 +444,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/AGVToProduct'}) logging.info('ret:%s' % ret) if 'DeviceId' in ret: logging.info('DeviceId:%s' % ret['DeviceId']) @@ -477,6 +497,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/AGVDownProduct'}) logging.info('ret:%s' % ret) if 'DeviceId' in ret: logging.info('DeviceId:%s' % ret['DeviceId']) @@ -538,6 +560,8 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True} datas = request.httprequest.data ret = json.loads(datas) + request.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/EquipmentBaseCoordinate'}) if 'DeviceId' in ret: equipment = request.env['maintenance.equipment'].sudo().search('name', '=', ret['DeviceId']) if equipment: diff --git a/sf_manufacturing/models/agv_setting.py b/sf_manufacturing/models/agv_setting.py index 62f4f633..d0104bc3 100644 --- a/sf_manufacturing/models/agv_setting.py +++ b/sf_manufacturing/models/agv_setting.py @@ -49,3 +49,13 @@ class AgvTaskRoute(models.Model): end_site_id = fields.Many2one('sf.agv.site', '终点接驳站位置编号') destination_production_line_id = fields.Many2one('sf.production.line', '目的生产线') active = fields.Boolean('有效', default=True) + + +class Center_controlInterfaceLog(models.Model): + _name = 'center_control.interface.log' + _description = '中控接口调用日志' + + name = fields.Char('接口名称') + content = fields.Char('接口内容') + interface_call_date = fields.Datetime("调用时间", default=fields.Datetime.now, readonly=True) + active = fields.Boolean('有效', default=True) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 2dac0665..6a9c3e28 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -951,6 +951,9 @@ class CNCprocessing(models.Model): if workpiece_delivery: for item in workpiece_delivery: item.is_cnc_program_down = True + if item.workorder_id.state == 'waiting': + item.workorder_id.state = 'ready' + # cnc_workorder.time_ids.date_end = datetime.now() # cnc_workorder.button_finish() @@ -1184,6 +1187,8 @@ class WorkPieceDelivery(models.Model): num = 0 for item in self: num += 1 + if production_type is None: + production_type = item.type if item.type == "运送空料架": if num >= 2: raise UserError('仅选择一条路线进行配送,请重新选择') @@ -1201,8 +1206,6 @@ class WorkPieceDelivery(models.Model): is_not_route += 1 else: raise UserError('请选择【任务路线】再进行配送') - if production_type is None: - production_type = item.type if production_type != item.type: raise UserError('请选择类型为%s的制造订单进行配送' % production_type) if down_status != item.status: @@ -1228,8 +1231,7 @@ class WorkPieceDelivery(models.Model): raise UserError('您所选择制造订单的【目的生产线】不一致,请重新确认') if is_not_route >= 1: raise UserError('您所选择制造订单的【任务路线】不一致,请重新确认') - # is_free = self._check_avgsite_state() - is_free = True + is_free = self._check_avgsite_state() if is_free is True: if delivery_ids: return { @@ -1243,6 +1245,7 @@ class WorkPieceDelivery(models.Model): 'default_production_ids': [(6, 0, production_ids)], 'default_destination_production_line_id': same_production_line_id, 'default_route_id': same_route_id, + 'default_type': production_type, }} else: if self.type == '运送空料架': diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index d766629c..16ea429a 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -7,8 +7,8 @@ import os from odoo import models, fields, api, _ from odoo.exceptions import ValidationError from odoo.modules import get_resource_path -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv index e8c2449c..3448aebf 100644 --- a/sf_manufacturing/security/ir.model.access.csv +++ b/sf_manufacturing/security/ir.model.access.csv @@ -132,4 +132,5 @@ access_maintenance_equipment_tool_group_plan_dispatch,maintenance.equipment.tool access_sf_workpiece_delivery_group_plan_dispatch,sf.workpiece.delivery,sf_manufacturing.model_sf_workpiece_delivery,sf_base.group_plan_dispatch,1,0,0,0 access_sf_agv_site_group_sf_order_user,sf_agv_site_group_sf_order_user,model_sf_agv_site,sf_base.group_sf_order_user,1,1,1,0 -access_sf_agv_task_route_group_sf_order_user,sf_agv_task_route_group_sf_order_user,model_sf_agv_task_route,sf_base.group_sf_order_user,1,1,1,0 \ No newline at end of file +access_sf_agv_task_route_group_sf_order_user,sf_agv_task_route_group_sf_order_user,model_sf_agv_task_route,sf_base.group_sf_order_user,1,1,1,0 +access_center_control_interface_log_admin,center_control_interface_log_admin,model_center_control_interface_log,base.group_system,1,1,1,0 \ No newline at end of file diff --git a/sf_manufacturing/views/agv_setting_views.xml b/sf_manufacturing/views/agv_setting_views.xml index f41e4488..c2438c7f 100644 --- a/sf_manufacturing/views/agv_setting_views.xml +++ b/sf_manufacturing/views/agv_setting_views.xml @@ -55,4 +55,34 @@ sequence="13" action="action_agv_task_route_form"/> + + + + center_control.interface.log + + + + + + + + + + + center_control.interface.log + + + + + + + + + + 中控调用日志 + center_control.interface.log + tree + + \ No newline at end of file diff --git a/sf_manufacturing/wizard/workpiece_delivery_views.xml b/sf_manufacturing/wizard/workpiece_delivery_views.xml index d2d56471..a8d00d72 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_views.xml +++ b/sf_manufacturing/wizard/workpiece_delivery_views.xml @@ -9,7 +9,7 @@ - +
@@ -17,9 +17,9 @@
- +
- + diff --git a/sf_manufacturing/wizard/workpiece_delivery_wizard.py b/sf_manufacturing/wizard/workpiece_delivery_wizard.py index 5e7c6efb..bebe9e44 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_wizard.py +++ b/sf_manufacturing/wizard/workpiece_delivery_wizard.py @@ -21,6 +21,9 @@ class WorkpieceDeliveryWizard(models.TransientModel): [('上产线', '上产线'), ('下产线', '下产线'), ('运送空料架', '运送空料架')], string='类型') def confirm(self): + if self.type != '运送空料架': + if not self.route_id: + raise UserError('请选择路线') if self.workorder_id: self.workorder_id.workpiece_delivery_ids[0]._delivery_avg() else: @@ -69,7 +72,8 @@ class WorkpieceDeliveryWizard(models.TransientModel): 'context': { 'default_delivery_ids': [(6, 0, self.delivery_ids.ids)], 'default_production_ids': [(6, 0, self.production_ids.ids)], - 'default_route_id': self.delivery_ids[0].route_id.id + 'default_route_id': self.delivery_ids[0].route_id.id, + 'default_type': self.delivery_ids[0].type }} @api.onchange('route_id') diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index ed52d9de..1ece6b86 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 24bf5738..724d4369 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -# from OCC.Extend.DataExchange import read_step_file -# from OCC.Extend.DataExchange import write_stl_file +from OCC.Extend.DataExchange import read_step_file +from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path