diff --git a/apps/inm/services_daoru.py b/apps/inm/services_daoru.py index 3f3f59c1..f4ea563a 100644 --- a/apps/inm/services_daoru.py +++ b/apps/inm/services_daoru.py @@ -1,6 +1,6 @@ from rest_framework.exceptions import ParseError from apps.mtm.models import Process, Material -from apps.inm.models import WareHouse, MaterialBatch, MIOItem, MIOItemw +from apps.inm.models import WareHouse, MaterialBatch, MIOItem, MIOItemw, MIO from apps.utils.tools import ranstr from apps.mtm.services_2 import cal_material_count @@ -123,4 +123,35 @@ def daoru_mioitem_test(path:str, mioitem:MIOItem): ftestitems.append(FtestItem(ftest=ftest, testitem=t_list[6], test_val_json=sheet[f"k{i}"].value, test_user=test_user, id=idWorker.get_id())) FtestItem.objects.bulk_create(ftestitems) else: - break \ No newline at end of file + break + + +def daoru_mioitems(path:str, mio:MIO): + from apps.utils.snowflake import idWorker + from openpyxl import load_workbook + + wb = load_workbook(path, data_only=True) + if "Sheet1" in wb.sheetnames: # 检查是否存在 + sheet = wb["Sheet1"] # 获取工作表 + else: + raise ParseError("未找到Sheet1") + + mioitems = [] + ind = 2 + while sheet[f"b{ind}"].value: + batch = sheet[f"b{ind}"].value + material_number = sheet[f"a{ind}"].value + try: + material = Material.objects.get(number=material_number) + except Exception as e: + raise ParseError(f"未找到物料:{material_number} {e}") + count = sheet[f"c{ind}"].value + warehouse_name = sheet[f"d{ind}"].value + try: + warehouse = WareHouse.objects.get(name=warehouse_name) + except Exception as e: + raise ParseError(f"未找到仓库:{warehouse_name} {e}") + mioitems.append(MIOItem(mio=mio, warehouse=warehouse, material=material, batch=batch, count=count, id=idWorker.get_id())) + ind = ind + 1 + + MIOItem.objects.bulk_create(mioitems) \ No newline at end of file diff --git a/apps/inm/views.py b/apps/inm/views.py index 3300dccc..2fc2fe18 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -18,7 +18,7 @@ from apps.inm.serializers import ( from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService -from apps.inm.services_daoru import daoru_mb, daoru_mioitem_test +from apps.inm.services_daoru import daoru_mb, daoru_mioitem_test, daoru_mioitems as d_mioitems from apps.utils.mixins import (BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin, CustomListModelMixin) from apps.utils.permission import has_perm @@ -262,6 +262,14 @@ class MIOViewSet(CustomModelViewSet): mioitem.save(update_fields=['pack_index', 'update_time']) return Response() + @action(methods=['post'], detail=True, perms_map={'post': 'mio.update'}, serializer_class=serializers.Serializer) + def daoru_mioitems(self, request, *args, **kwargs): + """导入明细 + + 导入明细 + """ + d_mioitems(settings.BASE_DIR + request.data.get('path', '')) + return Response() class PackViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): """ list: 装箱记录 diff --git a/media/default/template/出入库明细.xlsx b/media/default/template/出入库明细.xlsx new file mode 100644 index 00000000..f7e526e6 Binary files /dev/null and b/media/default/template/出入库明细.xlsx differ