feat: 导入出入库明细

This commit is contained in:
caoqianming 2025-08-18 11:04:24 +08:00
parent 7f619a36b0
commit ee9fce675d
3 changed files with 42 additions and 3 deletions

View File

@ -1,6 +1,6 @@
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from apps.mtm.models import Process, Material 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.utils.tools import ranstr
from apps.mtm.services_2 import cal_material_count from apps.mtm.services_2 import cal_material_count
@ -124,3 +124,34 @@ def daoru_mioitem_test(path:str, mioitem:MIOItem):
FtestItem.objects.bulk_create(ftestitems) FtestItem.objects.bulk_create(ftestitems)
else: else:
break 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)

View File

@ -18,7 +18,7 @@ from apps.inm.serializers import (
from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.inm.services import InmService 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, from apps.utils.mixins import (BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin,
CustomListModelMixin) CustomListModelMixin)
from apps.utils.permission import has_perm from apps.utils.permission import has_perm
@ -262,6 +262,14 @@ class MIOViewSet(CustomModelViewSet):
mioitem.save(update_fields=['pack_index', 'update_time']) mioitem.save(update_fields=['pack_index', 'update_time'])
return Response() 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): class PackViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet):
""" """
list: 装箱记录 list: 装箱记录

Binary file not shown.