class="add-code nl-26 ol-26"> 546
+        'reason': reason,
547
+    })
548
+    
549
+    return response(200, 'Consume Shot Unbinding Success', u'消费者镜头解绑成功')
550
+    
551
+    

+ 4 - 2
api/urls.py

@@ -6,7 +6,7 @@ from django_file_upload import views as file_views
6 6
 from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views,
7 7
                  maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views,
8 8
                  refresh_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views, wx_views,
9
-                 wxa_views)
9
+                 wxa_views, consumer_admin_view)
10 10
 from miniapp import qy_views
11 11
 from miniapp import views as mini_views
12 12
 from page import oauth_views, sale_views, screen_views
@@ -58,7 +58,8 @@ urlpatterns += [
58 58
     url(r'^consumer_phone$', mch_views.consumer_phone_api, name='consumer_phone_api'),
59 59
     url(r'^consumer_info$', mch_views.consumer_info_api, name='consumer_info_api'),
60 60
     url(r'^consumer_snlist$', mch_views.consumer_snlist_api, name='consumer_snlist_api'),
61
-    url(r'^consumer_model_list$', mch_views.consumer_model_list, name='consumer_model_list')
61
+    url(r'^consumer_model_list$', mch_views.consumer_model_list, name='consumer_model_list'),
62
+    url(r'^consumer/shot/unbinding$', mch_views.consumer_shot_unbinding, name='consumer_shot_unbinding'),
62 63
 ]
63 64
 
64 65
 urlpatterns += [
@@ -159,6 +160,7 @@ urlpatterns += [
159 160
     url(r'^admin/record/sale$', admin_views.record_sale, name='record_sale'),
160 161
     url(r'^admin/record/sale/batch$', admin_views.record_sale_batch, name='record_sale_batch'),
161 162
     url(r'^admin/record/warehouse$', admin_views.record_warehouse, name='record_warehouse'),
163
+    url(r'^admin/consumer/shot/unbinding/list$', consumer_admin_view.consumer_shot_unbinding_list, name='consumer_shot_unbinding_list'),
162 164
 
163 165
     url(r'^admin/list/model$', admin_views.model_list, name='model_list'),
164 166
     url(r'^admin/list/distributor$', admin_views.distributor_list, name='distributor_list'),

+ 37 - 0
mch/migrations/0067_consumeshotunbindinginfo.py

@@ -0,0 +1,37 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-03-01 07:25
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('mch', '0066_auto_20230208_1344'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.CreateModel(
16
+            name='ConsumeShotUnbindingInfo',
17
+            fields=[
18
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
20
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
21
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
22
+                ('brand_id', models.CharField(blank=True, db_index=True, help_text='品牌唯一标识', max_length=32, null=True, verbose_name='brand_id')),
23
+                ('brand_name', models.CharField(blank=True, help_text='品牌名称', max_length=255, null=True, verbose_name='brand_name')),
24
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
25
+                ('submit_pk', models.IntegerField(blank=True, default=0, help_text='消费者提交ID', null=True, verbose_name='submit_pk')),
26
+                ('submit_at', models.DateTimeField(blank=True, help_text='消费者提交时间', null=True, verbose_name='submit_at')),
27
+                ('model_id', models.CharField(blank=True, db_index=True, help_text='型号唯一标识', max_length=32, null=True, verbose_name='model_id')),
28
+                ('sn', models.CharField(blank=True, db_index=True, help_text='序列号', max_length=16, null=True, verbose_name='sn')),
29
+                ('reason', models.CharField(blank=True, db_index=True, help_text='解绑理由', max_length=256, null=True, verbose_name='model_id')),
30
+            ],
31
+            options={
32
+                'verbose_name': '消费者镜头解绑记录',
33
+                'verbose_name_plural': '消费者镜头解绑记录',
34
+                'unique_together': {('user_id', 'submit_pk')},
35
+            },
36
+        ),
37
+    ]

+ 20 - 0
mch/migrations/0068_alter_consumeshotunbindinginfo_reason.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-03-01 10:21
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('mch', '0067_consumeshotunbindinginfo'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AlterField(
16
+            model_name='consumeshotunbindinginfo',
17
+            name='reason',
18
+            field=models.CharField(blank=True, db_index=True, help_text='解绑理由', max_length=256, null=True, verbose_name='reason'),
19
+        ),
20
+    ]

+ 40 - 0
mch/models.py

@@ -9,6 +9,7 @@ from jsonfield import JSONField
9 9
 from shortuuidfield import ShortUUIDField
10 10
 from TimeConvert import TimeConvert as tc
11 11
 
12
+from kodo.basemodels import BrandInfoMixin
12 13
 from coupon.models import CouponInfo
13 14
 
14 15
 
@@ -770,6 +771,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
770 771
             'final_coupon_info': act.coupon_info(created_at=self.created_at) if act else self.coupon_info,
771 772
             'has_used': self.has_used,
772 773
             'used_at': self.used_at,
774
+            'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M'),
773 775
         }
774 776
 
775 777
     @property
@@ -800,6 +802,44 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
800 802
         }
801 803
 
802 804
 
805
+class ConsumeShotUnbindingInfo(BaseModelMixin, BrandInfoMixin):
806
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
807
+    submit_pk = models.IntegerField(_(u'submit_pk'), default=0, blank=True, null=True, help_text=u'消费者提交ID')
808
+    submit_at = models.DateTimeField(_(u'submit_at'), blank=True, null=True, help_text=u'消费者提交时间')
809
+    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
810
+    sn = models.CharField(_(u'sn'), max_length=16, blank=True, null=True, help_text=u'序列号', db_index=True)
811
+    reason = models.CharField(_(u'reason'), max_length=256, blank=True, null=True, help_text=u'解绑理由', db_index=True)
812
+
813
+    class Meta:
814
+        verbose_name = _(u'消费者镜头解绑记录')
815
+        verbose_name_plural = _(u'消费者镜头解绑记录')
816
+
817
+        unique_together = (
818
+            ('user_id', 'submit_pk'),
819
+        )
820
+
821
+    def __unicode__(self):
822
+        return '%d' % self.pk
823
+
824
+    @property
825
+    def admindata(self):
826
+        from account.models import UserInfo
827
+
828
+        info = ModelInfo.objects.get(model_id=self.model_id).fulldata
829
+        user = UserInfo.objects.get(user_id=self.user_id)
830
+
831
+        return {
832
+            'user_id': self.user_id,
833
+            'phone': user.phone,
834
+            'model_info': model_info,
835
+            'sn': self.sn,
836
+            'reason': self.reason,
837
+            'submit_pk': self.submit_pk,
838
+            'submit_at': self.submit_at,
839
+            'created_at': self.created_at,
840
+        }
841
+
842
+
803 843
 class ActivityInfo(BaseModelMixin):
804 844
     FIXED_EXPIRED_TIME = 0
805 845
     CHANGED_EXPIRED_TIME = 1

kodo - Gogs: Go Git Service

Geen omschrijving

.gitignore 735B

    # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *.swp # C extensions *.so # Distribution / packaging bin/ build/ develop-eggs/ dist/ eggs/ lib/ lib64/ parts/ sdist/ venv/ var/ static/upload/ *.egg-info/ .installed.cfg *.egg *.sublime* # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports .tox/ .coverage .cache nosetests.xml coverage.xml # Translations # *.mo # Mr Developer .mr.developer.cfg .project .pydevproject .settings # Rope .ropeproject # Django stuff: *.log *.pot # Sphinx documentation docs/_build/ # Ignore For zhTimer .DS_Store db.sqlite3 local_settings.py .idea/ media/ collect_static/ # Special File *download.html # Qiniu .qiniu_pythonsdk_hostscache.json