From 8b592231c73ed525bfac153c7b76be4dc9384c24 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 28 Feb 2022 14:23:28 +0800 Subject: [PATCH] =?UTF-8?q?backup=20=E6=8E=A5=E5=8F=A3=20fifoitem=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/develop/tasks.py | 22 ++++++++++--- hb_server/apps/develop/urls.py | 6 ++-- hb_server/apps/develop/views.py | 31 ++++++++++++++++++- .../0033_fifoitem_expiration_date.py | 18 +++++++++++ hb_server/apps/inm/models.py | 1 + hb_server/apps/inm/serializers.py | 6 ++-- hb_server/apps/inm/services.py | 2 ++ 7 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 hb_server/apps/inm/migrations/0033_fifoitem_expiration_date.py diff --git a/hb_server/apps/develop/tasks.py b/hb_server/apps/develop/tasks.py index eb46aa2..c167aad 100644 --- a/hb_server/apps/develop/tasks.py +++ b/hb_server/apps/develop/tasks.py @@ -1,25 +1,39 @@ from __future__ import absolute_import, unicode_literals +from distutils import command from rest_framework.response import Response from celery import shared_task import os import subprocess - @shared_task def backup_database(): """ 备份数据库 """ - completed = subprocess.run('sudo pg_dump "user=postgres password=zcDsj2021 dbname=hberp" > /home/lighthouse/hberp_backup.sql', - shell=True, capture_output=True, text=True) + import datetime + 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 @shared_task def reload_server(): 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 \ No newline at end of file diff --git a/hb_server/apps/develop/urls.py b/hb_server/apps/develop/urls.py index c9acf54..66a21a5 100644 --- a/hb_server/apps/develop/urls.py +++ b/hb_server/apps/develop/urls.py @@ -2,7 +2,7 @@ from django.db.models import base from rest_framework import urlpatterns from django.urls import path, include 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 = [ path('cleandata/', CleanDataView.as_view()), @@ -15,6 +15,8 @@ urlpatterns = [ path('update_need_to_order/', UpdateNeedToOrder.as_view()), path('update_fifo_number/', UpdateFIFONumber.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()) ] diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index 90b29ca..bdd9b07 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -4,7 +4,7 @@ from rest_framework.decorators import permission_classes from rest_framework.views import APIView from rest_framework.permissions import IsAdminUser 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.mtm.models import Material from apps.pm.models import ProductionPlan, SubProductionPlan @@ -124,17 +124,46 @@ class UpdateFIFONumber(APIView): class ReloadServer(APIView): permission_classes = [IsAdminUser] 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: diff --git a/hb_server/apps/inm/migrations/0033_fifoitem_expiration_date.py b/hb_server/apps/inm/migrations/0033_fifoitem_expiration_date.py new file mode 100644 index 0000000..9486151 --- /dev/null +++ b/hb_server/apps/inm/migrations/0033_fifoitem_expiration_date.py @@ -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='有效期'), + ), + ] diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 4053765..2d74d11 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -105,6 +105,7 @@ class FIFOItem(BaseModel): batch = models.CharField('批次号', max_length=100, default='') fifo = models.ForeignKey(FIFO, verbose_name='关联出入库', on_delete=models.CASCADE) + expiration_date = models.DateField('有效期', null=True, blank=True) subproduction_plan = models.ForeignKey( SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.CASCADE, null=True, blank=True) files = models.ManyToManyField(File, verbose_name='上传材料', blank=True) diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index d033aaa..4c2374f 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -80,7 +80,7 @@ class FIFOItemCreateSerializer(serializers.ModelSerializer): class Meta: model = FIFOItem 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): fifo = validated_data['fifo'] @@ -106,7 +106,7 @@ class FIFOItemCreateSerializer(serializers.ModelSerializer): class FIFOItemUpdateSerializer(serializers.ModelSerializer): class Meta: model = FIFOItem - fields = ['warehouse', 'batch', 'files', 'count'] + fields = ['warehouse', 'batch', 'files', 'count', 'expiration_date'] class FIFOItemSerializer(serializers.ModelSerializer): warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) @@ -128,7 +128,7 @@ class FIFODetailInPurSerializer(serializers.ModelSerializer): class Meta: model = FIFOItem - fields = ['material', 'count', 'batch', 'details', 'warehouse'] + fields = ['material', 'count', 'batch', 'details', 'warehouse', 'expiration_date'] def validate_batch(self, value): if value == '': diff --git a/hb_server/apps/inm/services.py b/hb_server/apps/inm/services.py index 8ee155d..49c7c58 100644 --- a/hb_server/apps/inm/services.py +++ b/hb_server/apps/inm/services.py @@ -24,6 +24,8 @@ class InmService: o2, _ = MaterialBatch.objects.get_or_create(material=material, warehouse=warehouse, batch=i.batch,\ defaults={'material':material, 'warehouse':warehouse, 'count':0, 'batch':i.batch}) o2.count = o2.count + i.count + if o2.expiration_date is None: + o2.expiration_date = i.expiration_date o2.save() iv, _= Inventory.objects.get_or_create(material=material, warehouse=warehouse, \