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)
 |