hberp/hb_server/apps/develop/views.py

177 lines
5.8 KiB
Python

from django.db import transaction
from django.shortcuts import render
from rest_framework.decorators import permission_classes
from rest_framework.views import APIView
from rest_framework.permissions import IsAdminUser, AllowAny
from rest_framework.response import Response
from apps.develop.tasks import backup_database, backup_media, reload_server, reload_server_only
from apps.inm.models import FIFO, FIFOItem, Inventory, MaterialBatch
from apps.mtm.models import Material
from apps.pm.models import ProductionPlan, SubProductionPlan
from apps.sam.models import Order
from apps.wf.models import Ticket
from apps.wpm.models import Operation, OperationMaterial, WProduct, WproductFlow
from apps.wpm.services import WpmService
from apps.em.tasks import update_equip_state_by_next_check_date
from rest_framework.exceptions import APIException
# Create your views here.
class CleanDataView(APIView):
permission_classes = [IsAdminUser]
def post(self, request, format=None):
"""
清空数据库
"""
Order.objects.all().delete(soft=False)
ProductionPlan.objects.all().delete(soft=False)
FIFO.objects.all().delete(soft=False)
Material.objects.filter(type__in=[Material.MA_TYPE_GOOD, Material.MA_TYPE_HALFGOOD]).update(count=0)
MaterialBatch.objects.filter(material__type__in=[Material.MA_TYPE_GOOD, Material.MA_TYPE_HALFGOOD]).delete()
Inventory.objects.filter(material__type__in=[Material.MA_TYPE_GOOD, Material.MA_TYPE_HALFGOOD]).delete()
Ticket.objects.all().delete(soft=False)
Operation.objects.all().delete()
return Response()
class UpdateCuttingView(APIView):
permission_classes = [IsAdminUser]
@transaction.atomic
def post(self, request, format=None):
"""
更新下料清单
"""
for i in WProduct.objects.all():
sp = WproductFlow.objects.filter(wproduct=i).order_by('id').first().subproduction_plan
op_q = OperationMaterial.objects.filter(subproduction_plan=sp, operation__step__id=1, operation__is_submited=True)
op = op_q.first().operation
i.coperation = op
i.save()
WproductFlow.objects.filter(wproduct=i).update(coperation=op)
WpmService.update_cutting_list_with_operation(op)
return Response()
from apps.qm.models import TestRecord
class UpdateLastTestResult(APIView):
permission_classes = [IsAdminUser]
@transaction.atomic
def post(self, request, format=None):
"""
更新最后一次检验结果
"""
for i in WProduct.objects.all():
tr = TestRecord.objects.filter(wproduct=i, is_submited=True).order_by('-id').first()
if tr:
i.last_test_result = tr.is_testok
i.save()
return Response()
class UpdateFIFOItem(APIView):
permission_classes = [IsAdminUser]
@transaction.atomic
def post(self, request, format=None):
"""
更新出入库结果
"""
for i in FIFOItem.objects.all():
if i.fifo.type == FIFO.FIFO_TYPE_PUR_IN:
if i.is_testok:
i.need_test = True
i.save()
else:
i.is_testok = None
i.save()
return Response()
class UpdateSpg(APIView):
permission_classes = [IsAdminUser]
@transaction.atomic
def post(self, request, format=None):
"""
冷加工重新计算合格率
"""
for i in SubProductionPlan.objects.filter(subproduction__process__id=1):
WpmService.update_subproduction_progress_main(sp=i)
return Response()
class UpdateEquipState(APIView):
permission_classes = [IsAdminUser]
def post(self, request, format=None):
update_equip_state_by_next_check_date()
return Response()
class UpdateNeedToOrder(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
WProduct.objects.exclude(to_order=None).update(need_to_order=True)
return Response()
class UpdateFIFONumber(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
from utils.tools import ranstr
for i in FIFO.objects.all():
if i.type in [FIFO.FIFO_TYPE_DO_IN, FIFO.FIFO_TYPE_PUR_IN]:
i.number = 'RK'+ ranstr(7)
else:
i.number = 'CK' + ranstr(7)
i.save()
return Response()
class CorrectWproductState(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
pass
class ReloadServer(APIView):
authentication_classes = []
permission_classes = []
def post(self, request):
"""
拉取代码并重启服务
"""
completed = reload_server()
if completed.returncode == 0:
return Response()
else:
raise APIException(completed.stdout)
class ReloadServerOnly(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
"""
仅重启服务
"""
completed = reload_server_only()
if completed.returncode == 0:
return Response()
else:
raise APIException(completed.stdout)
class BackupDatabase(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
"""
备份数据库到指定位置
"""
completed = backup_database()
if completed.returncode == 0:
return Response()
else:
raise APIException(completed.stdout)
class BackupMedia(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
"""
备份资源到指定位置
"""
completed = backup_media()
if completed.returncode == 0:
return Response()
else:
raise APIException(completed.stdout)