feat: 添加batchst路由

This commit is contained in:
caoqianming 2024-12-02 13:39:43 +08:00
parent c3bd32ee68
commit 17697d6482
4 changed files with 59 additions and 21 deletions

View File

@ -5,7 +5,7 @@ from rest_framework.exceptions import ValidationError, ParseError
from datetime import datetime from datetime import datetime
from .models import (SfLog, StLog, SfLogExp, WMaterial, Mlog, from .models import (SfLog, StLog, SfLogExp, WMaterial, Mlog,
Handover, Handoverb, Mlogb, AttLog, OtherLog, Fmlog) Handover, Handoverb, Mlogb, AttLog, OtherLog, Fmlog, BatchSt)
from apps.system.models import Dept, User from apps.system.models import Dept, User
from apps.system.serializers import UserSimpleSerializer from apps.system.serializers import UserSimpleSerializer
from apps.pm.models import Mtask, Mtaskb from apps.pm.models import Mtask, Mtaskb
@ -811,4 +811,10 @@ class FmlogUpdateSerializer(CustomModelSerializer):
class MlogTCreateSerializer(CustomModelSerializer): class MlogTCreateSerializer(CustomModelSerializer):
pass pass
class BatchStSerializer(CustomModelSerializer):
class Meta:
model = BatchSt
fields = "__all__"

View File

@ -1,9 +1,18 @@
from apps.wpm.models import Mlog from apps.wpm.models import Mlog, BatchSt
from apps.mtm.models import Material, Mgroup from apps.mtm.models import Mgroup
from apps.system.models import Dept from apps.system.models import Dept
from apps.inm.models import MIOItem from apps.inm.models import MIOItem
from apps.qm.models import FtestWork from apps.qm.models import FtestWork
def get_alldata_with_batch_and_store(batch: str):
"""
获取某个批次某个仓库的整体生产数据并保存
"""
data = get_alldata_with_batch(batch)
bobj, _ = BatchSt.objects.get_or_create(batch=batch)
bobj.data = data
bobj.save()
def get_alldata_with_batch(batch: str): def get_alldata_with_batch(batch: str):
""" """
获取某个批次的整体生产数据 获取某个批次的整体生产数据
@ -23,8 +32,10 @@ def get_alldata_with_batch(batch: str):
data["棒料成型-备注"] = "" data["棒料成型-备注"] = ""
for item in mlogs_blcx_qs: for item in mlogs_blcx_qs:
data["产品规格"].append(item.material_out) # 对象 data["产品规格"].append(item.material_out) # 对象
data["棒料成型-出料人"].append(item.handle_user) # 对象 if item.handle_user:
data["棒料成型-切料人"].append(item.handle_user_2) # 对象 data["棒料成型-出料人"].append(item.handle_user) # 对象
if item.handle_user_2:
data["棒料成型-切料人"].append(item.handle_user_2) # 对象
if item.note: if item.note:
data["棒料成型-备注"] = ";".join([data["棒料成型-备注"], item.note]) data["棒料成型-备注"] = ";".join([data["棒料成型-备注"], item.note])
for field in mlog_count_fields: for field in mlog_count_fields:
@ -51,14 +62,16 @@ def get_alldata_with_batch(batch: str):
data["7车间入库-仓库执行人"] = [] data["7车间入库-仓库执行人"] = []
for item in mioitem_qs: for item in mioitem_qs:
data["7车间入库-日期"].append(item.mio.inout_date) data["7车间入库-日期"].append(item.mio.inout_date)
data["7车间入库-车间执行人"].append(item.mio.mio_user) if item.mio.mio_user:
data["7车间入库-仓库执行人"].append(item.mio.do_user) data["7车间入库-车间执行人"].append(item.mio.mio_user)
if item.mio.do_user:
data["7车间入库-仓库执行人"].append(item.mio.do_user)
for field in mioitem_count_fields: for field in mioitem_count_fields:
if getattr(item, field) > 0: if getattr(item, field) > 0:
if f'7车间入库-{field}' not in data: if f'7车间入库-{field}' not in data:
data[f'7车间入库-{field}'] = getattr(item, field) data[f'7车间入库-{field}'] = int(getattr(item, field))
else: else:
data[f'7车间入库-{field}'] += getattr(item, field) data[f'7车间入库-{field}'] += int(getattr(item, field))
data["7车间入库-合格率"] = round((data["7车间入库-count"] - data["7车间入库-count_notok"]) * 100/ data["7车间入库-count"], 1) data["7车间入库-合格率"] = round((data["7车间入库-count"] - data["7车间入库-count_notok"]) * 100/ data["7车间入库-count"], 1)
data["7车间入库-日期"] = list(set(data["7车间入库-日期"])) data["7车间入库-日期"] = list(set(data["7车间入库-日期"]))
data["7车间入库-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["7车间入库-日期"]]) data["7车间入库-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["7车间入库-日期"]])
@ -78,9 +91,9 @@ def get_alldata_with_batch(batch: str):
for field in mioitem_count_fields: for field in mioitem_count_fields:
if getattr(item, field) > 0: if getattr(item, field) > 0:
if f'6车间生产领料-{field}' not in data: if f'6车间生产领料-{field}' not in data:
data[f'6车间生产领料-{field}'] = getattr(item, field) data[f'6车间生产领料-{field}'] = int(getattr(item, field))
else: else:
data[f'6车间生产领料-{field}'] += getattr(item, field) data[f'6车间生产领料-{field}'] += int(getattr(item, field))
data["6车间生产领料-日期"] = list(set(data["6车间生产领料-日期"])) data["6车间生产领料-日期"] = list(set(data["6车间生产领料-日期"]))
data["6车间生产领料-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["6车间生产领料-日期"]]) data["6车间生产领料-日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["6车间生产领料-日期"]])
@ -93,8 +106,10 @@ def get_alldata_with_batch(batch: str):
data[f'6车间-{mgroup_name}-日期'] = [] data[f'6车间-{mgroup_name}-日期'] = []
data[f'6车间-{mgroup_name}-操作人'] = [] data[f'6车间-{mgroup_name}-操作人'] = []
for item in mlogs_qs: for item in mlogs_qs:
data[f'6车间-{mgroup_name}-日期'].append(item.handle_date) if item.handle_date:
data[f'6车间-{mgroup_name}-操作人'].append(item.handle_user) data[f'6车间-{mgroup_name}-日期'].append(item.handle_date)
if item.handle_user:
data[f'6车间-{mgroup_name}-操作人'].append(item.handle_user)
for field in mlog_count_fields: for field in mlog_count_fields:
if getattr(item, field) > 0: if getattr(item, field) > 0:
if f'6车间-{mgroup_name}-{field}' not in data: if f'6车间-{mgroup_name}-{field}' not in data:
@ -131,8 +146,10 @@ def get_alldata_with_batch(batch: str):
data["成品检验-日期"] = [] data["成品检验-日期"] = []
data['成品检验-检验人'] = [] data['成品检验-检验人'] = []
for item in ftestwork_qs: for item in ftestwork_qs:
data["成品检验-日期"].append(item.test_date) if item.test_date:
data['成品检验-检验人'].append(item.test_user) data["成品检验-日期"].append(item.test_date)
if item.test_user:
data['成品检验-检验人'].append(item.test_user)
for field in ftestwork_count_fields: for field in ftestwork_count_fields:
if field == 'count_notok_json': if field == 'count_notok_json':
for k, v in getattr(item, field).items(): for k, v in getattr(item, field).items():

View File

@ -4,7 +4,7 @@ from rest_framework.routers import DefaultRouter
from apps.wpm.views import (SfLogViewSet, StLogViewSet, SfLogExpViewSet, from apps.wpm.views import (SfLogViewSet, StLogViewSet, SfLogExpViewSet,
WMaterialViewSet, MlogViewSet, HandoverViewSet, WMaterialViewSet, MlogViewSet, HandoverViewSet,
AttlogViewSet, OtherLogViewSet, MlogbViewSet, MlogbInViewSet, AttlogViewSet, OtherLogViewSet, MlogbViewSet, MlogbInViewSet,
MlogbOutViewSet, FmlogViewSet) MlogbOutViewSet, FmlogViewSet, BatchStViewSet)
from apps.wpm.datax import AnaViewSet from apps.wpm.datax import AnaViewSet
@ -25,6 +25,7 @@ router.register('handover', HandoverViewSet, basename='handover')
router.register('attlog', AttlogViewSet, basename='attlog') router.register('attlog', AttlogViewSet, basename='attlog')
router.register('otherlog', OtherLogViewSet, basename='otherlog') router.register('otherlog', OtherLogViewSet, basename='otherlog')
router.register('ana', AnaViewSet, basename='ana') router.register('ana', AnaViewSet, basename='ana')
router.register('batchst', BatchStViewSet, basename='batchst')
urlpatterns = [ urlpatterns = [
path(API_BASE_URL, include(router.urls)), path(API_BASE_URL, include(router.urls)),

View File

@ -13,16 +13,15 @@ from apps.system.models import User
from apps.mtm.models import Material, Process from apps.mtm.models import Material, Process
from apps.pm.models import Mtask from apps.pm.models import Mtask
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.utils.mixins import BulkCreateModelMixin
from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog, Fmlog from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog, Fmlog, BatchSt
from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer, from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, HandoverUpdateSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, HandoverUpdateSerializer,
GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer, GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer,
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer, AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer, MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer,
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer) MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer)
from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog
from apps.utils.thread import MyThread from apps.utils.thread import MyThread
from apps.monitor.services import create_auditlog, delete_auditlog from apps.monitor.services import create_auditlog, delete_auditlog
@ -510,4 +509,19 @@ class FmlogViewSet(CustomModelViewSet):
ins = self.get_object() ins = self.get_object()
if Mlog.objects.filter(fmlog=ins).exists(): if Mlog.objects.filter(fmlog=ins).exists():
raise ParseError('因存在二级日志不可删除') raise ParseError('因存在二级日志不可删除')
return super().destroy(request, *args, **kwargs) return super().destroy(request, *args, **kwargs)
class BatchStViewSet(ListModelMixin, CustomGenericViewSet):
"""
list: 批次统计数据
批次统计数据
"""
perms_map = {"get": "*"}
queryset = BatchSt.objects.all()
serializer_class = BatchStSerializer
filterset_fields = {
"batch": ["exact", "contains"],
"update_time": ["exact", "gte", "lte"]
}