feat: cal_material_count 重构
This commit is contained in:
parent
511b149290
commit
92903e7014
|
@ -7,29 +7,19 @@ from apps.mtm.models import Material, Process
|
|||
from apps.utils.tools import ranstr
|
||||
from apps.system.models import Dept
|
||||
from apps.utils.thread import MyThread
|
||||
from apps.mtm.services import cal_material_count
|
||||
|
||||
def cal_material_count(materialId_list: list = []):
|
||||
"""
|
||||
计算物料总数量
|
||||
"""
|
||||
from apps.inm.models import MaterialBatch
|
||||
from apps.wpm.models import WMaterial
|
||||
if materialId_list:
|
||||
objs = Material.objects.filter(id__in=set(materialId_list))
|
||||
else:
|
||||
objs = Material.objects.all()
|
||||
for material in objs:
|
||||
mb_count = MaterialBatch.objects.filter(material=material).aggregate(total=Sum("count"))["total"]
|
||||
wm_count = WMaterial.objects.filter(material=material).aggregate(total=Sum("count"))["total"]
|
||||
if mb_count is None:
|
||||
mb_count = 0
|
||||
if wm_count is None:
|
||||
wm_count = 0
|
||||
Material.objects.filter(id=material.id).update(
|
||||
count_wm=wm_count,
|
||||
count_mb=mb_count,
|
||||
count=mb_count + wm_count)
|
||||
class InmService:
|
||||
|
||||
@classmethod
|
||||
def update_material_count(cls, instance: MIO):
|
||||
"""
|
||||
更新物料数量
|
||||
"""
|
||||
# 统计物料数量
|
||||
m_ids = MIOItem.objects.filter(mio=instance).values_list('material_id', flat=True)
|
||||
MyThread(target=cal_material_count, args=(m_ids, ), daemon=True, log_err=True).start()
|
||||
|
||||
@classmethod
|
||||
def update_inm(cls, instance: MIO, is_reverse: bool = False):
|
||||
"""
|
||||
|
@ -65,10 +55,6 @@ class InmService:
|
|||
do_out(instance)
|
||||
else:
|
||||
raise ParseError('不支持该出入库操作')
|
||||
|
||||
# 统计物料数量
|
||||
m_ids = MIOItem.objects.filter(mio=instance).values_list('material_id', flat=True)
|
||||
MyThread(target=cal_material_count, args=(m_ids, ), daemon=True, log_err=True).start()
|
||||
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -169,7 +169,6 @@ class MIOViewSet(CustomModelViewSet):
|
|||
return super().perform_destroy(instance)
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post': 'mio.submit'}, serializer_class=serializers.Serializer)
|
||||
@transaction.atomic
|
||||
def submit(self, request, *args, **kwargs):
|
||||
"""提交
|
||||
|
||||
|
@ -180,15 +179,17 @@ class MIOViewSet(CustomModelViewSet):
|
|||
raise ParseError('出入库日期未填写')
|
||||
if ins.state != MIO.MIO_CREATE:
|
||||
raise ParseError('记录状态异常')
|
||||
ins.submit_time = timezone.now()
|
||||
ins.state = MIO.MIO_SUBMITED
|
||||
ins.submit_user = request.user
|
||||
ins.save()
|
||||
InmService.update_inm(ins)
|
||||
with transaction.atomic():
|
||||
ins.submit_time = timezone.now()
|
||||
ins.state = MIO.MIO_SUBMITED
|
||||
ins.submit_user = request.user
|
||||
ins.update_by = request.user
|
||||
ins.save()
|
||||
InmService.update_inm(ins)
|
||||
InmService.update_material_count(ins)
|
||||
return Response(MIOListSerializer(instance=ins).data)
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post': 'mio.submit'}, serializer_class=serializers.Serializer)
|
||||
@transaction.atomic
|
||||
def revert(self, request, *args, **kwargs):
|
||||
"""撤回
|
||||
|
||||
|
@ -200,10 +201,13 @@ class MIOViewSet(CustomModelViewSet):
|
|||
raise ParseError('记录状态异常')
|
||||
if ins.submit_user != user:
|
||||
raise ParseError('非提交人不可撤回')
|
||||
ins.submit_time = None
|
||||
ins.state = MIO.MIO_CREATE
|
||||
ins.save()
|
||||
InmService.update_inm(ins, is_reverse=True)
|
||||
with transaction.atomic():
|
||||
ins.submit_time = None
|
||||
ins.state = MIO.MIO_CREATE
|
||||
ins.update_by = user
|
||||
ins.save()
|
||||
InmService.update_inm(ins, is_reverse=True)
|
||||
InmService.update_material_count(ins)
|
||||
return Response()
|
||||
|
||||
|
||||
|
|
|
@ -132,6 +132,7 @@ class ProcessSerializer(CustomModelSerializer):
|
|||
class RoutePackSerializer(CustomModelSerializer):
|
||||
material_name = serializers.StringRelatedField(
|
||||
source='material', read_only=True)
|
||||
create_by_name = serializers.CharField(source='create_by.name', read_only=True)
|
||||
ticket_ = TicketSimpleSerializer(source='ticket', read_only=True)
|
||||
class Meta:
|
||||
model = RoutePack
|
||||
|
|
|
@ -9,7 +9,29 @@ from apps.wpm.models import StLog
|
|||
from apps.wpm.services import get_sflog
|
||||
from apps.wpm.tasks import cal_exp_duration_sec
|
||||
from apps.wf.models import Ticket
|
||||
from django.db.models import Sum
|
||||
|
||||
def cal_material_count(materialId_list: list = []):
|
||||
"""
|
||||
计算物料总数量
|
||||
"""
|
||||
from apps.inm.models import MaterialBatch
|
||||
from apps.wpm.models import WMaterial
|
||||
if materialId_list:
|
||||
objs = Material.objects.filter(id__in=set(materialId_list))
|
||||
else:
|
||||
objs = Material.objects.all()
|
||||
for material in objs:
|
||||
mb_count = MaterialBatch.objects.filter(material=material).aggregate(total=Sum("count"))["total"]
|
||||
wm_count = WMaterial.objects.filter(material=material).aggregate(total=Sum("count"))["total"]
|
||||
if mb_count is None:
|
||||
mb_count = 0
|
||||
if wm_count is None:
|
||||
wm_count = 0
|
||||
Material.objects.filter(id=material.id).update(
|
||||
count_wm=wm_count,
|
||||
count_mb=mb_count,
|
||||
count=mb_count + wm_count)
|
||||
|
||||
def get_mgroup_goals(mgroupId, year, reload=False):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue