backup 接口 fifoitem 增加 过期日期

This commit is contained in:
caoqianming 2022-02-28 14:23:28 +08:00
parent b3f14a8f6f
commit 8b592231c7
7 changed files with 76 additions and 10 deletions

View File

@ -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

View File

@ -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())
]

View File

@ -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,18 +124,47 @@ 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:
raise APIException(completed.stdout)

View File

@ -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='有效期'),
),
]

View File

@ -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)

View File

@ -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 == '':

View File

@ -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, \