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

View File

@ -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,17 +124,46 @@ 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:
return Response()
else:
raise APIException(completed.stdout)
class BackupMedia(APIView):
permission_classes = [IsAdminUser]
def post(self, request):
"""
备份资源到指定位置
"""
completed = backup_media()
if completed.returncode == 0: if completed.returncode == 0:
return Response() return Response()
else: else:

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='') 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)

View File

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

View File

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