235 lines
11 KiB
Python
235 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)
|
|
sm = 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)
|