From 43d5c8b6b2a36f8bcd5c7387b27a50fb3d5851a0 Mon Sep 17 00:00:00 2001 From: colaftc Date: Fri, 30 Jan 2026 19:44:30 +0800 Subject: [PATCH] feat: added prefix to human_id --- api_v1/tests.py | 12 ++++++------ business/models.py | 16 ++++++++-------- business/tests.py | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/api_v1/tests.py b/api_v1/tests.py index 3698291..db71be6 100644 --- a/api_v1/tests.py +++ b/api_v1/tests.py @@ -224,7 +224,7 @@ class PurchaseOrderAPITestCase(TestCase): self.assertEqual(response.data['status'], 1) self.assertIn('等待审批', response.data['message']) order = business_models.PurchaseOrder.objects.get(id=response.data['id']) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"CG{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) mock_delay.assert_not_called() @@ -246,7 +246,7 @@ class PurchaseOrderAPITestCase(TestCase): self.assertIn('human_id', response.data) self.assertEqual(response.data['status'], 1) order = business_models.PurchaseOrder.objects.get(id=response.data['id']) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"CG{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) mock_delay.assert_not_called() @@ -444,7 +444,7 @@ class SalesOrderAPITestCase(TestCase): self.assertIn('id', response.data) self.assertIn('human_id', response.data) order = business_models.SalesOrder.objects.get(id=response.data['id']) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"XS{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) self.assertEqual(response.data['status'], business_models.SalesOrderStatusEnum.PENDING) mock_delay.assert_not_called() @@ -504,7 +504,7 @@ class SalesOrderAPITestCase(TestCase): self.assertEqual(response.data['id'], order_id) self.assertIn('human_id', response.data) order = business_models.SalesOrder.objects.get(id=order_id) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"XS{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) def test_update_sales_order_rejects_non_pending(self): @@ -663,7 +663,7 @@ class PurchaseReturnOrderAPITestCase(TestCase): self.assertIn('human_id', response.data) self.assertEqual(response.data['status'], business_models.PurchaseReturnStatusEnum.PENDING) order = business_models.PurchaseReturnOrder.objects.get(id=response.data['id']) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"CT{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) def test_create_purchase_return_requires_consume_ids_in_strict_out(self): @@ -817,7 +817,7 @@ class SalesReturnOrderAPITestCase(TestCase): self.assertIn('human_id', response.data) self.assertEqual(response.data['status'], business_models.SalesReturnStatusEnum.PENDING) order = business_models.SalesReturnOrder.objects.get(id=response.data['id']) - expected_human_id = f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}" + expected_human_id = f"XT{order.created_at.strftime('%Y%m%d')}{order.id:06d}" self.assertEqual(response.data['human_id'], expected_human_id) def test_create_sales_return_order_invalid_customer(self): diff --git a/business/models.py b/business/models.py index 309efc7..4cca64a 100644 --- a/business/models.py +++ b/business/models.py @@ -138,11 +138,11 @@ class PurchaseOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCounte """ 人类可读编号(虚拟编号,不落库)。 - 规则与 printing.PrintingOrder.human_id / SalesOrder.human_id 保持一致:YYYYMMDD{6位id} + 规则与 SalesOrder.human_id 保持一致:CG + YYYYMMDD{6位id} """ if self.id is None or self.created_at is None: return "" - return f"{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" + return f"CG{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" class Meta: verbose_name = '采购单' @@ -275,11 +275,11 @@ class SalesOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCounterpa """ 人类可读编号(虚拟编号,不落库)。 - 规则与 printing.PrintingOrder.human_id 保持一致:YYYYMMDD{6位id} + 规则:XS + YYYYMMDD{6位id} """ if self.id is None or self.created_at is None: return "" - return f"{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" + return f"XS{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" class Meta: verbose_name = '销售单' @@ -422,11 +422,11 @@ class PurchaseReturnOrder(OrderItemsAggregationMixin, OrderDirectionMixin, Order """ 人类可读编号(虚拟编号,不落库)。 - 规则与 printing.PrintingOrder.human_id / SalesOrder.human_id 保持一致:YYYYMMDD{6位id} + 规则与 SalesOrder.human_id 保持一致:CT + YYYYMMDD{6位id} """ if self.id is None or self.created_at is None: return "" - return f"{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" + return f"CT{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" def get_direction(self) -> int: return -1 @@ -547,11 +547,11 @@ class SalesReturnOrder(OrderItemsAggregationMixin, OrderDirectionMixin, OrderCou """ 人类可读编号(虚拟编号,不落库)。 - 规则与 printing.PrintingOrder.human_id / SalesOrder.human_id 保持一致:YYYYMMDD{6位id} + 规则与 SalesOrder.human_id 保持一致:XT + YYYYMMDD{6位id} """ if self.id is None or self.created_at is None: return "" - return f"{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" + return f"XT{self.created_at.year}{self.created_at.month:02d}{self.created_at.day:02d}{self.id:06d}" def get_direction(self) -> int: return 1 diff --git a/business/tests.py b/business/tests.py index ed369e9..f363951 100644 --- a/business/tests.py +++ b/business/tests.py @@ -163,7 +163,7 @@ class PurchaseOrderServiceTestCase(TestCase): self.assertIsNotNone(purchase_order.human_id) self.assertEqual( purchase_order.human_id, - f"{purchase_order.created_at.strftime('%Y%m%d')}{purchase_order.id:06d}", + f"CG{purchase_order.created_at.strftime('%Y%m%d')}{purchase_order.id:06d}", ) def test_review_purchase_order_approval_triggers_task(self): @@ -420,7 +420,7 @@ class SalesOrderServiceTestCase(TestCase): self.assertTrue(len(sales_order.human_id) >= 14) self.assertEqual( sales_order.human_id, - f"{sales_order.created_at.strftime('%Y%m%d')}{sales_order.id:06d}", + f"XS{sales_order.created_at.strftime('%Y%m%d')}{sales_order.id:06d}", ) def test_review_sales_order_triggers_task(self): @@ -634,7 +634,7 @@ class PurchaseReturnServiceTestCase(TestCase): self.assertIsNotNone(order.human_id) self.assertEqual( order.human_id, - f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}", + f"CT{order.created_at.strftime('%Y%m%d')}{order.id:06d}", ) def test_review_purchase_return_order_triggers_task_and_balance(self): @@ -789,7 +789,7 @@ class SalesReturnServiceTestCase(TestCase): self.assertIsNotNone(order.human_id) self.assertEqual( order.human_id, - f"{order.created_at.strftime('%Y%m%d')}{order.id:06d}", + f"XT{order.created_at.strftime('%Y%m%d')}{order.id:06d}", ) def test_review_sales_return_order_updates_balance(self):