239 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
 | 
						|
from apps.system.models import City, Dict, Province
 | 
						|
from django.db import models
 | 
						|
from utils.model import BaseModel
 | 
						|
from apps.system.models import CommonAModel, CommonBModel, File, Organization, User
 | 
						|
# Create your models here.
 | 
						|
from django.contrib.postgres.fields import JSONField
 | 
						|
 | 
						|
class Ability(BaseModel):
 | 
						|
    dlxh = models.TextField('大类序号', null=True, blank=True)
 | 
						|
    dlmc = models.TextField('大类', null=True, blank=True)
 | 
						|
    lbxh = models.TextField('类别序号', null=True,blank=True)
 | 
						|
    lbmc = models.TextField('类别名称', null=True,blank=True)
 | 
						|
    xmxh = models.TextField('项目序号', null=True,blank=True)
 | 
						|
    xmmc = models.TextField('项目名称', null=True,blank=True)
 | 
						|
    bzmc = models.TextField('标准名称', null=True,blank=True)
 | 
						|
    bzbh = models.TextField('标准编号', null=True,blank=True)
 | 
						|
    bztk = models.TextField('标准条款', null=True,blank=True)
 | 
						|
    xzfw = models.TextField('限制范围',null=True,blank=True)
 | 
						|
    bz = models.TextField('备注',null=True,blank=True)
 | 
						|
    cma = models.TextField('CMA中心',null=True,blank=True)
 | 
						|
    cma_ok = models.BooleanField(null=True, blank=True)
 | 
						|
    cnas_ok = models.BooleanField(null=True, blank=True)
 | 
						|
    cnas = models.TextField('CNAS中心',null=True,blank=True)
 | 
						|
    cma_o = models.TextField('中心',null=True,blank=True)
 | 
						|
    cma_oplace = models.TextField('地点',null=True,blank=True)
 | 
						|
    class Meta:
 | 
						|
        verbose_name='记录合并'
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class QueryRecord(BaseModel):
 | 
						|
    user = models.ForeignKey(User, related_name='record_user', on_delete=models.CASCADE)
 | 
						|
    path = models.CharField('访问地址', max_length=200)
 | 
						|
    ip = models.CharField('IP地址', max_length=200, null=True, blank=True)
 | 
						|
    method = models.CharField('方法', max_length=100, default='GET')
 | 
						|
    query = JSONField(null=True,blank=True)
 | 
						|
    search = models.TextField('搜索字符', null=True, blank=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        verbose_name = '查询记录'
 | 
						|
        verbose_name_plural = verbose_name
 | 
						|
 | 
						|
class Correct(BaseModel):
 | 
						|
    dlxh = models.TextField('大类序号', null=True,blank=True)
 | 
						|
    dlmc = models.TextField('大类', null=True,blank=True)
 | 
						|
    lbxh = models.TextField('类别序号', null=True,blank=True)
 | 
						|
    lbmc = models.TextField('类别名称', null=True,blank=True)
 | 
						|
    bclxh = models.TextField('被测量序号', null=True,blank=True)
 | 
						|
    bclmc = models.TextField('被测量名称', null=True,blank=True)
 | 
						|
    jzgc = models.TextField('校准规程', null=True, blank=True)
 | 
						|
    clfw = models.TextField('测量范围', null=True, blank=True)
 | 
						|
    zqddj = models.TextField('准确度等级', null=True, blank=True)
 | 
						|
    note = models.TextField('说明', null=True, blank=True)
 | 
						|
    ssgs = models.TextField('所属公司', null=True, blank=True)
 | 
						|
    ssbm = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True, related_name='correct_ssbm')
 | 
						|
    
 | 
						|
    class Meta:
 | 
						|
        verbose_name='校验能力'
 | 
						|
        verbose_name_plural=verbose_name
 | 
						|
 | 
						|
class CMA(BaseModel):
 | 
						|
    """
 | 
						|
    CMA检测能力表
 | 
						|
    """
 | 
						|
    type_choices = (
 | 
						|
        ('center', '总部'),
 | 
						|
        ('sub', '分子公司')
 | 
						|
    )
 | 
						|
    dlxh = models.TextField('大类序号', null=True,blank=True)
 | 
						|
    dlmc = models.TextField('大类', null=True,blank=True)
 | 
						|
    lbxh = models.TextField('类别序号', null=True,blank=True)
 | 
						|
    lbmc = models.TextField('类别名称', null=True,blank=True)
 | 
						|
    xmxh = models.TextField('项目序号', null=True,blank=True)
 | 
						|
    xmmc = models.TextField('项目名称', null=True,blank=True)
 | 
						|
    bzmc = models.TextField('标准名称', null=True,blank=True)
 | 
						|
    bzbh = models.TextField('标准编号', null=True,blank=True)
 | 
						|
    xzfw = models.TextField('限制范围',null=True,blank=True)
 | 
						|
    bz = models.TextField('备注',null=True,blank=True)
 | 
						|
    sszx = models.TextField('所属中心',null=True,blank=True)
 | 
						|
    type = models.CharField('所属类型', max_length=50,
 | 
						|
                             choices=type_choices, default='center')
 | 
						|
    glzz = models.TextField('关联资质', null=True, blank=True)
 | 
						|
 | 
						|
class Inspection(BaseModel):
 | 
						|
    """
 | 
						|
    检验能力表
 | 
						|
    """
 | 
						|
    
 | 
						|
    dlxh = models.TextField('大类序号', null=True,blank=True)
 | 
						|
    dlmc = models.TextField('大类名称', null=True,blank=True)
 | 
						|
    dxxh = models.TextField('对象序号', null=True,blank=True)
 | 
						|
    jydx = models.TextField('检验对象', null=True,blank=True)
 | 
						|
    jyxmxh = models.TextField('检验项目序号', null=True,blank=True)
 | 
						|
    jyxmmc = models.TextField('检验项目名称', null=True,blank=True)
 | 
						|
    jybz = models.TextField('检验标准', null=True,blank=True)
 | 
						|
    sm = models.TextField('说明', null=True,blank=True)
 | 
						|
    sxrq = models.TextField('生效日期', null=True,blank=True)
 | 
						|
    sszx = models.TextField('所属中心',null=True,blank=True)
 | 
						|
 | 
						|
class CNAS(BaseModel):
 | 
						|
    """
 | 
						|
    CNAS检测能力表
 | 
						|
    """
 | 
						|
    lbmc = models.TextField('类别名称', null=True,blank=True)
 | 
						|
    xmmc = models.TextField('项目名称', null=True,blank=True)
 | 
						|
    bzmc = models.TextField('标准名称', null=True,blank=True)
 | 
						|
    bzbh = models.TextField('标准编号', null=True,blank=True)
 | 
						|
    bztk = models.TextField('标准条款', null=True,blank=True)
 | 
						|
    sszx = models.TextField('所属中心',null=True,blank=True)
 | 
						|
 | 
						|
class Qualification(BaseModel):
 | 
						|
    sszx = models.TextField('所属中心', null=True, blank=True)
 | 
						|
    ssbm = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True, related_name='qualification_ssbm')
 | 
						|
    cma = models.TextField('cma资质', null=True, blank=True)
 | 
						|
    cnas = models.TextField('cnas资质', null=True, blank=True)
 | 
						|
    other = models.TextField('检验检测相关其它资质', null=True, blank=True)
 | 
						|
    service = models.TextField('主要检验检测服务', null=True, blank=True)
 | 
						|
 | 
						|
class Qualificationother(BaseModel):
 | 
						|
    qualification = models.ForeignKey(Qualification, on_delete=models.CASCADE, related_name='other_qualification')
 | 
						|
    name = models.TextField('其他资质', null=True, blank=True)
 | 
						|
    description = models.TextField('资质范围', null=True, blank=True)
 | 
						|
 | 
						|
class QualiLib(BaseModel):
 | 
						|
    """
 | 
						|
    资质库
 | 
						|
    """
 | 
						|
    name = models.CharField('名称', max_length=20)
 | 
						|
    levels = JSONField('等级', default=list, null=True, blank=True)
 | 
						|
    scopes = JSONField('范围', default=list, null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Quali(CommonAModel):
 | 
						|
    """
 | 
						|
    资质
 | 
						|
    """
 | 
						|
    QUALI_TYPE_CHOICES=(
 | 
						|
        ('CMA', 'CMA'),
 | 
						|
        ('CNAS', 'CNAS'),
 | 
						|
        ('OTHER', 'OTHER')
 | 
						|
    )
 | 
						|
    QUALI_GRADE_CHOICES = (
 | 
						|
        (10, '国家级'),
 | 
						|
        (20, '省级'),
 | 
						|
        (30, '市级'),
 | 
						|
        (40, '实验室'),
 | 
						|
        (50, '检验机构')
 | 
						|
    )
 | 
						|
    org = models.ForeignKey(Organization, on_delete=models.CASCADE, verbose_name='所属单位')
 | 
						|
    name = models.CharField('资质名称', max_length=20, null=True, blank=True)
 | 
						|
    type = models.CharField('资质类型', choices=QUALI_TYPE_CHOICES, max_length=10)
 | 
						|
    grade = models.PositiveSmallIntegerField('等级1', null=True, blank=True, choices=QUALI_GRADE_CHOICES)
 | 
						|
    scope = models.TextField('范围', null=True, blank=True)
 | 
						|
    level = models.CharField('等级2', max_length=10, null=True, blank=True)
 | 
						|
    province = models.ForeignKey(Province, on_delete=models.SET_NULL, null=True, blank=True)
 | 
						|
    city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True, blank=True, related_name='quali_city')
 | 
						|
    citys = models.ManyToManyField(City, verbose_name='备案城市', related_name='quali_citys', blank=True)
 | 
						|
    description = models.TextField('描述', null=True, blank=True)
 | 
						|
    qualilib = models.ForeignKey(QualiLib, verbose_name='关联资质库',
 | 
						|
                                 null=True, blank=True, on_delete=models.SET_NULL)
 | 
						|
    end_date = models.DateField('截至日期', null=True, blank=True)
 | 
						|
    file = models.ForeignKey(File, null=True, blank=True, verbose_name='关联文件', on_delete=models.CASCADE)
 | 
						|
    
 | 
						|
 | 
						|
 | 
						|
class QTask(CommonBModel):
 | 
						|
    """
 | 
						|
    资质报送任务
 | 
						|
    """
 | 
						|
    state_choices = (
 | 
						|
        ('待发布', '待发布'),
 | 
						|
        ('进行中', '进行中'),
 | 
						|
        ('已关闭', '已关闭'),
 | 
						|
    )
 | 
						|
    name = models.CharField('名称', max_length=100)
 | 
						|
    end_date = models.DateField('截止时间', null=True, blank=True)
 | 
						|
    state = models.CharField('任务状态', max_length=50, choices=state_choices, default='待发布')
 | 
						|
    orgs = models.ManyToManyField(Organization, through='ability.qorg')
 | 
						|
    class Meta:
 | 
						|
        verbose_name = '资质报送任务'
 | 
						|
        verbose_name_plural = verbose_name
 | 
						|
 | 
						|
 | 
						|
class QOrg(BaseModel):
 | 
						|
    qtask = models.ForeignKey(QTask, verbose_name='关联任务', on_delete=models.CASCADE, related_name='qorg_qtask')
 | 
						|
    org = models.ForeignKey(Organization, verbose_name='关联公司', on_delete=models.CASCADE, related_name='qorg_org')
 | 
						|
    count = models.PositiveIntegerField(default=0)
 | 
						|
    count_confirmed = models.PositiveIntegerField(default=0)
 | 
						|
    class Meta:
 | 
						|
        verbose_name = '资质报送任务部门'
 | 
						|
        verbose_name_plural = verbose_name
 | 
						|
 | 
						|
 | 
						|
class QAction(CommonBModel):
 | 
						|
    """
 | 
						|
    任务操作
 | 
						|
    """
 | 
						|
    QACTION_CHOICE = (
 | 
						|
        ('service:update', '更新服务'),
 | 
						|
        ('quali:create', '新增资质'),
 | 
						|
        ('quali:update', '更新资质'),
 | 
						|
        ('ablity:create', '新增能力'),
 | 
						|
        ('ablity:nochange', '能力无变化'),
 | 
						|
        ('quali:nochange', '资质无变化')
 | 
						|
    )
 | 
						|
    action = models.CharField('操作类型', max_length=20, choices=QACTION_CHOICE)
 | 
						|
    quali = models.ForeignKey(Quali, null=True, blank=True, verbose_name='操作资质', on_delete=models.CASCADE)
 | 
						|
    file = models.ForeignKey(File, null=True, blank=True, verbose_name='能力文件', on_delete=models.CASCADE)
 | 
						|
    atype = models.ForeignKey(Dict, null=True, blank=True, verbose_name='能力类型',
 | 
						|
                              on_delete=models.CASCADE, related_name='quali_atype')
 | 
						|
    afield = models.ForeignKey(Dict, null=True, blank=True, verbose_name='所属领域',
 | 
						|
                               on_delete=models.CASCADE, related_name='quali_afield')
 | 
						|
    num = models.PositiveIntegerField('新增对象数量', null=True, blank=True)
 | 
						|
    num2 = models.PositiveIntegerField('新增参数数量', null=True, blank=True)
 | 
						|
    num3 = models.PositiveIntegerField('新增方法标准数量', null=True, blank=True)
 | 
						|
    num4 = models.PositiveIntegerField('新增产品标准数量', null=True, blank=True)
 | 
						|
    qtask = models.ForeignKey(QTask, on_delete=models.CASCADE)
 | 
						|
    value1 = JSONField('值1', null=True, blank=True, default=dict)
 | 
						|
    value2 = JSONField('值2', null=True, blank=True, default=dict)
 | 
						|
    confirmed = models.BooleanField('是否确认',default=False)
 | 
						|
 | 
						|
 | 
						|
class QActionItem(BaseModel):
 | 
						|
    QACTIONITEM_CHOICE = (
 | 
						|
        ('update', '更新'),
 | 
						|
        ('citys:add', '新增备案城市'),
 | 
						|
        ('citys:remove', '移除备案城市'),
 | 
						|
    )
 | 
						|
    action = models.CharField('操作类型', max_length=20, choices=QACTIONITEM_CHOICE)
 | 
						|
    field = models.CharField('变动字段', max_length=20)
 | 
						|
    value1 = JSONField('原值', null=True, blank=True, default=dict)
 | 
						|
    value2 = JSONField('新值', null=True, blank=True, default=dict)
 | 
						|
    city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True, blank=True)
 | 
						|
    qaction = models.ForeignKey(QAction, verbose_name='关联操作',
 | 
						|
                                on_delete=models.CASCADE, related_name='items_qaction', null=True, blank=True)
 | 
						|
 | 
						|
 |