177 lines
5.8 KiB
Python
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) |