From b66157edb85b4b84de89dd559b53cd35ecf19e36 Mon Sep 17 00:00:00 2001 From: zty Date: Wed, 23 Apr 2025 16:48:52 +0800 Subject: [PATCH] feat: model add note --- apps/am/models.py | 4 +-- apps/cm/models.py | 1 + apps/cms/models.py | 1 + apps/develop/models.py | 1 + apps/dpm/models.py | 12 ++++---- apps/ecm/models.py | 11 +++---- apps/edu/models.py | 9 +++++- apps/em/models.py | 8 ++--- apps/enm/models.py | 13 +++++---- apps/enp/models.py | 7 +++-- apps/fim/models.py | 3 ++ apps/hrm/models.py | 10 +++---- apps/ichat/views.py | 66 ++++++++++++++++++++++++++++++++++++++++++ apps/inm/models.py | 14 ++++----- apps/monitor/models.py | 3 +- apps/mtm/models.py | 22 +++++++------- apps/opm/models.py | 11 +++---- apps/pm/models.py | 7 +++-- apps/pum/models.py | 9 +++--- apps/qm/models.py | 22 ++++++++------ apps/rpm/models.py | 20 ++++++------- apps/sam/models.py | 8 ++--- apps/system/models.py | 18 ++++++------ apps/wf/models.py | 6 ++-- apps/wpm/models.py | 2 ++ apps/wpmw/models.py | 1 + 26 files changed, 193 insertions(+), 96 deletions(-) diff --git a/apps/am/models.py b/apps/am/models.py index a3d27083..c9b9dca6 100755 --- a/apps/am/models.py +++ b/apps/am/models.py @@ -7,7 +7,7 @@ from apps.utils.models import CommonADModel, CommonBModel class Area(CommonBModel): """ - 地图区域 + TN: 地图区域 """ AREA_1 = 10 AREA_2 = 20 @@ -47,7 +47,7 @@ class Area(CommonBModel): class Access(CommonADModel): """ - 准入禁入权限(动态变化) + TN: 准入禁入权限(动态变化) """ ACCESS_IN_YES = 10 ACCESS_IN_NO = 20 diff --git a/apps/cm/models.py b/apps/cm/models.py index ca86fbbb..e080d261 100644 --- a/apps/cm/models.py +++ b/apps/cm/models.py @@ -6,6 +6,7 @@ from apps.wpm.models import WmStateOption # Create your models here. class LableMat(BaseModel): + """TN: 标签物料""" state = models.PositiveSmallIntegerField('状态', default=10, choices=WmStateOption.choices) material = models.ForeignKey(Material, on_delete=models.CASCADE) batch = models.CharField('批次号', max_length=100) diff --git a/apps/cms/models.py b/apps/cms/models.py index 2518f658..44b111ab 100644 --- a/apps/cms/models.py +++ b/apps/cms/models.py @@ -3,6 +3,7 @@ from apps.utils.models import CommonADModel # Create your models here. class Article(CommonADModel): + """TN: 文章""" title = models.CharField(max_length=200, verbose_name="标题") poster = models.TextField(verbose_name="封面地址", null=True, blank=True) video = models.TextField(verbose_name="视频地址", null=True, blank=True) diff --git a/apps/develop/models.py b/apps/develop/models.py index 5c32ad26..0833a2ff 100755 --- a/apps/develop/models.py +++ b/apps/develop/models.py @@ -5,6 +5,7 @@ from apps.utils.models import BaseModel class Project(BaseModel): + """TN: 项目""" name = models.CharField('项目名称', max_length=50) code = models.CharField('标识', max_length=20, unique=True) config_json = models.JSONField('配置信息', default=dict) diff --git a/apps/dpm/models.py b/apps/dpm/models.py index fda87e3d..457d55b1 100644 --- a/apps/dpm/models.py +++ b/apps/dpm/models.py @@ -5,7 +5,7 @@ from django_celery_beat.models import PeriodicTask # Create your models here. class RiskPoint(CommonAModel): """ - 风险点表 + TN: 风险点表 """ R_LEVEL = ( (10, '低风险'), @@ -34,7 +34,7 @@ class RiskPoint(CommonAModel): class Risk(CommonAModel): """ - 风险表 + TN: 风险表 """ name = models.TextField('项目/步骤') level = models.PositiveSmallIntegerField('风险等级', default=10, choices=RiskPoint.R_LEVEL) @@ -56,7 +56,7 @@ class Risk(CommonAModel): class CheckTaskSet(CommonADModel): """ - 检查任务派发设置 + TN:检查任务派发设置 """ riskpoint = models.ForeignKey(RiskPoint, verbose_name='关联风险点', related_name='ctask_riskpoint', on_delete=models.SET_NULL, null=True, blank=True) note = models.TextField('派发备注', null=True, blank=True) @@ -68,7 +68,7 @@ class CheckTaskSet(CommonADModel): class CheckWork(CommonAModel): """ - 检查工作 + TN: 检查工作 """ CW_TYPE = ( (10, '手动'), @@ -90,7 +90,7 @@ class CheckWork(CommonAModel): class Hazard(CommonADModel): """ - 事故隐患表 + TN: 事故隐患表 """ H_HARM = ( (10, '无伤害'), @@ -142,7 +142,7 @@ class Hazard(CommonADModel): class CheckItem(BaseModel): """ - 检查工作-隐患关联表 + TN:检查工作-隐患关联表 """ CITEM_RESULT = ( (10, '未检查'), diff --git a/apps/ecm/models.py b/apps/ecm/models.py index 092aae0a..93b124c5 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -16,7 +16,7 @@ LEVEL_CHOICES = ( class EventCate(CommonAModel): """ - 事件种类 + TN: 事件种类 """ EVENT_TRIGGER_CHOICES = ( (10, '监控'), @@ -47,7 +47,7 @@ class EventCate(CommonAModel): class AlgoChannel(BaseModel): - + """TN: 算法通道""" algo = models.ForeignKey(EventCate, verbose_name='关联算法', on_delete=models.CASCADE, related_name='ac_algo') vchannel = models.ForeignKey(TDevice, verbose_name='视频通道', on_delete=models.CASCADE, related_name='ac_vchannel') always_on = models.BooleanField("实时开启", default=False) @@ -58,7 +58,7 @@ class AlgoChannel(BaseModel): class NotifySetting(CommonADModel): """ - 提醒配置 + TN: 提醒配置 """ PUSH_FILTER1_CHOICES = ( (10, '当事人部门'), @@ -84,7 +84,7 @@ class NotifySetting(CommonADModel): class Event(CommonBDModel): """ - 事件 + TN: 事件 """ EVENT_MARK_CHOICES = ( (10, '正常'), @@ -118,6 +118,7 @@ class Event(CommonBDModel): class Eventdo(BaseModel): + """TN: 事件处理记录""" cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE, related_name='do_cate') event = models.ForeignKey(Event, verbose_name='关联事件', @@ -130,7 +131,7 @@ class Eventdo(BaseModel): class Remind(BaseModel): """ - 事件提醒表 + TN: 事件提醒表 """ event = models.ForeignKey(Event, verbose_name='关联事件', on_delete=models.CASCADE) diff --git a/apps/edu/models.py b/apps/edu/models.py index 952f09c4..f0f73de8 100644 --- a/apps/edu/models.py +++ b/apps/edu/models.py @@ -6,6 +6,7 @@ from apps.system.models import User, Dept, File class Train(CommonADModel): + """TN: 线下培训""" T_L_POST = 10 T_L_TEAM = 20 T_L_DEPT = 30 @@ -27,6 +28,7 @@ class Train(CommonADModel): class Questioncat(CommonAModel): + """TN: 题库分类""" name = models.CharField(max_length=200, verbose_name="名称") parent = models.ForeignKey("self", on_delete=models.SET_NULL, null=True, blank=True, verbose_name="父级", related_name="cate_parent") sort = models.PositiveIntegerField(default=0, verbose_name="排序") @@ -40,6 +42,7 @@ class Questioncat(CommonAModel): class Question(CommonAModel): + """TN: 题目""" Q_DAN = 10 Q_DUO = 20 Q_PAN = 30 @@ -65,6 +68,7 @@ class Question(CommonAModel): class Paper(CommonAModel): + """TN: 押题卷""" PAPER_FIX = 10 # 固定试卷 PAPER_RANDOM = 20 # 自动抽题 @@ -94,6 +98,7 @@ class Paper(CommonAModel): class PaperQuestion(BaseModel): + """TN: 试卷-试题关系表""" paper = models.ForeignKey(Paper, on_delete=models.CASCADE, verbose_name="试卷") question = models.ForeignKey(Question, on_delete=models.CASCADE, verbose_name="试题") total_score = models.FloatField(default=0, verbose_name="单题满分") @@ -101,6 +106,7 @@ class PaperQuestion(BaseModel): class Exam(CommonADModel): + """TN: 在线考试""" name = models.CharField("名称", max_length=100) open_time = models.DateTimeField("开启时间") close_time = models.DateTimeField("关闭时间", null=True, blank=True) @@ -120,7 +126,7 @@ class Exam(CommonADModel): class ExamRecord(CommonADModel): """ - 考试记录表 + TN: 考试记录表 """ exam = models.ForeignKey(Exam, on_delete=models.CASCADE, verbose_name="关联考试", related_name="record_exam") @@ -139,6 +145,7 @@ class ExamRecord(CommonADModel): class AnswerDetail(BaseModel): + """TN: 答题记录详情表""" examrecord = models.ForeignKey(ExamRecord, on_delete=models.CASCADE, related_name="detail_er") total_score = models.FloatField(default=0, verbose_name="该题满分") question = models.ForeignKey(Question, on_delete=models.CASCADE) diff --git a/apps/em/models.py b/apps/em/models.py index 78946325..70ae7ee7 100644 --- a/apps/em/models.py +++ b/apps/em/models.py @@ -9,6 +9,7 @@ etype_choices = ((10, "生产设备"), (20, "计量设备"), (30, "治理设备" class Ecate(CommonADModel): + """TN:设备类别""" name = models.CharField("名称", max_length=50, unique=True) code = models.CharField("编码", max_length=50, unique=True, null=True, blank=True) type = models.PositiveSmallIntegerField("类型", choices=etype_choices, help_text=str(etype_choices)) @@ -22,8 +23,7 @@ class Ecate(CommonADModel): class Equipment(CommonBModel): """ - 设备台账信息 - 其中belong_dept是责任部门 + TN:设备台账信息,其中belong_dept是责任部门 """ RUNING = 10 STANDBY = 20 @@ -126,7 +126,7 @@ class Equipment(CommonBModel): class EcheckRecord(CommonADModel): """ - 校准检定记录 + TN:校准检定记录 """ CHECK_CHOICES = ((10, "正常"), (20, "异常")) @@ -139,7 +139,7 @@ class EcheckRecord(CommonADModel): class EInspect(CommonADModel): """ - 巡检记录 + TN:巡检记录 """ INSPECT_RESULTS = ( diff --git a/apps/enm/models.py b/apps/enm/models.py index fbb8eb0f..189f0c55 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -5,6 +5,7 @@ from apps.mtm.models import Material, Mgroup, Team from django_celery_beat.models import PeriodicTask class Xscript(BaseModel): + """TN:脚本""" name = models.CharField("脚本名称", max_length=50) code = models.TextField("脚本内容", null=True, blank=True) base_data = models.JSONField("基础数据", default=dict, null=True, blank=True) @@ -13,7 +14,7 @@ class Xscript(BaseModel): periodictask = models.ForeignKey(PeriodicTask, verbose_name='关联定时任务', on_delete=models.CASCADE, related_name='xscript_periodictask', null=True, blank=True) class Mpoint(CommonBModel): - """测点""" + """TN:测点""" MT_AUTO = 10 MT_COMPUTE = 20 MT_MANUAL = 30 @@ -69,7 +70,7 @@ class Mpoint(CommonBModel): class MpLogx(models.Model): """ - 测点记录超表 + TN:测点记录超表 """ timex = models.DateTimeField("采集时间", primary_key=True) @@ -87,7 +88,7 @@ class MpLogx(models.Model): class MpLog(BaseModel): - """旧表(已废弃)""" + """TN:旧表(已废弃)""" mpoint = models.ForeignKey(Mpoint, verbose_name="关联测点", on_delete=models.SET_NULL, null=True, blank=True) tag_id = models.BigIntegerField("记录ID", db_index=True) @@ -97,7 +98,7 @@ class MpLog(BaseModel): class MpointStat(CommonADModel): - """测点统计表""" + """TN:测点统计表""" type = models.CharField("统计维度", max_length=50, default="hour", help_text="year/month/day/year_s/month_s/month_st/day_s/sflog/hour_s/hour") year = models.PositiveSmallIntegerField("年", null=True, blank=True) @@ -123,7 +124,7 @@ class MpointStat(CommonADModel): class EnStat(BaseModel): """ - 能源数据统计表 + TN:能源数据统计表 """ type = models.CharField("统计维度", max_length=50, default="hour", help_text="year_s/month_s/month_st/day_s/sflog/hour_s") @@ -174,7 +175,7 @@ class EnStat(BaseModel): class EnStat2(BaseModel): """ - 能源数据统计表2 + TN:能源数据统计表2 """ type = models.CharField("统计维度", max_length=50, default="month_s", help_text="month_s/day_s") diff --git a/apps/enp/models.py b/apps/enp/models.py index 1b23bcc0..2fac428d 100644 --- a/apps/enp/models.py +++ b/apps/enp/models.py @@ -6,6 +6,7 @@ from apps.em.models import Equipment class Drain(CommonBModel): + """TN:排口表""" DR_TYPE_CHOICES = ( (10, "排放口"), (20, "污染源"), @@ -37,7 +38,7 @@ class Drain(CommonBModel): class DrainEquip(BaseModel): """ - 排口/设备关系表 + TN:排口/设备关系表 """ drain = models.ForeignKey(Drain, verbose_name="排口", related_name="drainequip_drain", on_delete=models.CASCADE) @@ -50,7 +51,7 @@ class DrainEquip(BaseModel): class EnvData(models.Model): """ - 环保监测数据 + TN:环保监测数据 """ enp_fields = [ @@ -105,6 +106,7 @@ class EnvData(models.Model): class VehicleAccess(BaseModel): + """TN:车辆出入厂记录""" type = models.PositiveSmallIntegerField("出入类型", default=1, help_text="1: 进厂, 2: 出厂") vehicle_number = models.CharField("车牌号", max_length=10) access_time = models.DateTimeField("出入时间", null=True, blank=True) @@ -114,6 +116,7 @@ class VehicleAccess(BaseModel): class CarWash(BaseModel): + """TN:洗车记录""" station = models.ForeignKey(Equipment, verbose_name="洗车台", on_delete=models.CASCADE) vehicle_number = models.CharField("车牌号", max_length=10, default="") start_time = models.DateTimeField("洗车时间", null=True, blank=True) diff --git a/apps/fim/models.py b/apps/fim/models.py index 908c3606..d1cf215f 100644 --- a/apps/fim/models.py +++ b/apps/fim/models.py @@ -6,6 +6,7 @@ from apps.wpm.models import SfLog # Create your models here. class Fee(BaseModel): + """TN:费用""" name = models.CharField('名称', max_length=20) cate = models.CharField('父名称', max_length=20) element = models.CharField('要素', max_length=20, help_text='直接材料/直接人工/制造费用') @@ -13,6 +14,7 @@ class Fee(BaseModel): class FeeSet(CommonADModel): + """TN:费用集合""" year = models.PositiveSmallIntegerField('年份') month = models.PositiveSmallIntegerField('月份') mgroup = models.ForeignKey(Mgroup, verbose_name='关联工段', on_delete=models.CASCADE) @@ -21,6 +23,7 @@ class FeeSet(CommonADModel): class PriceSet(CommonADModel): + """TN:价格集合""" year = models.PositiveSmallIntegerField('年份') month = models.PositiveSmallIntegerField('月份') material = models.ForeignKey('mtm.material', on_delete=models.CASCADE, verbose_name='关联物料') diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 9b9c48a5..bcea7f76 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -8,7 +8,7 @@ from datetime import timedelta class Employee(CommonBModel): """ - 员工信息 + TN:员工信息 """ JOB_ON = 10 JOB_OFF = 20 @@ -77,7 +77,7 @@ class Employee(CommonBModel): class NotWorkRemark(CommonADModel): """ - 离岗说明 + TN:离岗说明 """ not_work_date = models.DateField('未打卡日期') user = models.ForeignKey(User, verbose_name='用户', on_delete=models.CASCADE) @@ -86,7 +86,7 @@ class NotWorkRemark(CommonADModel): class Attendance(CommonADModel): """ - 到岗记录 + TN:到岗记录 """ ATT_STATE_CHOICES = [ ('pending', '待定'), @@ -119,7 +119,7 @@ class Attendance(CommonADModel): class ClockRecord(BaseModel): """ - 打卡记录 + TN:打卡记录 """ ClOCK_ON = 10 CLOCK_OFF = 20 @@ -157,7 +157,7 @@ class ClockRecord(BaseModel): class Certificate(CommonAModel): """ - 证书 + TN:证书 """ CERT_OK = 10 CERT_EXPIRING = 20 diff --git a/apps/ichat/views.py b/apps/ichat/views.py index 91ea44a2..13e2e976 100644 --- a/apps/ichat/views.py +++ b/apps/ichat/views.py @@ -1,3 +1,69 @@ from django.shortcuts import render # Create your views here. + +from pydantic import Field +from langchain_core.language_models import LLM +from langchain_core.outputs import LLMResult, Generation +import requests + +class CustomLLM(LLM): + model_url: str + + def _call(self, prompt: str, stop: list = None) -> str: + data = { + "model": "glm4", + "messages": [ + { + "role": "system", + "content": "你是一个 SQL 助手,严格遵循以下规则:\n" + "1. 只返回 PostgreSQL 语法 SQL 语句。\n" + "2. 严格禁止添加任何解释、注释、Markdown 代码块标记(包括 ```sql 和 ```)。\n" + "3. 输出必须是纯 SQL,且可直接执行,无需任何额外处理。" + "4. 在 SQL 中如有多个表,请始终使用表名前缀引用字段,避免字段歧义。" + }, + {"role": "user", "content": prompt} + ], + "stream": False + } + response = requests.post(self.model_url, json=data, timeout=600) + response.raise_for_status() + content = response.json()["choices"][0]["message"]["content"] + clean_sql = self.strip_sql_markdown(content) + print('clean content----------', clean_sql) + return clean_sql + + def _generate(self, prompts: list, stop: list = None) -> LLMResult: + generations = [] + for prompt in prompts: + text = self._call(prompt, stop) + generations.append([Generation(text=text)]) + return LLMResult(generations=generations) + + def strip_sql_markdown(self, content: str) -> str: + import re + # 去掉包裹在 ```sql 或 ``` 中的内容 + match = re.search(r"```sql\s*(.*?)```", content, re.DOTALL | re.IGNORECASE) + if match: + return match.group(1).strip() + match = re.search(r"```\s*(.*?)```", content, re.DOTALL) + if match: + return match.group(1).strip() + return content.strip() + + @property + def _llm_type(self) -> str: + return "custom_llm" +# 实例化 +# model_url = "http://14.22.88.72:11025/v1/chat/completions" +model_url = "http://139.159.180.64:11434/v1/chat/completions" +llm = CustomLLM(model_url=model_url) + +# 测试数据库查询 +from langchain_experimental.sql import SQLDatabaseChain +from langchain_community.utilities import SQLDatabase + +db = SQLDatabase.from_uri("postgresql+pg8000://postgres:zcDsj%402024@127.0.0.1:5432/factory") +db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True) +result = db_chain.invoke("帮我生成一份数据库的表结构") +print('res-------------------------------',result) diff --git a/apps/inm/models.py b/apps/inm/models.py index c2ef05b2..dffe62e3 100644 --- a/apps/inm/models.py +++ b/apps/inm/models.py @@ -11,7 +11,7 @@ from django.db.models import Max class WareHouse(CommonBModel): """ - 仓库信息 + TN:仓库信息 """ number = models.CharField('仓库编号', max_length=20) name = models.CharField('仓库名称', max_length=20) @@ -20,7 +20,7 @@ class WareHouse(CommonBModel): class MaterialBatch(BaseModel): """ - 物料批次 + TN:物料批次 """ batch = models.TextField('批次号') state = models.PositiveSmallIntegerField('状态', default=10, choices=((10, '合格'), (20, '不合格'), (30, '返修'), (40, '检验'), (50, '报废'))) @@ -41,7 +41,7 @@ class MaterialBatch(BaseModel): class MaterialBatchA(BaseModel): """ - 组合件物料批次 + TN:组合件物料批次 """ batch = models.CharField('批次号', max_length=100) material = models.ForeignKey( @@ -62,7 +62,7 @@ MIO_TYPE_PREFIX = { class MIO(CommonBDModel): """ - 出入库记录 + TN:出入库记录 """ MIO_TYPE_DO_OUT = 'do_out' MIO_TYPE_SALE_OUT = 'sale_out' @@ -126,7 +126,7 @@ class MIO(CommonBDModel): class MIOItem(BaseModel): """ - 出入库明细 + TN:出入库明细 """ mio = models.ForeignKey(MIO, verbose_name='关联出入库', on_delete=models.CASCADE, related_name='item_mio') @@ -182,7 +182,7 @@ class MIOItem(BaseModel): class MIOItemA(BaseModel): """ - 组合件出入库明细 + TN:组合件出入库明细 """ material = models.ForeignKey( Material, verbose_name='物料', on_delete=models.CASCADE) @@ -198,7 +198,7 @@ class MIOItemA(BaseModel): class MIOItemw(BaseModel): """ - 单件记录 + TN:单件记录 """ number = models.TextField('编号') wpr = models.ForeignKey("wpmw.wpr", verbose_name='关联产品', on_delete=models.SET_NULL, related_name='wpr_mioitemw' diff --git a/apps/monitor/models.py b/apps/monitor/models.py index 4bf3b475..a4f11ca4 100755 --- a/apps/monitor/models.py +++ b/apps/monitor/models.py @@ -5,6 +5,7 @@ from apps.utils.models import BaseModel class AuditLog(models.Model): + """TN:审计表""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) action = models.CharField('动作', max_length=20) model_name = models.CharField('模型名', max_length=20) @@ -18,7 +19,7 @@ class AuditLog(models.Model): class DrfRequestLog(BaseModel): - """Logs Django rest framework API requests""" + """TN:Logs Django rest framework API requests""" id = models.UUIDField(primary_key=True, default=uuid.uuid4) user = models.ForeignKey( diff --git a/apps/mtm/models.py b/apps/mtm/models.py index 3bf99f86..c432a023 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -7,7 +7,7 @@ from django.db.models import Q class Process(CommonBModel): """ - 工序 + TN:工序 """ PRO_PROD = 10 PRO_TEST = 20 @@ -42,6 +42,7 @@ class Process(CommonBModel): # Create your models here. class Material(CommonAModel): + """TN:物料""" MA_TYPE_BASE = 0 MA_TYPE_GOOD = 10 MA_TYPE_HALFGOOD = 20 @@ -107,7 +108,7 @@ class Material(CommonAModel): class Shift(CommonBModel): - """班次 + """TN:班次 """ name = models.CharField('名称', max_length=50) rule = models.CharField('所属规则', max_length=10, default='默认') @@ -120,13 +121,13 @@ class Shift(CommonBModel): class Srule(CommonBDModel): """ - 班组规则 + TN:班组规则 """ rule = models.JSONField('排班规则', default=list, blank=True) class Team(CommonBModel): - """班组, belong_dept为所属车间 + """TN:班组, belong_dept为所属车间 """ name = models.CharField('名称', max_length=50) leader = models.ForeignKey( @@ -134,7 +135,7 @@ class Team(CommonBModel): class Mgroup(CommonBModel): - """测点集 + """TN:测点集 """ M_SELF = 10 M_OTHER = 20 @@ -179,7 +180,7 @@ class TeamMember(BaseModel): class Goal(CommonADModel): - """目标 + """TN:目标 """ mgroup = models.ForeignKey( Mgroup, verbose_name='关联工段', on_delete=models.CASCADE, null=True, blank=True) @@ -206,7 +207,7 @@ class Goal(CommonADModel): class RoutePack(CommonADModel): """ - 加工工艺 + TN:加工工艺 """ RP_S_CREATE = 10 RP_S_AUDIT = 20 @@ -354,7 +355,7 @@ class RoutePack(CommonADModel): return list(self.get_gjson().keys()) class Route(CommonADModel): """ - 加工路线 + TN:加工路线 """ routepack = models.ForeignKey(RoutePack, verbose_name='关联路线包', on_delete=models.CASCADE, null=True, blank=True) material = models.ForeignKey( @@ -389,7 +390,7 @@ class Route(CommonADModel): @staticmethod def get_routes(material: Material=None, routepack:RoutePack=None, routeIds=None): """ - 返回工艺路线带车间(不关联工艺包) + TN:返回工艺路线带车间(不关联工艺包) """ if material: kwargs = {'material': material, 'routepack__isnull': True} @@ -410,7 +411,7 @@ class Route(CommonADModel): @classmethod def validate_dag(cls, final_material_out:Material, rqs): """ - 校验工艺路线是否正确: + TN:校验工艺路线是否正确: - 所有 Route 必须有 material_in 和 material_out - 所有路径最终指向给定的 final_material_out - 无循环依赖 @@ -519,5 +520,6 @@ class Route(CommonADModel): return {'nodes': nodes, 'edges': edges} class RouteMat(BaseModel): + """TN:工艺路线辅助物料""" route = models.ForeignKey(Route, verbose_name='关联路线', on_delete=models.CASCADE, related_name="routemat_route") material = models.ForeignKey(Material, verbose_name='辅助物料', on_delete=models.CASCADE) \ No newline at end of file diff --git a/apps/opm/models.py b/apps/opm/models.py index 76aab111..c35918ce 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -7,7 +7,7 @@ from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBDMo # Create your models here. class OplCate(CommonAModel): """ - 作业许可种类 + TN:作业许可种类 """ code = models.CharField('标识', max_length=10) name = models.CharField('名称', max_length=20) @@ -26,6 +26,7 @@ class OplCate(CommonAModel): class Operation(CommonBDModel): + """TN:作业表""" OP_CREATE = 10 OP_AUDIT = 20 OP_WAIT = 30 @@ -61,7 +62,7 @@ class Operation(CommonBDModel): class Opl(CommonBDModel): """ - 作业许可证 + TN:作业许可证 """ CLOSE_CHOICES1 = ( (10, '作业正常结束'), @@ -126,7 +127,7 @@ class Opl(CommonBDModel): class OplWorker(BaseModel): """ - 作业许可人员 + TN:作业许可人员 """ worker = models.ForeignKey('system.user', verbose_name='作业人员', on_delete=models.CASCADE, related_name='opl_worker') @@ -142,7 +143,7 @@ class OplWorker(BaseModel): class OplCert(BaseModel): """ - 作业许可人员证书 + TN:作业许可人员证书 """ opl_worker = models.ForeignKey(OplWorker, verbose_name='关联作业人员', on_delete=models.CASCADE) @@ -159,7 +160,7 @@ class OplCert(BaseModel): class GasCheck(CommonADModel): """ - 气体检测记录 + TN:气体检测记录 """ check_time = models.DateTimeField('检测时间') check_place = models.CharField('检测部位', max_length=100) diff --git a/apps/pm/models.py b/apps/pm/models.py index 56496c43..59e4a1fa 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -18,7 +18,7 @@ SCHEDULE_TYPE = ( class Utask(CommonBDModel): """ - 生产大任务 + TN:生产大任务 """ UTASK_CREATED = 10 UTASK_DECOMPOSE = 14 @@ -69,7 +69,7 @@ class Utask(CommonBDModel): class Mtask(CommonADModel): """ - 生产任务 + TN:生产任务 """ MTASK_CREATED = 10 MTASK_ASSGINED = 20 @@ -112,7 +112,7 @@ class Mtask(CommonADModel): @property def related(self): """ - 当天已下达的所有的兄弟小任务 + TN:当天已下达的所有的兄弟小任务 """ if self.utask: return Mtask.objects.filter( @@ -132,6 +132,7 @@ class Mtask(CommonADModel): class Mtaskb(BaseModel): + """TN:生产任务关联表""" mtask = models.ForeignKey(Mtask, verbose_name='关联任务', on_delete=models.CASCADE, related_name='b_mtask') handle_user = models.ForeignKey( 'system.user', verbose_name='操作人', on_delete=models.CASCADE, related_name='mtaskb_handle_user') diff --git a/apps/pum/models.py b/apps/pum/models.py index df42ab11..d27071c4 100644 --- a/apps/pum/models.py +++ b/apps/pum/models.py @@ -6,7 +6,7 @@ from apps.mtm.models import Material # Create your models here. class Supplier(CommonBModel): """ - 供应商 + TN:供应商 """ name = models.CharField('供应商名称', max_length=50) number= models.CharField('供应商编号', max_length=20, null=True, blank=True) @@ -18,7 +18,7 @@ class Supplier(CommonBModel): class PuPlan(CommonBModel): """ - 采购计划 + TN:采购计划 """ PUPLAN_CREATE = 10 PUPLAN_SUBMITED = 20 @@ -44,7 +44,7 @@ class PuPlan(CommonBModel): class PuOrder(CommonBModel): """ - 采购订单 + TN:采购订单 """ PUORDER_CREATE = 10 PUORDER_SUBMITED = 20 @@ -71,6 +71,7 @@ class PuOrder(CommonBModel): class PuOrderItem(BaseModel): + """TN:物料信息表""" material = models.ForeignKey( Material, verbose_name='物料', on_delete=models.CASCADE, related_name='pu_orderitem_material') count = models.PositiveIntegerField('所需数量', default=0) @@ -83,7 +84,7 @@ class PuOrderItem(BaseModel): class PuPlanItem(CommonBDModel): """ - 采购计划明细(因为各部门填写所以需要belong_dept字段) + TN:采购计划明细(因为各部门填写所以需要belong_dept字段) """ material = models.ForeignKey( Material, verbose_name='所需物料', on_delete=models.CASCADE) diff --git a/apps/qm/models.py b/apps/qm/models.py index 5abe5f40..65e40b00 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -10,7 +10,7 @@ from django.db.models import Sum from rest_framework.exceptions import ParseError class Defect(CommonAModel): - # 缺陷项 + """TN:缺陷项""" DEFECT_OK = 10 DEFECT_OK_B = 20 DEFECT_NOTOK = 30 @@ -27,7 +27,7 @@ class Defect(CommonAModel): class NotOkOption(models.TextChoices): - # 不合格项 + """TN:不合格项""" zw = "zw", _("炸纹") zt = "zt", _("炸头") tw = "tw", _("条纹") @@ -110,7 +110,7 @@ FTEST_TYPE_CHOICES = ( class TestItem(CommonAModel): """ - 检测项目 + TN:检测项目 """ T_TEST = 10 T_OPER = 20 @@ -149,6 +149,7 @@ QC_TRACE_CHOICES = ( ) class Qct(CommonAModel): + """TN:质检表""" name = models.CharField(max_length=50, verbose_name="名称") number = models.CharField(max_length=20, verbose_name="编号") tags = models.JSONField('检测类型', default=list, blank=True) # process/inm/default @@ -200,6 +201,7 @@ class Qct(CommonAModel): return qct_qs class QctTestItem(BaseModel): + """TN:质检模板检测项关系表""" qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qcttestitem") testitem = models.ForeignKey(TestItem, verbose_name="检测项", on_delete=models.CASCADE, null=True, blank=True) addto_wpr = models.BooleanField('加入WPR作为信息', default=False) @@ -207,6 +209,7 @@ class QctTestItem(BaseModel): sort = models.FloatField('排序', default=1) class QctDefect(BaseModel): + """TN:质检模板缺陷项关系表""" qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qctdefect") is_default = models.BooleanField('是否默认缺陷', default=False) defect = models.ForeignKey(Defect, verbose_name="缺陷项", on_delete=models.CASCADE) @@ -215,6 +218,7 @@ class QctDefect(BaseModel): sort = models.FloatField('排序', default=1) class QctMat(BaseModel): + """TN:质检模板物料关系表""" qct = models.ForeignKey(Qct, verbose_name="质检模板", on_delete=models.CASCADE, related_name="qctmat") material = models.ForeignKey(Material, verbose_name="物料", on_delete=models.CASCADE) tracing = models.CharField('追溯层级', default=QC_T, choices=QC_TRACE_CHOICES, @@ -224,7 +228,7 @@ class QctMat(BaseModel): class QuaStat(CommonBDModel): """ - 质量数据表 + TN:质量数据表 """ material = models.ForeignKey( Material, verbose_name='关联产物', on_delete=models.CASCADE) @@ -241,7 +245,7 @@ class QuaStat(CommonBDModel): class FtestWork(CommonBDModel): """ - 检验工作 + TN:检验工作 """ TYPE2_SOME = 10 TYPE2_ALL = 20 @@ -309,7 +313,7 @@ class FtestworkDefect(BaseModel): class Ftest(CommonBDModel): """ - 检验记录 + TN:检验记录 """ type = models.CharField('检验类型', max_length=20, choices=FTEST_TYPE_CHOICES) test_date = models.DateField('检验日期') @@ -367,7 +371,7 @@ class Ftest(CommonBDModel): class FtestItem(BaseModel): """ - 检测明细 + TN:检测明细 """ ftest = models.ForeignKey( Ftest, verbose_name='关联检验', on_delete=models.CASCADE) @@ -384,7 +388,7 @@ class FtestItem(BaseModel): class FtestDefect(BaseModel): """ - 缺陷明细 + TN:缺陷明细 """ ftest = models.ForeignKey( Ftest, verbose_name='关联检验', on_delete=models.CASCADE, related_name="defects_ftest") @@ -396,7 +400,7 @@ class FtestDefect(BaseModel): class Ptest(CommonAModel): """ - 性能测试记录 + TN:性能测试记录 """ PTEST_EQUIP_STATES = ( ('R', '正常'), diff --git a/apps/rpm/models.py b/apps/rpm/models.py index 231fb38d..62d65ba9 100644 --- a/apps/rpm/models.py +++ b/apps/rpm/models.py @@ -8,7 +8,7 @@ from apps.wf.models import Ticket # Create your models here. class Rparty(CommonBModel): """ - 相关方 + TN:相关方 """ dept = models.OneToOneField(Dept, verbose_name='关联部门', on_delete=models.CASCADE, @@ -25,7 +25,7 @@ class Rparty(CommonBModel): class BlackList(CommonBDModel): - """黑名单 + """TN:黑名单 """ name = models.CharField('名称', max_length=20) number = models.CharField('信用代码', max_length=50) @@ -34,7 +34,7 @@ class BlackList(CommonBDModel): class Rfile(CommonBDModel): """ - 相关方文件库 + TN:相关方文件库 """ file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类', on_delete=models.CASCADE, null=True, blank=True) @@ -44,7 +44,7 @@ class Rfile(CommonBDModel): class Rpj(CommonBDModel): """ - 相关方项目 + TN:相关方项目 """ RPJ_CREATE = 10 RPJ_AUDIT = 20 @@ -81,7 +81,7 @@ class Rpj(CommonBDModel): class Rpjfile(BaseModel): """ - 相关方项目文件库 + TN:相关方项目文件库 """ file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类', on_delete=models.CASCADE) @@ -91,7 +91,7 @@ class Rpjfile(BaseModel): class Remployee(CommonBModel): """ - 相关方成员 + TN:相关方成员 """ employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.SET_NULL, null=True, blank=True) @@ -106,7 +106,7 @@ class Remployee(CommonBModel): class Rcertificate(CommonBModel): """ - 相关方证书 + TN:相关方证书 """ certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书', on_delete=models.SET_NULL, @@ -124,7 +124,7 @@ class Rcertificate(CommonBModel): class Rpjmember(BaseModel): """ - 相关方项目成员 + TN:相关方项目成员 """ rpj = models.ForeignKey(Rpj, verbose_name='关联项目', on_delete=models.CASCADE) remployee = models.ForeignKey(Remployee, verbose_name='关联人员', @@ -137,7 +137,7 @@ class Rpjmember(BaseModel): class Rpjcertificate(BaseModel): """ - 相关方项目人员证书 + TN:相关方项目人员证书 """ rpj_member = models.ForeignKey(Rpjmember, verbose_name='关联项目成员', on_delete=models.CASCADE) rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.SET_NULL, @@ -152,7 +152,7 @@ class Rpjcertificate(BaseModel): class RpjLog(CommonADModel): - """项目变更日志 + """TN:项目变更日志 Args: BaseModel (_type_): _description_ diff --git a/apps/sam/models.py b/apps/sam/models.py index 0a7920fb..dc5c9bcb 100644 --- a/apps/sam/models.py +++ b/apps/sam/models.py @@ -7,7 +7,7 @@ from apps.mtm.models import Material class Customer(CommonBModel): """ - 客户信息 + TN:客户信息 """ name = models.CharField('客户名称', max_length=50, unique=True) address = models.CharField('详细地址', max_length=20, blank=True, null=True) @@ -26,7 +26,7 @@ class Customer(CommonBModel): class Contract(CommonBModel): """ - 合同信息 + TN:合同信息 """ name = models.CharField('合同名称', max_length=100) number = models.CharField('合同编号', max_length=100, unique=True) @@ -46,7 +46,7 @@ class Contract(CommonBModel): class Order(CommonBModel): """ - 订单信息 + TN:订单信息 """ ORDER_CREATE = 10 ORDER_SUBMITED = 20 @@ -77,7 +77,7 @@ class Order(CommonBModel): class OrderItem(BaseModel): """ - 订单明细 + TN:订单明细 """ order = models.ForeignKey( Order, verbose_name='关联订单', on_delete=models.CASCADE, related_name='item_order') diff --git a/apps/system/models.py b/apps/system/models.py index fbca42dd..8dcca519 100755 --- a/apps/system/models.py +++ b/apps/system/models.py @@ -15,7 +15,7 @@ class DataFilter(models.IntegerChoices): class Permission(ParentModel, BaseModel): """ - 功能权限:模块,页面,接口 + TN:功能权限:模块,页面,接口 """ PERM_TYPE_MODULE = 10 PERM_TYPE_PAGE = 20 @@ -49,7 +49,7 @@ class Permission(ParentModel, BaseModel): class Dept(ParentModel, CommonAModel): """ - 部门 + TN:部门 """ name = models.CharField('名称', max_length=60) type = models.CharField('类型', max_length=20, default='dept') @@ -66,7 +66,7 @@ class Dept(ParentModel, CommonAModel): class Role(CommonADModel): """ - 角色 + TN:角色 """ name = models.CharField('名称', max_length=32) code = models.CharField('角色标识', max_length=32, null=True, blank=True) @@ -85,7 +85,7 @@ class Role(CommonADModel): class Post(CommonADModel): """ - 职位/岗位 + TN:职位/岗位 """ name = models.CharField('名称', max_length=32) code = models.CharField('岗位标识', max_length=32, null=True, blank=True) @@ -118,7 +118,7 @@ class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager): class User(AbstractUser, CommonBModel): """ - 用户 + TN:用户 """ type = models.CharField('账号类型', max_length=10, default='employee') name = models.CharField('姓名', max_length=20, null=True, blank=True) @@ -158,7 +158,7 @@ class User(AbstractUser, CommonBModel): class UserPost(BaseModel): """ - 用户岗位关系表 + TN:用户岗位关系表 """ name = models.CharField('名称', max_length=20, null=True, blank=True) user = models.ForeignKey( @@ -178,7 +178,7 @@ class UserPost(BaseModel): class DictType(ParentModel, CommonAModel): """ - 数据字典类型 + TN:数据字典类型 """ name = models.CharField('名称', max_length=30) code = models.CharField('标识', max_length=30) @@ -194,7 +194,7 @@ class DictType(ParentModel, CommonAModel): class Dictionary(ParentModel, CommonAModel): """ - 数据字典 + TN:数据字典 """ name = models.CharField('名称', max_length=60) value = models.CharField('值', max_length=10, null=True, blank=True) @@ -217,7 +217,7 @@ class Dictionary(ParentModel, CommonAModel): class File(CommonAModel): """ - 文件存储表,业务表根据具体情况选择是否外键关联 + TN:文件存储表,业务表根据具体情况选择是否外键关联 """ FILE_TYPE_DOC = 10 FILE_TYPE_VIDEO = 20 diff --git a/apps/wf/models.py b/apps/wf/models.py index 5d7f2dc9..19a06f13 100755 --- a/apps/wf/models.py +++ b/apps/wf/models.py @@ -6,7 +6,7 @@ from apps.utils.models import BaseModel class Workflow(CommonAModel): """ - 工作流 + TN:工作流 """ name = models.CharField('名称', max_length=50) key = models.CharField('工作流标识', unique=True, max_length=20, null=True, blank=True) @@ -32,7 +32,7 @@ class Workflow(CommonAModel): class State(CommonAModel): """ - 状态记录 + TN:状态记录 """ STATE_TYPE_START = 1 STATE_TYPE_END = 2 @@ -118,7 +118,7 @@ class State(CommonAModel): class Transition(CommonAModel): """ - 工作流流转,定时器,条件(允许跳过), 条件流转与定时器不可同时存在 + TN:工作流流转,定时器,条件(允许跳过), 条件流转与定时器不可同时存在 """ TRANSITION_ATTRIBUTE_TYPE_ACCEPT = 1 # 同意 TRANSITION_ATTRIBUTE_TYPE_REFUSE = 2 # 拒绝 diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 85e042b4..82c39983 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -309,6 +309,7 @@ class Mlog(CommonADModel): return mlog_count_fields class MlogUser(BaseModel): + """TN: 子级生产/检验日志操作人""" mlog = models.ForeignKey(Mlog, verbose_name='关联日志', on_delete=models.CASCADE) handle_user = models.ForeignKey(User, verbose_name='操作人', on_delete=models.CASCADE) process = models.ForeignKey(Process, verbose_name='子工序', on_delete=models.CASCADE) @@ -424,6 +425,7 @@ class Mlogb(BaseModel): mlog.save(update_fields=["count_ok", "count_notok", "count_ok_full"]) class MlogbDefect(BaseModel): + """TN: 生成记录的缺陷记录""" mlogb = models.ForeignKey(Mlogb, verbose_name='生产记录', on_delete=models.CASCADE) defect = models.ForeignKey("qm.Defect", verbose_name='缺陷', on_delete=models.CASCADE, null=True, blank=True) count = models.DecimalField('数量', default=0, max_digits=11, decimal_places=1) diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index 6d106957..2c0df756 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -115,6 +115,7 @@ class Wpr(BaseModel): return WprDefect.objects.filter(wpr=self) class WprDefect(BaseModel): + """TN:产物缺陷项关联表""" wpr = models.ForeignKey(Wpr, verbose_name="关联产物", on_delete=models.CASCADE) defect = models.ForeignKey("qm.defect", verbose_name="关联缺陷项", on_delete=models.CASCADE) is_main = models.BooleanField("是否主要缺陷", default=False) \ No newline at end of file