From b3f14a8f6f0badd52fa82d0e84d5955a42d59a8c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sat, 26 Feb 2022 12:16:02 +0800 Subject: [PATCH] develop reload backup --- hb_server/apps/develop/tasks.py | 9 +++++---- hb_server/apps/develop/views.py | 13 +++++++++++-- .../sam/migrations/0016_sale_iproducts.py | 19 +++++++++++++++++++ hb_server/apps/sam/models.py | 1 + hb_server/apps/sam/views_sale.py | 7 ++++++- 5 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 hb_server/apps/sam/migrations/0016_sale_iproducts.py diff --git a/hb_server/apps/develop/tasks.py b/hb_server/apps/develop/tasks.py index a7345dc..eb46aa2 100644 --- a/hb_server/apps/develop/tasks.py +++ b/hb_server/apps/develop/tasks.py @@ -10,14 +10,15 @@ def backup_database(): """ 备份数据库 """ - ret = os.popen('sudo pg_dump -U postgres -d hberp -f /home/lighthouse/hberp_backup.sql') - return Response() + completed = subprocess.run('sudo pg_dump "user=postgres password=zcDsj2021 dbname=hberp" > /home/lighthouse/hberp_backup.sql', + shell=True, capture_output=True, text=True) + return completed @shared_task def reload_server(): os.chdir('/home/lighthouse/hberp') - ret = subprocess.run('sudo git pull && sudo service supervisor reload') - return Response(ret.read()) + completed = subprocess.run('sudo git pull && sudo service supervisor reload', shell=True, capture_output=True, text=True) + return completed diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index 0cad10c..90b29ca 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -13,6 +13,7 @@ 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): @@ -123,10 +124,18 @@ class UpdateFIFONumber(APIView): class ReloadServer(APIView): permission_classes = [IsAdminUser] def post(self, request): - reload_server() + completed = reload_server() + if completed.returncode == 0: + return Response() + else: + raise APIException(completed.stdout) class BackupDatabase(APIView): permission_classes = [IsAdminUser] def post(self, request): - backup_database() \ No newline at end of file + completed = backup_database() + if completed.returncode == 0: + return Response() + else: + raise APIException(completed.stdout) \ No newline at end of file diff --git a/hb_server/apps/sam/migrations/0016_sale_iproducts.py b/hb_server/apps/sam/migrations/0016_sale_iproducts.py new file mode 100644 index 0000000..00c6f8d --- /dev/null +++ b/hb_server/apps/sam/migrations/0016_sale_iproducts.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.9 on 2022-02-26 00:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inm', '0032_auto_20220222_0941'), + ('sam', '0015_sale_ship_pic'), + ] + + operations = [ + migrations.AddField( + model_name='sale', + name='iproducts', + field=models.ManyToManyField(through='sam.SaleProduct', to='inm.IProduct'), + ), + ] diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index ba9a809..12ef0a8 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -94,6 +94,7 @@ class Sale(CommonADModel): receiver_address = models.CharField('收获地址', null=True, blank=True, max_length=200) remark = models.CharField('备注', null=True, blank=True, max_length=200) ship_pic = models.CharField('物流图片', max_length=200, null=True, blank=True) + iproducts = models.ManyToManyField('inm.iproduct', through='sam.saleproduct') class SaleProduct(BaseModel): """ diff --git a/hb_server/apps/sam/views_sale.py b/hb_server/apps/sam/views_sale.py index ed18874..1889abc 100644 --- a/hb_server/apps/sam/views_sale.py +++ b/hb_server/apps/sam/views_sale.py @@ -36,7 +36,8 @@ class SaleViewSet(CreateUpdateModelAMixin, ListModelMixin, RetrieveModelMixin, C elif self.action == 'retrieve': return SaleListSerializer return super().get_serializer_class() - + + @transaction.atomic def destroy(self, request, *args, **kwargs): obj = self.get_object() if obj.is_audited: @@ -161,6 +162,8 @@ class SaleProductViewSet(ListModelMixin, DestroyModelMixin, CreateModelMixin, Ge }) return Response(SaleProductPackDetailSerializer(instance=obj).data) elif request.method == 'POST': + if obj.sale.is_audited: + raise exceptions.APIException('该销售记录已审核,不可装箱') serializer = SaleProductPackSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data @@ -180,6 +183,8 @@ class SaleProductViewSet(ListModelMixin, DestroyModelMixin, CreateModelMixin, Ge 不装箱备注 """ obj = self.get_object() + if obj.sale.is_audited: + raise exceptions.APIException('该销售记录已审核,不可填写备注') serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data