s-code">
+def maintenance_list(request):
102
+    user_id = request.POST.get('user_id', '')
103
+
104
+    maintenaces = MaintenaceInfo.objects.filter(user_id=user_id, status=True)
105
+    maintenaces = [maintenace.data for maintenace in maintenaces]
65 106
 
66 107
     return response(data={
67
-        'points': points,
108
+        'maintenaces': maintenaces,
68 109
     })

+ 14 - 6
api/urls.py

@@ -4,8 +4,8 @@ from django.conf.urls import url
4 4
 from django_file_upload import views as file_views
5 5
 
6 6
 from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views,
7
-                 maintenance_views, mch_views, member_views, model_views, operator_views, refresh_views, sr_views,
8
-                 staff_views, wx_views)
7
+                 maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views,
8
+                 refresh_views, sr_views, staff_views, wx_views)
9 9
 from miniapp import qy_views
10 10
 from miniapp import views as mini_views
11 11
 from page import oauth_views, sale_views, screen_views
@@ -250,10 +250,10 @@ urlpatterns += [
250 250
 
251 251
 # 维修点
252 252
 urlpatterns += [
253
-    url(r'^maintenance/point/add$', maintenance_views.maintenance_point_add, name='maintenance_point_add'),
254
-    url(r'^maintenance/point/delete$', maintenance_views.maintenance_point_delete, name='maintenance_point_delete'),
255
-    url(r'^maintenance/point/update$', maintenance_views.maintenance_point_update, name='maintenance_point_update'),
256
-    url(r'^maintenance/point/list$', maintenance_views.maintenance_point_list, name='maintenance_point_list'),
253
+    url(r'^maintenance/point/add$', maintenance_point_views.maintenance_point_add, name='maintenance_point_add'),
254
+    url(r'^maintenance/point/delete$', maintenance_point_views.maintenance_point_delete, name='maintenance_point_delete'),
255
+    url(r'^maintenance/point/update$', maintenance_point_views.maintenance_point_update, name='maintenance_point_update'),
256
+    url(r'^maintenance/point/list$', maintenance_point_views.maintenance_point_list, name='maintenance_point_list'),
257 257
 ]
258 258
 
259 259
 # 快递公司
@@ -263,3 +263,11 @@ urlpatterns += [
263 263
     url(r'^express/update$', express_views.express_update, name='express_update'),
264 264
     url(r'^express/list$', express_views.express_list, name='express_list'),
265 265
 ]
266
+
267
+# 维修
268
+urlpatterns += [
269
+    url(r'^maintenance/add$', maintenance_views.maintenance_add, name='maintenance_add'),
270
+    url(r'^maintenance/delete$', maintenance_views.maintenance_delete, name='maintenance_delete'),
271
+    url(r'^maintenance/update$', maintenance_views.maintenance_update, name='maintenance_update'),
272
+    url(r'^maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'),
273
+]

+ 1 - 1
maintenance/admin.py

@@ -14,7 +14,7 @@ class ExpressCompanyInfoAdmin(admin.ModelAdmin):
14 14
 
15 15
 
16 16
 class MaintenaceInfoAdmin(admin.ModelAdmin):
17
-    list_display = ('name', 'phone', 'address', 'sn', 'desc', 'point_id', 'point_name', 'express_name', 'tracking_number', 'maintenace_status', 'status', 'created_at', 'updated_at')
17
+    list_display = ('user_id', 'name', 'phone', 'address', 'sn', 'desc', 'point_id', 'point_name', 'express_name', 'tracking_number', 'maintenace_status', 'status', 'created_at', 'updated_at')
18 18
 
19 19
 
20 20
 admin.site.register(MaintenacePointInfo, MaintenacePointInfoAdmin)

+ 20 - 0
maintenance/migrations/0002_maintenaceinfo_user_id.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.29 on 2021-09-15 07:17
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
+        ('maintenance', '0001_initial'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='maintenaceinfo',
17
+            name='user_id',
18
+            field=models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='user_id'),
19
+        ),
20
+    ]

+ 24 - 0
maintenance/models.py

@@ -3,6 +3,7 @@
3 3
 from django.db import models
4 4
 from django.utils.translation import ugettext_lazy as _
5 5
 from django_models_ext import BaseModelMixin
6
+from TimeConvert import TimeConvert as tc
6 7
 
7 8
 
8 9
 class MaintenacePointInfo(BaseModelMixin):
@@ -21,6 +22,7 @@ class MaintenacePointInfo(BaseModelMixin):
21 22
     @property
22 23
     def data(self):
23 24
         return {
25
+            'id': self.pk,
24 26
             'name': self.name,
25 27
             'province': self.province,
26 28
             'location': self.location,
@@ -41,11 +43,14 @@ class ExpressCompanyInfo(BaseModelMixin):
41 43
     @property
42 44
     def data(self):
43 45
         return {
46
+            'id': self.pk,
44 47
             'name': self.name,
45 48
         }
46 49
 
47 50
 
48 51
 class MaintenaceInfo(BaseModelMixin):
52
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
53
+
49 54
     name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')
50 55
     phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'电话')
51 56
     address = models.CharField(_(u'address'), max_length=255, blank=True, null=True, help_text=u'地址')
@@ -67,3 +72,22 @@ class MaintenaceInfo(BaseModelMixin):
67 72
 
68 73
     def __unicode__(self):
69 74
         return '%d' % self.pk
75
+
76
+    @property
77
+    def data(self):
78
+        return {
79
+            'id': self.pk,
80
+            'user_id': self.user_id,
81
+            'name': self.name,
82
+            'phone': self.phone,
83
+            'address': self.address,
84
+            'sn': self.sn,
85
+            'desc': self.desc,
86
+            'point_id': self.point_id,
87
+            'point_name': self.point_name,
88
+            'express_name': self.express_name,
89
+            'tracking_number': self.tracking_number,
90
+            'maintenace_status': self.maintenace_status,
91
+            'created_at': tc.local_string(utc_dt=self.created_at),
92
+            'updated_at': tc.local_string(utc_dt=self.updated_at),
93
+        }

BIN
pre/static/腾龙镜头适用机型V1.xlsx


+ 5 - 0
utils/error/errno_utils.py

@@ -118,6 +118,11 @@ class ExpressStatusCode(BaseStatusCode):
118 118
     EXPRESS_NOT_FOUND = StatusCodeField(507001, 'Express Not Found', description=u'快递公司不存在')
119 119
 
120 120
 
121
+class MaintenaceStatusCode(BaseStatusCode):
122
+    """ 维修相关错误码 5080xx """
123
+    MAINTENACE_NOT_FOUND = StatusCodeField(508001, 'Maintenace Not Found', description=u'维修不存在')
124
+
125
+
121 126
 class AdministratorStatusCode(BaseStatusCode):
122 127
     """ 操作员相关错误码 4002xx """
123 128
     ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在')

kodo - Gogs: Go Git Service

Aucune description

storage_qiniu_utils.py 5.2KB

    # -*- coding: utf-8 -*- import os import shortuuid from django.conf import settings from django.core.files.storage import default_storage from django.db import transaction from django_file_md5 import calculate_md5 from photo.models import PhotoUUIDInfo from utils.qiniucdn import upload_file_path from utils.thumbnail_utils import make_thumbnail from utils.watermark_utils import watermark_wrap class DotDict(dict): """ dot.notation access to dictionary attributes """ def __getattr__(self, attr): return self.get(attr) __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ def file_abspath(file_path=None): return os.path.join(settings.MEDIA_ROOT, file_path).replace('\\', '/') @transaction.atomic def file_save(file_=None, file_path=None, prefix='img', ext='.jpeg', watermark=False, thumbnail=False): photo_path, photo_watermark_path, photo_thumbnail_path, photo_thumbnail2_path = '', '', '', '' # Photo file_ = file_ or default_storage.open(file_path) # Ext ext = os.path.splitext(file_.name)[-1] or ext # Photo MD5 photo_md5 = calculate_md5(file_) # Photo UUID Get or Create photo, created = PhotoUUIDInfo.objects.select_for_update().get_or_create(photo_md5=photo_md5) # 无水印 if not photo.photo_path: photo_path = '{}/{}{}'.format(prefix, shortuuid.uuid(), ext) if default_storage.exists(photo_path): default_storage.delete(photo_path) default_storage.save(photo_path, file_) photo_path_qiniu = upload_file_path(file_abspath(photo_path), bucket='photo') photo.photo_path = photo_path_qiniu photo.save() else: if ((watermark and not photo.photo_watermark_path) or (thumbnail and not (photo.photo_thumbnail_path and photo.photo_thumbnail2_path))) and (not default_storage.exists(photo.photo_path)): default_storage.save(photo.photo_path, file_) # 有水印 if watermark: if not photo.photo_watermark_path: if settings.WATERMARK_OR_NOT: photo_watermark_path = 'photo/{}{}'.format(shortuuid.uuid(), ext) watermark_wrap( file_abspath(photo_path), settings.WATERMARK_LOGO_PATH, file_abspath(photo_watermark_path) ) photo_watermark_path_qiniu = upload_file_path(file_abspath(photo_watermark_path), bucket='watermark') photo.photo_watermark_path = photo_watermark_path_qiniu else: photo.photo_watermark_path = photo_path_qiniu photo.save() # 缩略图 if thumbnail: if not photo.photo_thumbnail_path: # 双列: 540, 40-50K photo_thumbnail_path = photo_path.replace('.', '_thumbnail.') photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumbnail( file_abspath(photo_path), file_abspath(photo_thumbnail_path), settings.THUMBNAIL_MAX_WIDTH ) photo_thumbnail_path_qiniu = upload_file_path(file_abspath(photo_thumbnail_path), bucket='thumbnail') photo.photo_w = photo_w photo.photo_h = photo_h photo.photo_thumbnail_path = photo_thumbnail_path_qiniu photo.photo_thumbnail_w = photo_thumbnail_w photo.photo_thumbnail_h = photo_thumbnail_h if not photo.photo_thumbnail2_path: # 单列: 1080, xx-100K photo_thumbnail2_path = photo_path.replace('.', '_thumbnail2.') photo_w, photo_h, photo_thumbnail2_w, photo_thumbnail2_h = make_thumbnail( file_abspath(photo_path), file_abspath(photo_thumbnail2_path), settings.THUMBNAIL_MAX_WIDTH2 ) if watermark and settings.WATERMARK_OR_NOT: watermark_wrap( file_abspath(photo_thumbnail2_path), settings.WATERMARK_LOGO_PATH, file_abspath(photo_thumbnail2_path) ) photo_thumbnail2_path_qiniu = upload_file_path(file_abspath(photo_thumbnail2_path), bucket='thumbnail2') photo.photo_w = photo_w photo.photo_h = photo_h photo.photo_thumbnail2_path = photo_thumbnail2_path_qiniu photo.photo_thumbnail2_w = photo_thumbnail2_w photo.photo_thumbnail2_h = photo_thumbnail2_h photo.save() # 本地删除 for path in [photo_path, photo_watermark_path, photo_thumbnail_path, photo_thumbnail2_path]: if path and default_storage.exists(path): default_storage.delete(path) return DotDict({ 'ext': ext, 'photo_md5': photo_md5, 'photo_path': photo.photo_path, 'photo_w': photo.photo_w, 'photo_h': photo.photo_h, 'photo_watermark_path': photo.photo_watermark_path, 'photo_thumbnail_path': photo.photo_thumbnail_path, 'photo_thumbnail_w': photo.photo_thumbnail_w, 'photo_thumbnail_h': photo.photo_thumbnail_h, 'photo_thumbnail2_path': photo.photo_thumbnail2_path, 'photo_thumbnail2_w': photo.photo_thumbnail2_w, 'photo_thumbnail2_h': photo.photo_thumbnail2_h, })