| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | from django.db import modelsfrom decimal import Decimalclass StockshelfModel(models.Model):    warehouse_code = models.CharField(max_length=255, verbose_name="Warehouse code")    warehouse_name = models.CharField(max_length=255, verbose_name="Warehouse Name")    shelf_name = models.CharField(max_length=255, verbose_name="Shelf Name")    shelf_type = models.CharField(max_length=255,default = 'storage', verbose_name="Shelf Type")    row = models.IntegerField(verbose_name="Row")        # 位置的行号    col = models.IntegerField(verbose_name="Column")     # 位置的列号    layer = models.IntegerField(verbose_name="Layer")    # 位置的层号    ip_address = models.CharField(max_length=255, default = '127.0.0.1',verbose_name="IP Address")    port = models.IntegerField(default = 8000, verbose_name="Port")    status = models.CharField(max_length=255, default = 'offline',verbose_name="Status")    # openid = models.CharField(max_length=255, verbose_name="Openid")    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")    empty_label = models.BooleanField(default=True, verbose_name="Empty Flag")    shelf_department = models.CharField(max_length=255, default = '货架部门', verbose_name="Shelf Department")    shelf_status = models.CharField(max_length=255, default = '未满', verbose_name="Shelf Status")    goods_code = models.CharField(max_length=255,default = 'A010203', verbose_name="Goods Code")    goods_name = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Name")    goods_std = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Standard")    goods_desc = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Description")    goods_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'), verbose_name="Goods Quantity")    goods_unit = models.CharField(max_length=255,default = '件', verbose_name="Goods Unit")    goods_price = models.DecimalField(max_digits=10, default=0,decimal_places=2, verbose_name="Goods Price")    goods_batch = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Batch")    goods_notes = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Notes")    goods_in = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name="Goods In")    goods_out = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'), verbose_name="Goods Out")    class Meta:        db_table = 'shelflist'        verbose_name = 'Shelf List'        verbose_name_plural = "Shelf List"        ordering = ['-id']        unique_together = ('shelf_name', 'warehouse_code','row', 'col', 'layer')  # 防止重复坐标        def save(self, *args, **kwargs):        """自动更新 empty_label 状态"""        self.empty_label = (self.goods_qty == 0)        super().save(*args, **kwargs)        @classmethod    def get_existing_positions(cls, warehouse_code,shelf_name, rows, cols, layers):        """获取已存在的坐标集合"""        return set(            cls.objects.filter(                warehouse_code=warehouse_code,                shelf_name=shelf_name,                row__lte=rows,                col__lte=cols,                layer__lte=layers            ).values_list('row', 'col', 'layer')        )
 |