from django.db import models
from django.contrib.auth.models import User
from Core.models import WorkOrder
from Core.utils import DynamicHashPath
from Process import (WELD_METHODS, WELD_POSITION_CHOICES,
PROCEDURE_QUALIFICATION_INDEXS,
WWI_EXAMINATION_SURVEYOR_CHOICES)
from Process.models import Material, ProcessMaterial
[文档]class WeldingProcessSpecification(models.Model):
"""
焊接工艺规程
"""
work_order = models.ForeignKey(WorkOrder, verbose_name='所属工作令',
on_delete=models.CASCADE)
lister = models.ForeignKey(User, verbose_name='编制人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_proc_spec_lister')
list_dt = models.DateTimeField(verbose_name='编制日期',
blank=True, null=True)
auditor = models.ForeignKey(User, verbose_name='审核人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_proc_spec_auditor')
audit_dt = models.DateTimeField(verbose_name='审核日期',
blank=True, null=True)
approver = models.ForeignKey(User, verbose_name='批准人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_proc_sped_approver')
approve_dt = models.DateTimeField(verbose_name='批准日期',
blank=True, null=True)
path = models.FileField(verbose_name='文件路径',
upload_to=DynamicHashPath('WeldingProcSpec'),
blank=True, null=True)
class Meta:
verbose_name = '焊接工艺规程'
verbose_name_plural = '焊接工艺规程'
def __str__(self):
return 'RH09-{}'.format(self.work_order.uid)
[文档]class WeldingCertification(models.Model):
"""
焊工持证项目
"""
name = models.CharField(verbose_name='持证项目', max_length=50)
weld_method = models.IntegerField(verbose_name='焊接方法',
choices=WELD_METHODS)
class Meta:
verbose_name = '焊工持证项目'
verbose_name_plural = '焊工持证项目'
def __str__(self):
return self.name
[文档]class WeldingJointProcessAnalysis(models.Model):
"""
焊接接头工艺分析
"""
spec = models.ForeignKey(WeldingProcessSpecification,
verbose_name='焊接工艺规程',
on_delete=models.CASCADE)
joint_index = models.CharField(verbose_name='接头编号', max_length=50,
blank=True, default='')
proc_qual_index = models.IntegerField(
verbose_name='焊接工艺评定编号',
choices=PROCEDURE_QUALIFICATION_INDEXS)
weld_cert_1 = models.ManyToManyField(WeldingCertification,
verbose_name='焊工持证项目_1',
related_name='joint_analysis_cert_1')
weld_cert_2 = models.ManyToManyField(WeldingCertification,
verbose_name='焊工持证项目_2',
related_name='joint_analysis_cert_2')
remark = models.CharField(verbose_name='备注', max_length=50,
blank=True, default='')
class Meta:
verbose_name = '焊接接头工艺分析'
verbose_name_plural = '焊接接头工艺分析'
def __str__(self):
return self.joint_index
[文档]class WeldingSeam(models.Model):
"""
焊缝
"""
process_material = models.ForeignKey(ProcessMaterial,
verbose_name='物料',
on_delete=models.CASCADE)
# TODO: unique?
uid = models.CharField(verbose_name='焊缝编号', max_length=50,
blank=True, default='')
# TODO: choices?
seam_type = models.CharField(verbose_name='类型名', max_length=50)
weld_position = models.IntegerField(verbose_name='焊接位置',
choices=WELD_POSITION_CHOICES)
weld_method_1 = models.IntegerField(verbose_name='焊接方法_1',
choices=WELD_METHODS,
blank=True, null=True)
weld_method_2 = models.IntegerField(verbose_name='焊接方法_2',
choices=WELD_METHODS,
blank=True, null=True)
bm_1 = models.CharField(verbose_name='母材材质_1', max_length=50,
default='', blank=True)
bm_thick_1 = models.FloatField(verbose_name='母材厚度_1')
bm_2 = models.CharField(verbose_name='母材材质_2', max_length=50,
default='', blank=True)
bm_thick_2 = models.FloatField(verbose_name='母材厚度2')
length = models.FloatField(verbose_name='长度')
wm_1 = models.ForeignKey(Material, verbose_name='焊丝/焊条_1_材质',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_seam_material_1')
wf_1 = models.ForeignKey(Material, verbose_name='焊丝/焊条_1_焊剂',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_seam_flux_1')
wt_1 = models.CharField(verbose_name='焊材厚度_1', max_length=100,
blank=True, default='')
ws_1 = models.CharField(verbose_name='规格_1', max_length=100,
blank=True, default='')
weight_1 = models.FloatField(verbose_name='焊材重量_1', default=0)
wf_weight_1 = models.FloatField(verbose_name='焊剂重量_1', default=0)
wm_2 = models.ForeignKey(Material, verbose_name='焊丝/焊条_2_材质',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_seam_material_2')
wf_2 = models.ForeignKey(Material, verbose_name='焊丝/焊条_2_焊剂',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_seam_flux_2')
wt_2 = models.CharField(verbose_name='焊材厚度_2', max_length=200,
blank=True, default='')
ws_2 = models.CharField(verbose_name='规格_2', max_length=200,
blank=True, default='')
weight_2 = models.FloatField(verbose_name='焊材重量_2', default=0)
wf_weight_2 = models.FloatField(verbose_name='焊剂重量_2', default=0)
remark = models.CharField(verbose_name='备注', max_length=50,
blank=True, default='')
analysis = models.ForeignKey(
WeldingJointProcessAnalysis, verbose_name='焊接接头工艺分析',
blank=True, null=True,
on_delete=models.SET_NULL)
class Meta:
verbose_name = '焊缝'
verbose_name_plural = '焊缝'
def __str__(self):
return str(self.process_material)
[文档]class WeldingWorkInstruction(models.Model):
"""
焊接作业指导书
"""
detail = models.OneToOneField(WeldingJointProcessAnalysis,
verbose_name='焊接接头工艺分析',
on_delete=models.CASCADE)
lister = models.ForeignKey(User, verbose_name='编制人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_work_inst_lister')
list_dt = models.DateTimeField(verbose_name='编制日期',
blank=True, null=True)
auditor = models.ForeignKey(User, verbose_name='审核人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_work_inst_auditor')
audit_dt = models.DateTimeField(verbose_name='审核日期',
blank=True, null=True)
proofreader = models.ForeignKey(User, verbose_name='校对人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_work_inst_proofreader')
proofread_dt = models.DateTimeField(verbose_name='校对日期',
blank=True, null=True)
approver = models.ForeignKey(User, verbose_name='批准人',
blank=True, null=True,
on_delete=models.SET_NULL,
related_name='weld_work_inst_approver')
approve_dt = models.DateTimeField(verbose_name='批准日期',
blank=True, null=True)
path = models.FileField(
verbose_name='路径',
upload_to=DynamicHashPath('WeldingWorkInstruction'),
blank=True, null=True)
class Meta:
verbose_name = '焊接作业指导书'
verbose_name_plural = '焊接作业指导书'
def __str__(self):
return 'RH20-{}-{}'.format(self.detail.spec.work_order, self.id)
[文档]class WeldingWorkInstructionProcess(models.Model):
"""
焊接作业指导书工序
"""
instruction = models.ForeignKey(WeldingWorkInstruction,
verbose_name='焊接作业指导书')
index = models.IntegerField(verbose_name='序号')
name = models.CharField(verbose_name='工序名', max_length=50,
default='', blank=True)
detail = models.CharField(verbose_name='工艺过程及技术要求',
max_length=100, default='', blank=True)
class Meta:
verbose_name = '焊接作业指导书工序'
verbose_name_plural = '焊接作业指导书工序'
def __str__(self):
return '{}-{}-{}'.format(self.instruction, self.index, self.name)
[文档]class WeldingWorkInstructionExamination(models.Model):
"""
焊接作业检验
"""
instruction = models.ForeignKey(WeldingWorkInstruction,
verbose_name='焊接作业指导书')
index = models.IntegerField(verbose_name='序号')
surveyor = models.IntegerField(verbose_name='检验方',
null=True, blank=True,
choices=WWI_EXAMINATION_SURVEYOR_CHOICES)
class Meta:
verbose_name = '焊接作业检验'
verbose_name_plural = '焊接作业检验'
def __str__(self):
return '{}:检验_{}'.format(self.transfer_card, self.indx)
[文档]class WeldingLayerCard(models.Model):
"""
焊接层道卡
"""
instruction = models.ForeignKey(WeldingWorkInstruction,
verbose_name='焊接作业指导书')
layer = models.IntegerField(verbose_name='层/道')
weld_method = models.IntegerField(verbose_name='焊接方法',
choices=WELD_METHODS)
# TODO: Field type?
polarity = models.CharField(verbose_name='极性', max_length=10,
blank=True, default='')
# TODO: IntegerField?
electricity = models.CharField(verbose_name='电流', max_length=10,
blank=True, default='')
# TODO: IntegerField?
voltage = models.CharField(verbose_name='电流电压', max_length=10,
blank=True, default='')
# TODO: IntegerField?
welding_speed = models.CharField(verbose_name='焊接速度', max_length=10,
blank=True, default='')
# TODO: IntegerField?
heat_input = models.CharField(verbose_name='线能量', max_length=10,
blank=True, default='')
remark = models.CharField(verbose_name='备注', max_length=50,
blank=True, default='')
class Meta:
verbose_name = '焊接层道卡'
verbose_name_plural = '焊接层道卡'
def __str__(self):
return '{}-{}'.format(self.instruction, self.layer)