from django.db import models from apps.utils.models import CommonBDModel, BaseModel, CommonADModel, CommonAModel, CommonBModel class Product(CommonAModel): """ 产品 """ name = models.CharField('名称', max_length=50) code = models.CharField('编号', max_length=50, null=True, blank=True) class Meta: verbose_name = '产品' class Shift(CommonAModel): """班次 """ name = models.CharField('名称', max_length=50) start_time_o = models.TimeField('开始时间') end_time_o = models.TimeField('结束时间') class Meta: verbose_name = '班次' class Mgroup(CommonBModel): """测点集 """ name = models.CharField('名称', max_length=50) cate = models.CharField('分类', max_length=50, default='section') # section是工段 class Meta: verbose_name = '测点集' class Team(CommonBModel): """班组 """ name = models.CharField('名称', max_length=50) leader = models.ForeignKey('system.user', verbose_name='班长', on_delete=models.CASCADE) class Mpoint(CommonBDModel): """测点 """ name = models.CharField('测点名称', max_length=50) code = models.CharField('测点编号', max_length=50, unique=True) unit = models.CharField('单位', max_length=50) cate = models.CharField('分类', max_length=50, default='elec') ep_monitored = models.ForeignKey('em.equipment', verbose_name='监测哪个设备', related_name='mp_ep_monitored', on_delete=models.SET_NULL, null=True, blank=True) ep_belong = models.ForeignKey('em.equipment', verbose_name='属于哪个设备', related_name='mp_ep_belong', on_delete=models.SET_NULL, null=True, blank=True) mgroup = models.ForeignKey('enm.mgroup', verbose_name='所在集合', on_delete=models.SET_NULL, null=True, blank=True) class MpLog(BaseModel): """测点原始记录 """ mpoint = models.ForeignKey(Mpoint, verbose_name='关联测点', on_delete=models.SET_NULL, null=True, blank=True) tag_id = models.BigIntegerField('记录ID', db_index=True) tag_code = models.CharField('测点编号', max_length=50) tag_update = models.DateTimeField('更新时间') tag_val = models.FloatField('当前值') class StLog(CommonADModel): """ 停机记录 """ mgroup = models.ForeignKey(Mgroup, verbose_name='关联工段', on_delete=models.CASCADE) start_time = models.DateTimeField('停机开始') end_time = models.DateTimeField('停机结束', null=True, blank=True) duration = models.FloatField('停机时长(h)', null=True, blank=True) class SfLog(CommonADModel): """值班记录 """ mgroup = models.ForeignKey(Mgroup, verbose_name='关联工段', on_delete=models.CASCADE) team = models.ForeignKey(Team, verbose_name='班组', on_delete=models.CASCADE) shift = models.ForeignKey(Shift, verbose_name='当班班次', on_delete=models.CASCADE) leader = models.ForeignKey('system.user', verbose_name='班长', on_delete=models.CASCADE) start_time = models.DateTimeField('值班开始') end_time = models.DateTimeField('值班结束') note = models.TextField('生产情况记录', null=True, blank=True) stlogs = models.ManyToManyField('enm.stlog', verbose_name='关联停机记录', through='enm.stsflog') class StSfLog(BaseModel): """ 停机-值班记录关联表 """ stlog = models.ForeignKey(StLog, verbose_name='关联停机记录', on_delete=models.CASCADE) sflog = models.ForeignKey(SfLog, verbose_name='关联值班记录', on_delete=models.CASCADE) is_current_down = models.BooleanField('是否本班停机', default=False) reason = models.TextField('停机原因', null=True, blank=True) class Meta: ordering = ['sflog__start_time'] class HourStat(BaseModel): """小时统计表 """ year = models.PositiveSmallIntegerField('年') month = models.PositiveSmallIntegerField('月') day = models.PositiveSmallIntegerField('日') hour = models.PositiveSmallIntegerField('时') mpoint = models.ForeignKey(Mpoint, verbose_name='关联测点', on_delete=models.CASCADE) val = models.FloatField('统计值', default=0) is_calculated = models.BooleanField('是否计算过', default=False) class Goal(CommonADModel): """目标 """ mgroup = models.ForeignKey(Mgroup, verbose_name='关联工段', on_delete=models.CASCADE, null=True, blank=True) product = models.ForeignKey(Product, verbose_name='关联产品', on_delete=models.CASCADE, null=True, blank=True) team = models.ForeignKey(Team, verbose_name='关联班组', on_delete=models.CASCADE, null=True, blank=True) year = models.PositiveSmallIntegerField('年') goal_name = models.CharField('目标名称', max_length=50, help_text='总产量/台时产量/单位产品分布电耗/') goal_val = models.FloatField('全年目标值') goal_val_1 = models.FloatField('1月份目标值') goal_val_2 = models.FloatField('2月份目标值') goal_val_3 = models.FloatField('3月份目标值') goal_val_4 = models.FloatField('4月份目标值') goal_val_5 = models.FloatField('5月份目标值') goal_val_6 = models.FloatField('6月份目标值') goal_val_7 = models.FloatField('7月份目标值') goal_val_8 = models.FloatField('8月份目标值') goal_val_9 = models.FloatField('9月份目标值') goal_val_10 = models.FloatField('10月份目标值') goal_val_11 = models.FloatField('11月份目标值') goal_val_12 = models.FloatField('12月份目标值')