backup 接口 fifoitem 增加 过期日期
This commit is contained in:
parent
b3f14a8f6f
commit
8b592231c7
|
|
@ -1,25 +1,39 @@
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
from distutils import command
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def backup_database():
|
def backup_database():
|
||||||
"""
|
"""
|
||||||
备份数据库
|
备份数据库
|
||||||
"""
|
"""
|
||||||
completed = subprocess.run('sudo pg_dump "user=postgres password=zcDsj2021 dbname=hberp" > /home/lighthouse/hberp_backup.sql',
|
import datetime
|
||||||
shell=True, capture_output=True, text=True)
|
name = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
||||||
|
command = '''pg_dump "user=postgres password=zcDsj2021 dbname=hberp" >
|
||||||
|
/home/lighthouse/backup/hberp_{}.sql'''.format(name)
|
||||||
|
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||||
return completed
|
return completed
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def reload_server():
|
def reload_server():
|
||||||
os.chdir('/home/lighthouse/hberp')
|
os.chdir('/home/lighthouse/hberp')
|
||||||
completed = subprocess.run('sudo git pull && sudo service supervisor reload', shell=True, capture_output=True, text=True)
|
command = 'sudo git pull && sudo service supervisor reload'
|
||||||
|
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||||
|
return completed
|
||||||
|
|
||||||
|
@shared_task
|
||||||
|
def reload_server_only():
|
||||||
|
command = 'sudo service supervisor reload'
|
||||||
|
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||||
|
return completed
|
||||||
|
|
||||||
|
@shared_task
|
||||||
|
def backup_media():
|
||||||
|
command = 'rsync -avu /home/lighthouse/hberp/hb_server/media/ /home/lighthouse/backup/media/'
|
||||||
|
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||||
return completed
|
return completed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@ from django.db.models import base
|
||||||
from rest_framework import urlpatterns
|
from rest_framework import urlpatterns
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from apps.develop.views import BackupDatabase, CleanDataView, ReloadServer, UpdateCuttingView, UpdateEquipState, UpdateFIFOItem, UpdateFIFONumber, UpdateLastTestResult, UpdateNeedToOrder, UpdateSpg
|
from apps.develop.views import BackupDatabase, BackupMedia, CleanDataView, ReloadServer, ReloadServerOnly, UpdateCuttingView, UpdateEquipState, UpdateFIFOItem, UpdateFIFONumber, UpdateLastTestResult, UpdateNeedToOrder, UpdateSpg
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('cleandata/', CleanDataView.as_view()),
|
path('cleandata/', CleanDataView.as_view()),
|
||||||
|
|
@ -15,6 +15,8 @@ urlpatterns = [
|
||||||
path('update_need_to_order/', UpdateNeedToOrder.as_view()),
|
path('update_need_to_order/', UpdateNeedToOrder.as_view()),
|
||||||
path('update_fifo_number/', UpdateFIFONumber.as_view()),
|
path('update_fifo_number/', UpdateFIFONumber.as_view()),
|
||||||
path('reload_server/', ReloadServer.as_view()),
|
path('reload_server/', ReloadServer.as_view()),
|
||||||
path('backup_database/', BackupDatabase.as_view())
|
path('reload_server_only/', ReloadServerOnly.as_view()),
|
||||||
|
path('backup_database/', BackupDatabase.as_view()),
|
||||||
|
path('backup_media/', BackupMedia.as_view())
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from rest_framework.decorators import permission_classes
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.permissions import IsAdminUser
|
from rest_framework.permissions import IsAdminUser
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from apps.develop.tasks import backup_database, reload_server
|
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.inm.models import FIFO, FIFOItem, Inventory, MaterialBatch
|
||||||
from apps.mtm.models import Material
|
from apps.mtm.models import Material
|
||||||
from apps.pm.models import ProductionPlan, SubProductionPlan
|
from apps.pm.models import ProductionPlan, SubProductionPlan
|
||||||
|
|
@ -124,18 +124,47 @@ class UpdateFIFONumber(APIView):
|
||||||
class ReloadServer(APIView):
|
class ReloadServer(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
"""
|
||||||
|
拉取代码并重启服务
|
||||||
|
"""
|
||||||
completed = reload_server()
|
completed = reload_server()
|
||||||
if completed.returncode == 0:
|
if completed.returncode == 0:
|
||||||
return Response()
|
return Response()
|
||||||
else:
|
else:
|
||||||
raise APIException(completed.stdout)
|
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):
|
class BackupDatabase(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
"""
|
||||||
|
备份数据库到指定位置
|
||||||
|
"""
|
||||||
completed = backup_database()
|
completed = backup_database()
|
||||||
if completed.returncode == 0:
|
if completed.returncode == 0:
|
||||||
return Response()
|
return Response()
|
||||||
else:
|
else:
|
||||||
raise APIException(completed.stdout)
|
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)
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.9 on 2022-02-28 06:21
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('inm', '0032_auto_20220222_0941'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='fifoitem',
|
||||||
|
name='expiration_date',
|
||||||
|
field=models.DateField(blank=True, null=True, verbose_name='有效期'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -105,6 +105,7 @@ class FIFOItem(BaseModel):
|
||||||
batch = models.CharField('批次号', max_length=100, default='')
|
batch = models.CharField('批次号', max_length=100, default='')
|
||||||
fifo = models.ForeignKey(FIFO, verbose_name='关联出入库',
|
fifo = models.ForeignKey(FIFO, verbose_name='关联出入库',
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
|
expiration_date = models.DateField('有效期', null=True, blank=True)
|
||||||
subproduction_plan = models.ForeignKey(
|
subproduction_plan = models.ForeignKey(
|
||||||
SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.CASCADE, null=True, blank=True)
|
SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
files = models.ManyToManyField(File, verbose_name='上传材料', blank=True)
|
files = models.ManyToManyField(File, verbose_name='上传材料', blank=True)
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ class FIFOItemCreateSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FIFOItem
|
model = FIFOItem
|
||||||
fields = ['warehouse',
|
fields = ['warehouse',
|
||||||
'material', 'batch', 'fifo', 'files', 'pu_order_item', 'count']
|
'material', 'batch', 'fifo', 'files', 'pu_order_item', 'count', 'expiration_date']
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
fifo = validated_data['fifo']
|
fifo = validated_data['fifo']
|
||||||
|
|
@ -106,7 +106,7 @@ class FIFOItemCreateSerializer(serializers.ModelSerializer):
|
||||||
class FIFOItemUpdateSerializer(serializers.ModelSerializer):
|
class FIFOItemUpdateSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FIFOItem
|
model = FIFOItem
|
||||||
fields = ['warehouse', 'batch', 'files', 'count']
|
fields = ['warehouse', 'batch', 'files', 'count', 'expiration_date']
|
||||||
|
|
||||||
class FIFOItemSerializer(serializers.ModelSerializer):
|
class FIFOItemSerializer(serializers.ModelSerializer):
|
||||||
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
||||||
|
|
@ -128,7 +128,7 @@ class FIFODetailInPurSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FIFOItem
|
model = FIFOItem
|
||||||
fields = ['material', 'count', 'batch', 'details', 'warehouse']
|
fields = ['material', 'count', 'batch', 'details', 'warehouse', 'expiration_date']
|
||||||
|
|
||||||
def validate_batch(self, value):
|
def validate_batch(self, value):
|
||||||
if value == '':
|
if value == '':
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ class InmService:
|
||||||
o2, _ = MaterialBatch.objects.get_or_create(material=material, warehouse=warehouse, batch=i.batch,\
|
o2, _ = MaterialBatch.objects.get_or_create(material=material, warehouse=warehouse, batch=i.batch,\
|
||||||
defaults={'material':material, 'warehouse':warehouse, 'count':0, 'batch':i.batch})
|
defaults={'material':material, 'warehouse':warehouse, 'count':0, 'batch':i.batch})
|
||||||
o2.count = o2.count + i.count
|
o2.count = o2.count + i.count
|
||||||
|
if o2.expiration_date is None:
|
||||||
|
o2.expiration_date = i.expiration_date
|
||||||
o2.save()
|
o2.save()
|
||||||
|
|
||||||
iv, _= Inventory.objects.get_or_create(material=material, warehouse=warehouse, \
|
iv, _= Inventory.objects.get_or_create(material=material, warehouse=warehouse, \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue