>Vedi File
@@ -0,0 +1,19 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from logit import logit |
|
| 5 |
+from TimeConvert import TimeConvert as tc |
|
| 6 |
+ |
|
| 7 |
+from message.models import MessageInfo |
|
| 8 |
+from utils.error.response_utils import response |
|
| 9 |
+ |
|
| 10 |
+ |
|
| 11 |
+@logit |
|
| 12 |
+def msg_list_api(request): |
|
| 13 |
+ curdt = tc.utc_datetime() |
|
| 14 |
+ msgs = MessageInfo.objects.filter(msg_image_airtime__lte=curdt, msg_image_deadline__gt=curdt, status=True) |
|
| 15 |
+ msgs = [msg.data for msg in msgs] |
|
| 16 |
+ |
|
| 17 |
+ return response(200, 'Get Message List Success', u'获取消息列表成功', {
|
|
| 18 |
+ 'msgs': msgs, |
|
| 19 |
+ }) |
@@ -0,0 +1,7 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.test import TestCase |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+# Create your tests here. |
@@ -0,0 +1,7 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.shortcuts import render |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+# Create your views here. |
@@ -0,0 +1,9 @@ |
||
| 1 |
+#!/bin/bash |
|
| 2 |
+ |
|
| 3 |
+# Ignoring autogenerated files |
|
| 4 |
+# -- Migration directories |
|
| 5 |
+# Ignoring error codes |
|
| 6 |
+# -- E128 continuation line under-indented for visual indent |
|
| 7 |
+# -- E501 line too long |
|
| 8 |
+ |
|
| 9 |
+pep8 --exclude=migrations --ignore=E128,E501 . |
@@ -0,0 +1,15 @@ |
||
| 1 |
+-e git+https://github.com/andymccurdy/redis-py.git#egg=redis-py |
|
| 2 |
+Django==1.11.3 |
|
| 3 |
+MySQL-python==1.2.5 |
|
| 4 |
+StatusCode==1.0.0 |
|
| 5 |
+TimeConvert==1.4.1 |
|
| 6 |
+django-admin==1.0.4 |
|
| 7 |
+django-detect==1.0.5 |
|
| 8 |
+django-json-response==1.1.5 |
|
| 9 |
+django-logit==1.0.6 |
|
| 10 |
+django-paginator2==1.0.3 |
|
| 11 |
+django-shortuuidfield==0.1.3 |
|
| 12 |
+django-uniapi==1.0.0 |
|
| 13 |
+django-we==1.0.7 |
|
| 14 |
+hiredis==0.2.0 |
|
| 15 |
+redis-extensions==1.1.1 |
@@ -0,0 +1,25 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.contrib import admin |
|
| 4 |
+ |
|
| 5 |
+from support.models import MachineBackInfo, MachineBodyInfo, MachineSupportPrebookInfo |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class MachineBodyInfoAdmin(admin.ModelAdmin): |
|
| 9 |
+ list_display = ('body', 'status', 'created_at', 'updated_at')
|
|
| 10 |
+ list_filter = ('status', )
|
|
| 11 |
+ |
|
| 12 |
+ |
|
| 13 |
+class MachineBackInfoAdmin(admin.ModelAdmin): |
|
| 14 |
+ list_display = ('back', 'status', 'created_at', 'updated_at')
|
|
| 15 |
+ list_filter = ('status', )
|
|
| 16 |
+ |
|
| 17 |
+ |
|
| 18 |
+class MachineSupportPrebookInfoAdmin(admin.ModelAdmin): |
|
| 19 |
+ list_display = ('user_id', 'name', 'sex', 'phone', 'weekday', 'timeslice', 'body', 'back', 'handle_status', 'status', 'created_at', 'updated_at')
|
|
| 20 |
+ list_filter = ('weekday', 'timeslice', 'body', 'back', 'handle_status', 'status')
|
|
| 21 |
+ |
|
| 22 |
+ |
|
| 23 |
+admin.site.register(MachineBodyInfo, MachineBodyInfoAdmin) |
|
| 24 |
+admin.site.register(MachineBackInfo, MachineBackInfoAdmin) |
|
| 25 |
+admin.site.register(MachineSupportPrebookInfo, MachineSupportPrebookInfoAdmin) |
@@ -0,0 +1,8 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.apps import AppConfig |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+class SupportConfig(AppConfig): |
|
| 8 |
+ name = 'support' |
@@ -0,0 +1,66 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.3 on 2017-08-16 07:03 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+import django.db.models.deletion |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+class Migration(migrations.Migration): |
|
| 10 |
+ |
|
| 11 |
+ initial = True |
|
| 12 |
+ |
|
| 13 |
+ dependencies = [ |
|
| 14 |
+ ] |
|
| 15 |
+ |
|
| 16 |
+ operations = [ |
|
| 17 |
+ migrations.CreateModel( |
|
| 18 |
+ name='MachineBackInfo', |
|
| 19 |
+ fields=[ |
|
| 20 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 21 |
+ ('status', models.BooleanField(db_index=True, default=True, help_text='\u72b6\u6001', verbose_name='status')),
|
|
| 22 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at')),
|
|
| 23 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at')),
|
|
| 24 |
+ ('back', models.CharField(blank=True, help_text='\u673a\u80cc', max_length=255, null=True, unique=True, verbose_name='back')),
|
|
| 25 |
+ ], |
|
| 26 |
+ options={
|
|
| 27 |
+ 'verbose_name': '\u673a\u80cc\u914d\u7f6e', |
|
| 28 |
+ 'verbose_name_plural': '\u673a\u80cc\u914d\u7f6e', |
|
| 29 |
+ }, |
|
| 30 |
+ ), |
|
| 31 |
+ migrations.CreateModel( |
|
| 32 |
+ name='MachineBodyInfo', |
|
| 33 |
+ fields=[ |
|
| 34 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 35 |
+ ('status', models.BooleanField(db_index=True, default=True, help_text='\u72b6\u6001', verbose_name='status')),
|
|
| 36 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at')),
|
|
| 37 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at')),
|
|
| 38 |
+ ('body', models.CharField(blank=True, help_text='\u673a\u8eab', max_length=255, null=True, unique=True, verbose_name='body')),
|
|
| 39 |
+ ], |
|
| 40 |
+ options={
|
|
| 41 |
+ 'verbose_name': '\u673a\u8eab\u914d\u7f6e', |
|
| 42 |
+ 'verbose_name_plural': '\u673a\u8eab\u914d\u7f6e', |
|
| 43 |
+ }, |
|
| 44 |
+ ), |
|
| 45 |
+ migrations.CreateModel( |
|
| 46 |
+ name='MachineSupportPrebookInfo', |
|
| 47 |
+ fields=[ |
|
| 48 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 49 |
+ ('status', models.BooleanField(db_index=True, default=True, help_text='\u72b6\u6001', verbose_name='status')),
|
|
| 50 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at')),
|
|
| 51 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at')),
|
|
| 52 |
+ ('user_id', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=255, null=True, verbose_name='user_id')),
|
|
| 53 |
+ ('name', models.CharField(blank=True, help_text='\u7528\u6237\u59d3\u540d', max_length=255, null=True, verbose_name='name')),
|
|
| 54 |
+ ('sex', models.IntegerField(choices=[(1, '\u7537'), (0, '\u5973')], default=1, help_text='\u7528\u6237\u6027\u522b', verbose_name='sex')),
|
|
| 55 |
+ ('phone', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u7535\u8bdd', max_length=255, null=True, verbose_name='phone')),
|
|
| 56 |
+ ('weekday', models.IntegerField(db_index=True, default=0, help_text='\u5468\u51e0\uff1a\u5468\u65e5\u4e3a0', verbose_name='weekday')),
|
|
| 57 |
+ ('timeslice', models.IntegerField(choices=[(0, '09:00 - 12:00'), (0, '12:00 - 14:00'), (0, '14:00 - 18:00'), (0, '18:00 - 21:00')], db_index=True, default=0, help_text='\u65f6\u95f4\u6bb5', verbose_name='timeslice')),
|
|
| 58 |
+ ('back', models.ForeignKey(blank=True, help_text='\u673a\u80cc', null=True, on_delete=django.db.models.deletion.CASCADE, to='support.MachineBackInfo', verbose_name='back')),
|
|
| 59 |
+ ('body', models.ForeignKey(blank=True, help_text='\u673a\u8eab', null=True, on_delete=django.db.models.deletion.CASCADE, to='support.MachineBodyInfo', verbose_name='body')),
|
|
| 60 |
+ ], |
|
| 61 |
+ options={
|
|
| 62 |
+ 'verbose_name': 'machinesupportprebookinfo', |
|
| 63 |
+ 'verbose_name_plural': 'machinesupportprebookinfo', |
|
| 64 |
+ }, |
|
| 65 |
+ ), |
|
| 66 |
+ ] |
@@ -0,0 +1,25 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.3 on 2017-08-16 07:09 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('support', '0001_initial'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AddField( |
|
| 16 |
+ model_name='machinebackinfo', |
|
| 17 |
+ name='position', |
|
| 18 |
+ field=models.IntegerField(default=1, help_text='\u6392\u5e8f', verbose_name='position'), |
|
| 19 |
+ ), |
|
| 20 |
+ migrations.AddField( |
|
| 21 |
+ model_name='machinebodyinfo', |
|
| 22 |
+ name='position', |
|
| 23 |
+ field=models.IntegerField(default=1, help_text='\u6392\u5e8f', verbose_name='position'), |
|
| 24 |
+ ), |
|
| 25 |
+ ] |
@@ -0,0 +1,20 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.3 on 2017-08-16 07:34 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('support', '0002_auto_20170816_1509'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AddField( |
|
| 16 |
+ model_name='machinesupportprebookinfo', |
|
| 17 |
+ name='handle_status', |
|
| 18 |
+ field=models.IntegerField(choices=[(0, '\u672a\u5904\u7406'), (1, '\u5df2\u8054\u7cfb'), (10, '\u5df2\u5904\u7406')], default=0, help_text='\u5904\u7406\u72b6\u6001', verbose_name='handle_status'), |
|
| 19 |
+ ), |
|
| 20 |
+ ] |
@@ -0,0 +1,20 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+# Generated by Django 1.11.3 on 2017-08-16 08:04 |
|
| 3 |
+from __future__ import unicode_literals |
|
| 4 |
+ |
|
| 5 |
+from django.db import migrations, models |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class Migration(migrations.Migration): |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ('support', '0003_machinesupportprebookinfo_handle_status'),
|
|
| 12 |
+ ] |
|
| 13 |
+ |
|
| 14 |
+ operations = [ |
|
| 15 |
+ migrations.AlterField( |
|
| 16 |
+ model_name='machinesupportprebookinfo', |
|
| 17 |
+ name='timeslice', |
|
| 18 |
+ field=models.IntegerField(choices=[(0, '09:00 - 12:00'), (1, '12:00 - 14:00'), (2, '14:00 - 18:00'), (3, '18:00 - 21:00')], db_index=True, default=0, help_text='\u65f6\u95f4\u6bb5', verbose_name='timeslice'), |
|
| 19 |
+ ), |
|
| 20 |
+ ] |
@@ -0,0 +1,94 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.db import models |
|
| 4 |
+from django.utils.translation import ugettext_lazy as _ |
|
| 5 |
+ |
|
| 6 |
+from manual.basemodels import CreateUpdateMixin |
|
| 7 |
+ |
|
| 8 |
+ |
|
| 9 |
+class MachineBodyInfo(CreateUpdateMixin): |
|
| 10 |
+ body = models.CharField(_(u'body'), max_length=255, blank=True, null=True, help_text=u'机身', unique=True) |
|
| 11 |
+ position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') |
|
| 12 |
+ |
|
| 13 |
+ class Meta: |
|
| 14 |
+ verbose_name = _(u'机身配置') |
|
| 15 |
+ verbose_name_plural = _(u'机身配置') |
|
| 16 |
+ |
|
| 17 |
+ def __unicode__(self): |
|
| 18 |
+ return unicode(self.body) |
|
| 19 |
+ |
|
| 20 |
+ @property |
|
| 21 |
+ def data(self): |
|
| 22 |
+ return {
|
|
| 23 |
+ 'pk': self.pk, |
|
| 24 |
+ 'body': self.body, |
|
| 25 |
+ } |
|
| 26 |
+ |
|
| 27 |
+ |
|
| 28 |
+class MachineBackInfo(CreateUpdateMixin): |
|
| 29 |
+ back = models.CharField(_(u'back'), max_length=255, blank=True, null=True, help_text=u'机背', unique=True) |
|
| 30 |
+ position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') |
|
| 31 |
+ |
|
| 32 |
+ class Meta: |
|
| 33 |
+ verbose_name = _(u'机背配置') |
|
| 34 |
+ verbose_name_plural = _(u'机背配置') |
|
| 35 |
+ |
|
| 36 |
+ def __unicode__(self): |
|
| 37 |
+ return unicode(self.back) |
|
| 38 |
+ |
|
| 39 |
+ @property |
|
| 40 |
+ def data(self): |
|
| 41 |
+ return {
|
|
| 42 |
+ 'pk': self.pk, |
|
| 43 |
+ 'back': self.back, |
|
| 44 |
+ } |
|
| 45 |
+ |
|
| 46 |
+ |
|
| 47 |
+class MachineSupportPrebookInfo(CreateUpdateMixin): |
|
| 48 |
+ MALE = 1 |
|
| 49 |
+ FEMALE = 0 |
|
| 50 |
+ |
|
| 51 |
+ SEX_TYPE = ( |
|
| 52 |
+ (MALE, u'男'), |
|
| 53 |
+ (FEMALE, u'女'), |
|
| 54 |
+ ) |
|
| 55 |
+ |
|
| 56 |
+ SLICE0 = 0 |
|
| 57 |
+ SLICE1 = 1 |
|
| 58 |
+ SLICE2 = 2 |
|
| 59 |
+ SLICE3 = 3 |
|
| 60 |
+ |
|
| 61 |
+ TIME_SLICE = ( |
|
| 62 |
+ (SLICE0, u'09:00 - 12:00'), |
|
| 63 |
+ (SLICE1, u'12:00 - 14:00'), |
|
| 64 |
+ (SLICE2, u'14:00 - 18:00'), |
|
| 65 |
+ (SLICE3, u'18:00 - 21:00'), |
|
| 66 |
+ ) |
|
| 67 |
+ |
|
| 68 |
+ NOT_HANDLE = 0 |
|
| 69 |
+ HAS_CONTACTED = 1 |
|
| 70 |
+ HAS_HANDLED = 10 |
|
| 71 |
+ |
|
| 72 |
+ HANDLE_STATUS = ( |
|
| 73 |
+ (NOT_HANDLE, u'未处理'), |
|
| 74 |
+ (HAS_CONTACTED, u'已联系'), |
|
| 75 |
+ (HAS_HANDLED, u'已处理'), |
|
| 76 |
+ ) |
|
| 77 |
+ |
|
| 78 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
| 79 |
+ name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名') |
|
| 80 |
+ sex = models.IntegerField(_(u'sex'), choices=SEX_TYPE, default=MALE, help_text=u'用户性别') |
|
| 81 |
+ phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'用户电话', db_index=True) |
|
| 82 |
+ weekday = models.IntegerField(_(u'weekday'), default=0, help_text=u'周几:周日为0', db_index=True) |
|
| 83 |
+ timeslice = models.IntegerField(_(u'timeslice'), default=SLICE0, choices=TIME_SLICE, help_text=u'时间段', db_index=True) |
|
| 84 |
+ body = models.ForeignKey(MachineBodyInfo, verbose_name=_(u'body'), blank=True, null=True, help_text=u'机身') |
|
| 85 |
+ back = models.ForeignKey(MachineBackInfo, verbose_name=_(u'back'), blank=True, null=True, help_text=u'机背') |
|
| 86 |
+ |
|
| 87 |
+ handle_status = models.IntegerField(_(u'handle_status'), choices=HANDLE_STATUS, default=NOT_HANDLE, help_text=u'处理状态') |
|
| 88 |
+ |
|
| 89 |
+ class Meta: |
|
| 90 |
+ verbose_name = _(u'machinesupportprebookinfo') |
|
| 91 |
+ verbose_name_plural = _(u'machinesupportprebookinfo') |
|
| 92 |
+ |
|
| 93 |
+ def __unicode__(self): |
|
| 94 |
+ return unicode(self.pk) |
@@ -0,0 +1,7 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.test import TestCase |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+# Create your tests here. |
@@ -0,0 +1,57 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from logit import logit |
|
| 5 |
+ |
|
| 6 |
+from support.models import MachineBackInfo, MachineBodyInfo, MachineSupportPrebookInfo |
|
| 7 |
+from utils.error.errno_utils import MachineStatusCode |
|
| 8 |
+from utils.error.response_utils import response |
|
| 9 |
+ |
|
| 10 |
+ |
|
| 11 |
+@logit |
|
| 12 |
+def support_info_api(request): |
|
| 13 |
+ bodys = MachineBodyInfo.objects.filter(status=True).order_by('position')
|
|
| 14 |
+ bodys = [body.data for body in bodys] |
|
| 15 |
+ |
|
| 16 |
+ backs = MachineBackInfo.objects.filter(status=True).order_by('position')
|
|
| 17 |
+ backs = [back.data for back in backs] |
|
| 18 |
+ |
|
| 19 |
+ return response(200, 'Get Support Info Success', u'获取支持信息成功', {
|
|
| 20 |
+ 'bodys': bodys, |
|
| 21 |
+ 'backs': backs, |
|
| 22 |
+ }) |
|
| 23 |
+ |
|
| 24 |
+ |
|
| 25 |
+@logit |
|
| 26 |
+def support_prebook_submit_api(request): |
|
| 27 |
+ user_id = request.POST.get('user_id', '')
|
|
| 28 |
+ name = request.POST.get('name', '')
|
|
| 29 |
+ sex = int(request.POST.get('sex', 0))
|
|
| 30 |
+ phone = request.POST.get('phone', '')
|
|
| 31 |
+ weekday = int(request.POST.get('weekday', 0))
|
|
| 32 |
+ timeslice = int(request.POST.get('timeslice', 0))
|
|
| 33 |
+ body = int(request.POST.get('body', 0))
|
|
| 34 |
+ back = int(request.POST.get('back', 0))
|
|
| 35 |
+ |
|
| 36 |
+ try: |
|
| 37 |
+ body = MachineBodyInfo.objects.get(pk=body) |
|
| 38 |
+ except MachineBodyInfo.DoesNotExist: |
|
| 39 |
+ return response(MachineStatusCode.MACHINE_BODY_NOT_FOUND) |
|
| 40 |
+ |
|
| 41 |
+ try: |
|
| 42 |
+ back = MachineBackInfo.objects.get(pk=back) |
|
| 43 |
+ except MachineBackInfo.DoesNotExist: |
|
| 44 |
+ return response(MachineStatusCode.MACHINE_BACK_NOT_FOUND) |
|
| 45 |
+ |
|
| 46 |
+ MachineSupportPrebookInfo.objects.create( |
|
| 47 |
+ user_id=user_id, |
|
| 48 |
+ name=name, |
|
| 49 |
+ sex=sex, |
|
| 50 |
+ phone=phone, |
|
| 51 |
+ weekday=weekday, |
|
| 52 |
+ timeslice=timeslice, |
|
| 53 |
+ body=body, |
|
| 54 |
+ back=back, |
|
| 55 |
+ ) |
|
| 56 |
+ |
|
| 57 |
+ return response(200, 'Submit Support Info Success', u'提交支持信息成功') |
@@ -0,0 +1,43 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from StatusCode import BaseStatusCode, StatusCodeField |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+class ProfileStatusCode(BaseStatusCode): |
|
| 7 |
+ """ 用户相关错误码 4001xx """ |
|
| 8 |
+ PROFILE_NOT_FOUND = StatusCodeField(400101, 'Profile Not Found', description=u'用户不存在') |
|
| 9 |
+ # 手机号 |
|
| 10 |
+ PHONE_ALREADY_EXISTS = StatusCodeField(400105, 'Phone Already Exists', description=u'手机号已经存在') |
|
| 11 |
+ |
|
| 12 |
+ |
|
| 13 |
+class MachineStatusCode(BaseStatusCode): |
|
| 14 |
+ """ 机器相关错误码 4021xx """ |
|
| 15 |
+ MACHINE_BODY_NOT_FOUND = StatusCodeField(402101, 'Machine Body Not Found', description=u'机身不存在') |
|
| 16 |
+ MACHINE_BACK_NOT_FOUND = StatusCodeField(402102, 'Machine Back Not Found', description=u'机背不存在') |
|
| 17 |
+ |
|
| 18 |
+ |
|
| 19 |
+class OrderStatusCode(BaseStatusCode): |
|
| 20 |
+ """ 订单/支付相关错误码 4040xx """ |
|
| 21 |
+ UNIFIED_ORDER_FAIL = StatusCodeField(404000, 'Unified Order Fail', description=u'统一下单失败') |
|
| 22 |
+ ORDER_NOT_FOUND = StatusCodeField(404001, 'Order Not Found', description=u'订单不存在') |
|
| 23 |
+ # 订单支付状态 |
|
| 24 |
+ ORDER_NOT_PAY = StatusCodeField(404011, 'Order Not Pay', description=u'订单未支付') |
|
| 25 |
+ ORDER_PAYING = StatusCodeField(404012, 'Order Paying', description=u'订单支付中') |
|
| 26 |
+ ORDER_PAY_FAIL = StatusCodeField(404013, 'Order Pay Fail', description=u'微信支付失败') |
|
| 27 |
+ # 通知校验状态 |
|
| 28 |
+ SIGN_CHECK_FAIL = StatusCodeField(404090, 'Sign Check Fail', description=u'签名校验失败') |
|
| 29 |
+ FEE_CHECK_FAIL = StatusCodeField(404091, 'FEE Check Fail', description=u'金额校验失败') |
|
| 30 |
+ |
|
| 31 |
+ |
|
| 32 |
+class PayStatusCode(BaseStatusCode): |
|
| 33 |
+ """ 支付相关错误码 4041xx """ |
|
| 34 |
+ |
|
| 35 |
+ |
|
| 36 |
+class WithdrawStatusCode(BaseStatusCode): |
|
| 37 |
+ """ 提现相关错误码 4042xx """ |
|
| 38 |
+ BALANCE_INSUFFICIENT = StatusCodeField(404200, 'Balance Insufficient', description=u'提现金额不足') |
|
| 39 |
+ |
|
| 40 |
+ |
|
| 41 |
+class TokenStatusCode(BaseStatusCode): |
|
| 42 |
+ """ 票据相关错误码 4090xx """ |
|
| 43 |
+ TOKEN_NOT_FOUND = StatusCodeField(409901, 'Token Not Found', description=u'票据不存在') |
@@ -0,0 +1,18 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.http import JsonResponse |
|
| 4 |
+from StatusCode import StatusCodeField |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+def response_data(status_code=200, message=None, description=None, data={}, **kwargs):
|
|
| 8 |
+ return dict({
|
|
| 9 |
+ 'status': status_code, |
|
| 10 |
+ 'message': message, |
|
| 11 |
+ 'description': description, |
|
| 12 |
+ 'data': data, |
|
| 13 |
+ }, **kwargs) |
|
| 14 |
+ |
|
| 15 |
+ |
|
| 16 |
+def response(status_code=200, message=None, description=None, data={}, **kwargs):
|
|
| 17 |
+ message, description = (message or status_code.message, description or status_code.description) if isinstance(status_code, StatusCodeField) else (message, description) |
|
| 18 |
+ return JsonResponse(response_data(status_code, message, description, data, **kwargs), safe=False) |
@@ -0,0 +1,6 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.conf import settings |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+r = settings.REDIS_CACHE |
@@ -0,0 +1 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
@@ -0,0 +1,7 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.conf import settings |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+def upload_file_url(file_path): |
|
| 7 |
+ return file_path and ('{}{}'.format(settings.DOMAIN, file_path.url)) or ''
|