:art: Add complement_code

huangqimin001 4 年之前
父節點
當前提交
e7da55aaf2

+ 1 - 0
account/admin.py

@@ -18,6 +18,7 @@ class UserInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin):
18 18
         if obj.test_user:
19 19
             ConsumeInfoSubmitLogInfo.objects.filter(user_id=obj.user_id).update(test_user=True)
20 20
 
21
+
21 22
 class UserIntegralIncomeExpensesInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin):
22 23
     list_display = ('user_id', 'model_id', 'model_name', 'code', 'integral', 'remark', 'updated_at', 'created_at')
23 24
     search_fields = ('user_id',)

+ 3 - 3
account/models.py

@@ -3,7 +3,6 @@
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, SexModelMixin
6
-from jsonfield import JSONField
7 6
 from TimeConvert import TimeConvert as tc
8 7
 
9 8
 from kodo.basemodels import LensmanTypeBoolMixin
@@ -324,6 +323,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):
324 323
             'code': self.memberusercardcode,
325 324
         }
326 325
 
326
+
327 327
 class UserIntegralIncomeExpensesInfo(BaseModelMixin):
328 328
     PRODUCT = 0
329 329
     SHARE = 1
@@ -339,7 +339,7 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin):
339 339
 
340 340
     brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
341 341
     brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
342
-    
342
+
343 343
     integral_from = models.IntegerField(_(u'integral_from'), choices=INTEGRAL_FROM, default=PRODUCT, help_text=u'积分来源')
344 344
 
345 345
     model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
@@ -356,4 +356,4 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin):
356 356
         verbose_name_plural = _(u'userinfointegralincomeexpensesinfo')
357 357
 
358 358
     def __unicode__(self):
359
-        return '%d' % self.pk
359
+        return '%d' % self.pk

+ 1 - 1
account/serializers.py

@@ -1,10 +1,10 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
-from django.contrib.auth.models import Group, User
4 3
 from rest_framework import serializers
5 4
 
6 5
 from account.models import UserInfo
7 6
 
7
+
8 8
 class UserInfoSerializer(serializers.HyperlinkedModelSerializer):
9 9
     class Meta:
10 10
         model = UserInfo

+ 4 - 1
account/views.py

@@ -1 +1,4 @@
1
-# -*- coding: utf-8 -*-
1
+from django.shortcuts import render
2
+
3
+
4
+# Create your views here.

+ 71 - 49
api/admin_views.py

@@ -128,7 +128,7 @@ def userinfo(request):
128 128
     except AdministratorInfo.DoesNotExist:
129 129
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
130 130
 
131
-    userinfos = UserInfo.objects.filter(status=True).order_by('-created_at')
131
+    userinfos = UserInfo.objects.filter(status=True).order_by('-pk')
132 132
     count = userinfos.count()
133 133
     userinfos, left = pagination(userinfos, page, num)
134 134
     userinfos = [userinfo.admindata for userinfo in userinfos]
@@ -160,7 +160,7 @@ def query_usercoupons(request):
160 160
     except AdministratorInfo.DoesNotExist:
161 161
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
162 162
 
163
-    coupons = UserCouponInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-created_at')
163
+    coupons = UserCouponInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-pk')
164 164
     coupons = [coupon.admindata for coupon in coupons]
165 165
 
166 166
     return response(200, 'User Coupon Success', u'用户劵列表获取成功', data={
@@ -188,7 +188,7 @@ def query_usergoods(request):
188 188
     except AdministratorInfo.DoesNotExist:
189 189
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
190 190
 
191
-    logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-created_at')
191
+    logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-pk')
192 192
     logs = [log.adminuserdata for log in logs]
193 193
 
194 194
     return response(200, 'Userinfo Goods Success', u'用户商品列表获取成功', data={
@@ -221,7 +221,7 @@ def query_userinfo(request):
221 221
     except AdministratorInfo.DoesNotExist:
222 222
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
223 223
 
224
-    userinfos = UserInfo.objects.filter(Q(status=True) & (Q(user_id__icontains=query) | Q(nickname__icontains=query) | Q(phone__icontains=query) |  Q(memberusercardcode__icontains=query))).order_by('-created_at')
224
+    userinfos = UserInfo.objects.filter(Q(status=True) & (Q(user_id__icontains=query) | Q(nickname__icontains=query) | Q(phone__icontains=query) | Q(memberusercardcode__icontains=query))).order_by('-pk')
225 225
 
226 226
     if level:
227 227
         userinfos = userinfos.filter(level=level)
@@ -534,10 +534,10 @@ def statistic_member(request):
534 534
     else:
535 535
         userinfos = UserInfo.objects.filter(test_user=False, level__gte=1, status=True)
536 536
 
537
-    #关注公众号数
537
+    # 关注公众号数
538 538
     mp_num = userinfos.filter(subscribe=True).count()
539 539
 
540
-    #领取保卡数
540
+    # 领取保卡数
541 541
     membercard_num = userinfos.filter(has_membercard=True).count()
542 542
 
543 543
     # 会员级别
@@ -565,6 +565,7 @@ def statistic_member(request):
565 565
         'province_logs': province_logs,
566 566
     })
567 567
 
568
+
568 569
 def statistic_coupon(request):
569 570
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
570 571
     admin_id = request.POST.get('admin_id', '')
@@ -587,13 +588,14 @@ def statistic_coupon(request):
587 588
         used_coupons = UserCouponInfo.objects.filter(has_used=True, status=True)
588 589
 
589 590
     type_has_used_logs = list(used_coupons.values('coupon_title', 'coupon_value').annotate(num=Count('user_coupon_id')))
590
-    
591
+
591 592
     return response(200, 'Get Consumer Statistic Success', u'获取用户劵统计成功', data={
592 593
         'froms_logs': froms_logs,
593 594
         'type_logs': type_logs,
594 595
         'type_has_used_logs': type_has_used_logs,
595 596
     })
596 597
 
598
+
597 599
 def record_consumer(request):
598 600
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
599 601
     page = request.POST.get('page', 1)
@@ -613,7 +615,7 @@ def record_consumer(request):
613 615
     except AdministratorInfo.DoesNotExist:
614 616
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
615 617
 
616
-    logs = ConsumeInfoSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & (Q(model_name__icontains=query) | Q(phone__icontains=query) | Q(serialNo__icontains=query))).order_by('-created_at')
618
+    logs = ConsumeInfoSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & (Q(model_name__icontains=query) | Q(phone__icontains=query) | Q(serialNo__icontains=query))).order_by('-pk')
617 619
 
618 620
     if dupload:
619 621
         logs = logs.filter(dupload=dupload)
@@ -634,6 +636,7 @@ def record_consumer(request):
634 636
         'left': left
635 637
     })
636 638
 
639
+
637 640
 def record_consumer_batch(request):
638 641
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
639 642
     admin_id = request.POST.get('admin_id', '')
@@ -645,9 +648,9 @@ def record_consumer_batch(request):
645 648
     for log in logs:
646 649
         try:
647 650
             infos.append(ConsumeInfoSubmitLogInfo.objects.get(model_name__icontains=log['model_name'], serialNo=log['code'], status=True, dupload=False).admindata)
648
-        except:
651
+        except ConsumeInfoSubmitLogInfo.DoesNotExist:
649 652
             unknows.append(log)
650
-    
653
+
651 654
     return response(200, 'Batch Get Record Sale Success', u'批量获取销售员销售记录', data={
652 655
         'logs': infos,
653 656
         'unknows': unknows
@@ -702,6 +705,7 @@ def record_sale(request):
702 705
         'left': left
703 706
     })
704 707
 
708
+
705 709
 def record_sale_batch(request):
706 710
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
707 711
     admin_id = request.POST.get('admin_id', '')
@@ -713,14 +717,15 @@ def record_sale_batch(request):
713 717
     for log in logs:
714 718
         try:
715 719
             infos.append(SaleclerkSubmitLogInfo.objects.get(model_name__icontains=log['model_name'], code=log['code'], status=True, dupload=False).admindata)
716
-        except:
720
+        except SaleclerkSubmitLogInfo.DoesNotExist:
717 721
             unknows.append(log)
718
-    
722
+
719 723
     return response(200, 'Batch Get Record Sale Success', u'批量获取销售员销售记录', data={
720 724
         'logs': infos,
721 725
         'unknows': unknows
722 726
     })
723 727
 
728
+
724 729
 def model_list(request):
725 730
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
726 731
     admin_id = request.POST.get('admin_id', '')
@@ -776,11 +781,11 @@ def member_goods_order(request):
776 781
     except AdministratorInfo.DoesNotExist:
777 782
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
778 783
 
779
-    orders = GoodsOrderInfo.objects.filter(Q(phone__icontains=query) | Q(user_id=query) | Q(title__icontains=query) & Q(status=True)).order_by('-created_at')
784
+    orders = GoodsOrderInfo.objects.filter(Q(phone__icontains=query) | Q(user_id=query) | Q(title__icontains=query) & Q(status=True)).order_by('-pk')
780 785
 
781 786
     if good_type:
782 787
         orders = orders.filter(good_type=good_type)
783
-    
788
+
784 789
     # 未发货,即快递单号为空
785 790
     if order_status == 1:
786 791
         orders = orders.filter(Q(tracking_number__isnull=True) | Q(tracking_number=''))
@@ -816,6 +821,7 @@ def member_goods_order_update(request):
816 821
 
817 822
     return response(200, 'Member Goods Order Update Success', u'会员商品订单修改成功')
818 823
 
824
+
819 825
 def member_goods_order_batch_update(request):
820 826
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
821 827
     admin_id = request.POST.get('admin_id', '')
@@ -833,7 +839,7 @@ def member_goods_order_batch_update(request):
833 839
     for order in orders:
834 840
         try:
835 841
             GoodsOrderInfo.objects.filter(order_id=order['order_id'], status=True).update(tracking_number=order['tracking_number'])
836
-        except:
842
+        except GoodsOrderInfo.DoesNotExist:
837 843
             err_orders.append(order['order_id'])
838 844
 
839 845
     if err_orders:
@@ -870,7 +876,7 @@ def record_warehouse(request):
870 876
         end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
871 877
         logs = logs.filter(created_at__range=(start_time, end_time))
872 878
 
873
-    logs = logs.order_by('-created_at')
879
+    logs = logs.order_by('-pk')
874 880
 
875 881
     count = logs.count()
876 882
     logs, left = pagination(logs, page, num)
@@ -882,6 +888,7 @@ def record_warehouse(request):
882 888
         'count': count
883 889
     })
884 890
 
891
+
885 892
 def member_activity_list(request):
886 893
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
887 894
     admin_id = request.POST.get('admin_id', '')
@@ -905,9 +912,9 @@ def member_activity_list(request):
905 912
         start_time = datetime.strptime(start_time, '%Y%m%d')
906 913
         end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
907 914
         logs = logs.filter(created_at__range=(start_time, end_time))
908
-    
909
-    logs = logs.order_by('-created_at')
910
- 
915
+
916
+    logs = logs.order_by('-pk')
917
+
911 918
     count = logs.count()
912 919
     logs, left = pagination(logs, page, num)
913 920
     logs = [log.admindata for log in logs]
@@ -917,6 +924,7 @@ def member_activity_list(request):
917 924
         'count': count
918 925
     })
919 926
 
927
+
920 928
 def member_activity_details(request):
921 929
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
922 930
     admin_id = request.POST.get('admin_id', '')
@@ -931,15 +939,16 @@ def member_activity_details(request):
931 939
 
932 940
     try:
933 941
         log = MemberActivityInfo.objects.get(activity_id=activity_id)
934
-    except:
942
+    except MemberActivityInfo.DoesNotExist:
935 943
         return response()
936
-    
944
+
937 945
     log = log.admindetails
938 946
 
939 947
     return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={
940 948
         'log': log,
941 949
     })
942 950
 
951
+
943 952
 def member_activity_update(request):
944 953
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
945 954
     admin_id = request.POST.get('admin_id', '')
@@ -971,9 +980,9 @@ def member_activity_update(request):
971 980
 
972 981
     try:
973 982
         log = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
974
-    except:
983
+    except MemberActivityInfo.DoesNotExist:
975 984
         return response()
976
-    
985
+
977 986
     log.title = title
978 987
     log.subtitle = subtitle
979 988
     log.date = datetime.strptime(date + ' 23:59:59', '%Y-%m-%d %H:%M:%S')
@@ -994,6 +1003,7 @@ def member_activity_update(request):
994 1003
 
995 1004
     return response(200, 'MemberActivityInfo Update Success', u'会员活动更新成功')
996 1005
 
1006
+
997 1007
 def member_activity_create(request):
998 1008
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
999 1009
     admin_id = request.POST.get('admin_id', '')
@@ -1014,7 +1024,6 @@ def member_activity_create(request):
1014 1024
     share_h5_link = request.POST.get('share_h5_link', '')
1015 1025
     activity_state = int(request.POST.get('activity_state', 0))
1016 1026
 
1017
-
1018 1027
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1019 1028
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1020 1029
 
@@ -1045,6 +1054,7 @@ def member_activity_create(request):
1045 1054
 
1046 1055
     return response(200, 'MemberActivityInfo Create Success', u'会员活动创建成功')
1047 1056
 
1057
+
1048 1058
 def member_activity_share_list(request):
1049 1059
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1050 1060
     admin_id = request.POST.get('admin_id', '')
@@ -1065,7 +1075,7 @@ def member_activity_share_list(request):
1065 1075
     total_integral = logs.aggregate(Sum('integral'))['integral__sum']
1066 1076
 
1067 1077
     logs = logs.values('share_user_id').annotate(integral_sum=Sum('integral'), group_count=Count('open_gid'), user_count=Count('click_user_id')).order_by('-user_count')
1068
-    
1078
+
1069 1079
     count = logs.count()
1070 1080
     logs, left = pagination(logs, page, num)
1071 1081
 
@@ -1076,6 +1086,7 @@ def member_activity_share_list(request):
1076 1086
         'total_integral': total_integral
1077 1087
     })
1078 1088
 
1089
+
1079 1090
 def coupon_list(request):
1080 1091
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1081 1092
     admin_id = request.POST.get('admin_id', '')
@@ -1099,22 +1110,25 @@ def coupon_list(request):
1099 1110
         start_time = datetime.strptime(start_time, '%Y%m%d')
1100 1111
         end_time = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
1101 1112
         logs = logs.filter(created_at__range=(start_time, end_time))
1102
-    
1103
-    logs = logs.order_by('-created_at')
1104
- 
1113
+
1114
+    logs = logs.order_by('-pk')
1115
+
1105 1116
     count = logs.count()
1106 1117
     logs, left = pagination(logs, page, num)
1107 1118
     logs = [log.admindata for log in logs]
1119
+
1108 1120
     return response(200, 'Get CouponInfo List Success', u'获取劵列表成功', data={
1109 1121
         'logs': logs,
1110 1122
         'left': left,
1111 1123
         'count': count
1112 1124
     })
1113 1125
 
1126
+
1114 1127
 def coupon_details(request):
1115 1128
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1116 1129
     admin_id = request.POST.get('admin_id', '')
1117 1130
     coupon_id = request.POST.get('coupon_id', '')
1131
+
1118 1132
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1119 1133
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1120 1134
 
@@ -1125,15 +1139,16 @@ def coupon_details(request):
1125 1139
 
1126 1140
     try:
1127 1141
         log = CouponInfo.objects.get(coupon_id=coupon_id)
1128
-    except:
1142
+    except CouponInfo.DoesNotExist:
1129 1143
         return response()
1130
-    
1144
+
1131 1145
     log = log.admindetails
1132 1146
 
1133 1147
     return response(200, 'Get Member Activity Record Details Success', u'获取会员活动详情成功', data={
1134 1148
         'log': log,
1135 1149
     })
1136 1150
 
1151
+
1137 1152
 def coupon_create(request):
1138 1153
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1139 1154
     admin_id = request.POST.get('admin_id', '')
@@ -1155,14 +1170,14 @@ def coupon_create(request):
1155 1170
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1156 1171
 
1157 1172
     info = CouponInfo.objects.create(
1158
-        brand_id = brand_id,
1159
-        coupon_title = coupon_title,
1160
-        coupon_detail = coupon_detail,
1161
-        coupon_value = coupon_value,
1162
-        coupon_image = coupon_image,
1163
-        coupon_expire_type = coupon_expire_type,
1164
-        coupon_valid_period = coupon_valid_period,
1165
-        is_coupon_admin_writeoff = is_coupon_admin_writeoff
1173
+        brand_id=brand_id,
1174
+        coupon_title=coupon_title,
1175
+        coupon_detail=coupon_detail,
1176
+        coupon_value=coupon_value,
1177
+        coupon_image=coupon_image,
1178
+        coupon_expire_type=coupon_expire_type,
1179
+        coupon_valid_period=coupon_valid_period,
1180
+        is_coupon_admin_writeoff=is_coupon_admin_writeoff,
1166 1181
     )
1167 1182
 
1168 1183
     if coupon_expire_at:
@@ -1171,6 +1186,7 @@ def coupon_create(request):
1171 1186
 
1172 1187
     return response(200, 'CouponInfo Create Success', u'劵创建成功')
1173 1188
 
1189
+
1174 1190
 def coupon_update(request):
1175 1191
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1176 1192
     admin_id = request.POST.get('admin_id', '')
@@ -1194,9 +1210,9 @@ def coupon_update(request):
1194 1210
 
1195 1211
     try:
1196 1212
         log = CouponInfo.objects.get(coupon_id=coupon_id, status=True)
1197
-    except:
1213
+    except CouponInfo.DoesNotExist:
1198 1214
         return response()
1199
-    
1215
+
1200 1216
     log.brand_id = brand_id
1201 1217
     log.coupon_title = coupon_title
1202 1218
     log.coupon_detail = coupon_detail
@@ -1211,6 +1227,7 @@ def coupon_update(request):
1211 1227
 
1212 1228
     return response(200, 'CouponInfo Update Success', u'劵更新成功')
1213 1229
 
1230
+
1214 1231
 def coupon_delete(request):
1215 1232
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1216 1233
     admin_id = request.POST.get('admin_id', '')
@@ -1226,14 +1243,15 @@ def coupon_delete(request):
1226 1243
 
1227 1244
     try:
1228 1245
         log = CouponInfo.objects.get(coupon_id=coupon_id, status=True)
1229
-    except:
1246
+    except CouponInfo.DoesNotExist:
1230 1247
         return response()
1231
-    
1248
+
1232 1249
     log.status = False
1233 1250
     log.save()
1234 1251
 
1235 1252
     return response(200, 'CouponInfo Delete Success', u'劵删除成功')
1236 1253
 
1254
+
1237 1255
 def member_goods_list(request):
1238 1256
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1239 1257
     admin_id = request.POST.get('admin_id', '')
@@ -1249,8 +1267,8 @@ def member_goods_list(request):
1249 1267
     except AdministratorInfo.DoesNotExist:
1250 1268
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
1251 1269
 
1252
-    logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-created_at')
1253
-     
1270
+    logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-pk')
1271
+
1254 1272
     count = logs.count()
1255 1273
     logs, left = pagination(logs, page, num)
1256 1274
     logs = [log.admindata for log in logs]
@@ -1260,10 +1278,12 @@ def member_goods_list(request):
1260 1278
         'count': count
1261 1279
     })
1262 1280
 
1281
+
1263 1282
 def member_goods_details(request):
1264 1283
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1265 1284
     admin_id = request.POST.get('admin_id', '')
1266 1285
     good_id = request.POST.get('good_id', '')
1286
+
1267 1287
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
1268 1288
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
1269 1289
 
@@ -1274,15 +1294,16 @@ def member_goods_details(request):
1274 1294
 
1275 1295
     try:
1276 1296
         log = GoodsInfo.objects.get(good_id=good_id)
1277
-    except:
1297
+    except GoodsInfo.DoesNotExist:
1278 1298
         return response()
1279
-    
1299
+
1280 1300
     log = log.admindetails
1281 1301
 
1282 1302
     return response(200, 'Get Member Goods Details Success', u'获取积分商品详情成功', data={
1283 1303
         'log': log,
1284 1304
     })
1285 1305
 
1306
+
1286 1307
 def member_goods_update(request):
1287 1308
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1288 1309
     admin_id = request.POST.get('admin_id', '')
@@ -1307,9 +1328,9 @@ def member_goods_update(request):
1307 1328
 
1308 1329
     try:
1309 1330
         log = GoodsInfo.objects.get(good_id=good_id, status=True)
1310
-    except:
1331
+    except GoodsInfo.DoesNotExist:
1311 1332
         return response()
1312
-    
1333
+
1313 1334
     log.title = title
1314 1335
     log.desc = desc
1315 1336
     log.value = value
@@ -1323,6 +1344,7 @@ def member_goods_update(request):
1323 1344
 
1324 1345
     return response(200, 'GoodsInfo Update Success', u'积分商品更新成功')
1325 1346
 
1347
+
1326 1348
 def member_goods_create(request):
1327 1349
     brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
1328 1350
     admin_id = request.POST.get('admin_id', '')
@@ -1359,4 +1381,4 @@ def member_goods_create(request):
1359 1381
         fee=fee,
1360 1382
     )
1361 1383
 
1362
-    return response(200, 'GoodsInfo Create Success', u'积分商品创建成功')
1384
+    return response(200, 'GoodsInfo Create Success', u'积分商品创建成功')

+ 52 - 0
api/complement_views.py

@@ -0,0 +1,52 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from __future__ import division
4
+
5
+from django_logit import logit
6
+from django_response import response
7
+
8
+from logs.models import ComplementCodeLogInfo
9
+from paginator import pagination
10
+
11
+
12
+@logit(res=True)
13
+def complement_code(request):
14
+    user_id = request.POST.get('user_id', '')
15
+    log_id = request.POST.get('log_id', '')
16
+    name = request.POST.get('name', '')
17
+    phone = request.POST.get('phone', '')
18
+    model_id = request.POST.get('model_id', '')
19
+    model_name = request.POST.get('model_name', '')
20
+    sn = request.POST.get('sn', '')
21
+    shot_path = request.POST.get('shot_path', '')
22
+    invoice_path = request.POST.get('invoice_path', '')
23
+
24
+    log = ComplementCodeLogInfo.objects.update_or_create(user_id=user_id, log_id=log_id, defaults={
25
+        'name': name,
26
+        'phone': phone,
27
+        'model_id': model_id,
28
+        'model_name': model_name,
29
+        'sn': sn,
30
+        'shot_path': shot_path,
31
+        'invoice_path': invoice_path,
32
+    })
33
+
34
+    return response(data={
35
+        'log_id': log.log_id,
36
+    })
37
+
38
+
39
+def complement_code_list(request):
40
+    user_id = request.POST.get('user_id', '')
41
+    page = request.POST.get('page', 1)
42
+    num = request.POST.get('num', 20)
43
+
44
+    logs = ComplementCodeLogInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
45
+
46
+    logs, left = pagination(logs, page, num)
47
+    logs = [log.admindata for log in logs]
48
+
49
+    return response(200, 'Get Complement Code List Success', u'获取补码列表成功', data={
50
+        'logs': logs,
51
+        'left': left,
52
+    })

+ 8 - 7
api/mch_views.py

@@ -356,11 +356,11 @@ def consumer_info_api(request):
356 356
             submit_pk=log.pk,
357 357
         )
358 358
 
359
-    #更新注册时间
359
+    # 更新注册时间
360 360
     if not dupload:
361 361
         user.resgister_at = log.created_at
362 362
         user.save()
363
-    
363
+
364 364
     if not user.test_user and not dupload:
365 365
 
366 366
         # TODO: Make statistic async
@@ -453,7 +453,7 @@ def consumer_info_api(request):
453 453
         user.integral += model.shot_member_integral
454 454
         # 配件不增加会员等级,只发放积分。
455 455
         to_send_coupon = False
456
-        if user.level < UserInfo.MEMBER_BLACK_GOLD and model.category != '调焦器' and model.category !='增倍镜':
456
+        if user.level < UserInfo.MEMBER_BLACK_GOLD and model.category != '调焦器' and model.category != '增倍镜':
457 457
             user.level += 1
458 458
             to_send_coupon = True
459 459
         user.save()
@@ -491,6 +491,7 @@ def consumer_snlist_api(request):
491 491
         'logs': logs,
492 492
     })
493 493
 
494
+
494 495
 @logit(res=True)
495 496
 @transaction.atomic
496 497
 def consumer_model_list(request):
@@ -501,11 +502,11 @@ def consumer_model_list(request):
501 502
         user = UserInfo.objects.get(user_id=user_id)
502 503
     except UserInfo.DoesNotExist:
503 504
         return response(UserStatusCode.USER_NOT_FOUND)
504
-    
505
-    #返回型号列表
505
+
506
+    # 返回型号列表
506 507
     models = ModelInfo.objects.filter(shot_type_id__isnull=False, status=True).order_by('-shot_member_name')
507 508
     models = [model.consumer_shot_data for model in models]
508
-    
509
+
509 510
     return response(200, 'Get Model List Success', u'获取型号列表成功', {
510 511
         'models': models,
511
-    })
512
+    })

+ 6 - 5
api/staff_views.py

@@ -71,7 +71,7 @@ def exec_del_clerk_sale_submit(pk, admin_id):
71 71
         clerk.total_integral -= integral
72 72
         clerk.save()
73 73
 
74
-        #记录删除日志
74
+        # 记录删除日志
75 75
         StaffDeleteClerkSaleSubmitLogInfo.objects.create(
76 76
             admin_id=admin_id,
77 77
             log_pk=pk,
@@ -239,6 +239,7 @@ def del_clerk_sale_submit_api(request):
239 239
 
240 240
     return response(200, 'Del Success', u'删除成功')
241 241
 
242
+
242 243
 @logit
243 244
 @transaction.atomic
244 245
 def batch_del_clerk_sale_submit_api(request):
@@ -290,8 +291,8 @@ def exec_del_consumer_submit(pk, admin_id):
290 291
         user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id)
291 292
     except UserInfo.DoesNotExist:
292 293
         return response()
293
-    
294
-    #记录删除日志
294
+
295
+    # 记录删除日志
295 296
     StaffDeleteConsumerSubmitLogInfo.objects.create(
296 297
         admin_id=admin_id,
297 298
         log_pk=pk,
@@ -505,8 +506,8 @@ def batch_del_consumer_submit_api(request):
505 506
         administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
506 507
     except AdministratorInfo.DoesNotExist:
507 508
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
508
-    
509
+
509 510
     for pk in pks:
510 511
         exec_del_consumer_submit(pk, admin_id)
511 512
 
512
-    return response(200, 'Del Success', u'删除成功')
513
+    return response(200, 'Del Success', u'删除成功')

+ 8 - 6
api/urls.py

@@ -3,15 +3,12 @@
3 3
 from django.conf.urls import url
4 4
 from django_file_upload import views as file_views
5 5
 
6
-from account import views as account_views
7
-from api import (admin_views, clerk_views, distributor_views, encrypt_views, log_views, mch_views, member_views,
6
+from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, log_views, mch_views, member_views,
8 7
                  model_views, operator_views, refresh_views, sr_views, staff_views, wx_views)
9 8
 from miniapp import qy_views
10 9
 from miniapp import views as mini_views
11
-from operation import views as op_views
12 10
 from page import oauth_views, sale_views, screen_views
13 11
 from sales import views as sales_views
14
-from server import server_views
15 12
 from statistic import views as tj_views
16 13
 
17 14
 # Mini App
@@ -163,13 +160,13 @@ urlpatterns += [
163 160
     url(r'^admin/member/goods/order$', admin_views.member_goods_order, name='member_goods_order'),
164 161
     url(r'^admin/member/goods/order/update$', admin_views.member_goods_order_update, name='member_goods_order_update'),
165 162
     url(r'^admin/member/goods/order/batch/update$', admin_views.member_goods_order_batch_update, name='member_goods_order_batch_update'),
166
-    
163
+
167 164
     url(r'^admin/member/activity/list$', admin_views.member_activity_list, name='member_activity_list'),
168 165
     url(r'^admin/member/activity/details$', admin_views.member_activity_details, name='member_activity_details'),
169 166
     url(r'^admin/member/activity/update$', admin_views.member_activity_update, name='member_activity_update'),
170 167
     url(r'^admin/member/activity/create$', admin_views.member_activity_create, name='member_activity_create'),
171 168
     url(r'^admin/member/activity/share/list$', admin_views.member_activity_share_list, name='member_activity_share_list'),
172
-    
169
+
173 170
     url(r'^admin/coupon/list$', admin_views.coupon_list, name='coupon_list'),
174 171
     url(r'^admin/coupon/details$', admin_views.coupon_details, name='coupon_update'),
175 172
     url(r'^admin/coupon/create$', admin_views.coupon_create, name='coupon_create'),
@@ -240,3 +237,8 @@ urlpatterns += [
240 237
 urlpatterns += [
241 238
     url(r'^get_limit_scene_qrcode_url$', wx_views.get_limit_scene_qrcode_url, name='get_limit_scene_qrcode_url'),
242 239
 ]
240
+
241
+urlpatterns += [
242
+    url(r'^complement/code$', complement_views.complement_code, name='complement_code'),
243
+    url(r'^complement/code/list$', complement_views.complement_code_list, name='complement_code_list'),
244
+]

+ 2 - 2
coupon/models.py

@@ -56,7 +56,7 @@ class CouponInfo(BaseModelMixin):
56 56
         if self.coupon_expire_type == CouponInfo.FIXED_EXPIRED_TIME:
57 57
             return self.coupon_expire_at
58 58
         return tc.utc_datetime(days=self.coupon_valid_period)
59
-    
59
+
60 60
     @property
61 61
     def admindata(self):
62 62
         return {
@@ -71,7 +71,7 @@ class CouponInfo(BaseModelMixin):
71 71
             'is_coupon_admin_writeoff': self.is_coupon_admin_writeoff,
72 72
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),
73 73
         }
74
-    
74
+
75 75
     @property
76 76
     def admindetails(self):
77 77
         return {

+ 7 - 7
logs/admin.py

@@ -3,7 +3,7 @@
3 3
 from django.contrib import admin
4 4
 from django_admin import ReadOnlyModelAdmin
5 5
 
6
-from logs.models import MchInfoDecryptLogInfo, MchInfoEncryptLogInfo, MchLogInfo, MchSearchModelAndCameraLogInfo
6
+from logs.models import MchInfoDecryptLogInfo, MchInfoEncryptLogInfo, MchLogInfo, MchSearchModelAndCameraLogInfo, ComplementCodeLogInfo
7 7
 
8 8
 
9 9
 class MchInfoEncryptLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
@@ -22,18 +22,18 @@ class MchLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
22 22
     search_fields = ('operator_id', 'app_version')
23 23
 
24 24
 
25
-class MchLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
26
-    list_display = ('log_id', 'log_file', 'operator_id', 'app_version', 'status', 'created_at', 'updated_at')
27
-    list_filter = ('operator_id', 'app_version', 'status')
28
-    search_fields = ('operator_id', 'app_version')
29
-
30
-
31 25
 class MchSearchModelAndCameraLogInfoAdmin(admin.ModelAdmin):
32 26
     list_display = ('user_id', 'is_search_model', 'is_selected_model', 'is_search_camera', 'is_search_model_camera', 'is_search_camera_after_model', 'created_at')
33 27
     list_filter = ('is_search_model', 'is_selected_model', 'is_search_camera', 'is_search_model_camera', 'is_search_camera_after_model')
34 28
 
35 29
 
30
+class ComplementCodeLogInfoAdmin(admin.ModelAdmin):
31
+    list_display = ('user_id', 'log_id', 'name', 'phone', 'model_id', 'model_name', 'sn', 'shot_image', 'invoice_image', 'status', 'created_at', 'updated_at')
32
+    list_filter = ('model_id', 'status')
33
+
34
+
36 35
 admin.site.register(MchInfoDecryptLogInfo, MchInfoDecryptLogInfoAdmin)
37 36
 admin.site.register(MchInfoEncryptLogInfo, MchInfoEncryptLogInfoAdmin)
38 37
 admin.site.register(MchSearchModelAndCameraLogInfo, MchSearchModelAndCameraLogInfoAdmin)
39 38
 admin.site.register(MchLogInfo, MchLogInfoAdmin)
39
+admin.site.register(ComplementCodeLogInfo, ComplementCodeLogInfoAdmin)

+ 39 - 0
logs/migrations/0013_complementcodeloginfo.py

@@ -0,0 +1,39 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.29 on 2021-01-04 07:47
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+import django_models_ext.fileext
7
+import shortuuidfield.fields
8
+
9
+
10
+class Migration(migrations.Migration):
11
+
12
+    dependencies = [
13
+        ('logs', '0012_auto_20201130_0131'),
14
+    ]
15
+
16
+    operations = [
17
+        migrations.CreateModel(
18
+            name='ComplementCodeLogInfo',
19
+            fields=[
20
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21
+                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
22
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
23
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
24
+                ('user_id', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='user_id')),
25
+                ('log_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='\u65e5\u5fd7\u552f\u4e00\u6807\u8bc6', max_length=22)),
26
+                ('name', models.CharField(blank=True, help_text='\u7528\u6237\u59d3\u540d', max_length=255, null=True, verbose_name='name')),
27
+                ('phone', models.CharField(blank=True, db_index=True, help_text='\u7528\u6237\u7535\u8bdd', max_length=11, null=True, verbose_name='phone')),
28
+                ('model_id', models.CharField(blank=True, db_index=True, help_text='\u578b\u53f7\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='model_id')),
29
+                ('model_name', models.CharField(blank=True, help_text='\u578b\u53f7\u540d\u79f0', max_length=255, null=True, verbose_name='model_name')),
30
+                ('sn', models.CharField(blank=True, db_index=True, help_text='\u5e8f\u5217\u53f7', max_length=32, null=True, verbose_name='sn')),
31
+                ('shot_image', models.ImageField(blank=True, help_text='\u955c\u5934\u673a\u8eab\u7167\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='shot_image')),
32
+                ('invoice_image', models.ImageField(blank=True, help_text='\u8d2d\u4e70\u51ed\u8bc1\u7167\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='invoice_image')),
33
+            ],
34
+            options={
35
+                'verbose_name': '\u8865\u7801\u8bb0\u5f55',
36
+                'verbose_name_plural': '\u8865\u7801\u8bb0\u5f55',
37
+            },
38
+        ),
39
+    ]

+ 24 - 0
logs/models.py

@@ -113,3 +113,27 @@ class MchSearchModelAndCameraLogInfo(BaseModelMixin):
113 113
 
114 114
     def __unicode__(self):
115 115
         return '%d' % self.pk
116
+
117
+
118
+class ComplementCodeLogInfo(BaseModelMixin):
119
+    user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
120
+
121
+    log_id = ShortUUIDField(_(u'log_id'), max_length=32, help_text=u'日志唯一标识', db_index=True)
122
+
123
+    name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')
124
+    phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话', db_index=True)
125
+
126
+    model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
127
+    model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
128
+
129
+    sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True)
130
+
131
+    shot_image = models.ImageField(_(u'shot_image'), upload_to=upload_path, blank=True, null=True, help_text=u'镜头机身照片')
132
+    invoice_image = models.ImageField(_(u'invoice_image'), upload_to=upload_path, blank=True, null=True, help_text=u'购买凭证照片')
133
+
134
+    class Meta:
135
+        verbose_name = _(u'补码记录')
136
+        verbose_name_plural = _(u'补码记录')
137
+
138
+    def __unicode__(self):
139
+        return '%d' % self.pk

+ 3 - 1
mch/models.py

@@ -11,6 +11,7 @@ from TimeConvert import TimeConvert as tc
11 11
 
12 12
 from coupon.models import CouponInfo
13 13
 
14
+
14 15
 class AdministratorInfo(BaseModelMixin):
15 16
     ADMINISTRATOR = 0
16 17
     MAINTENANCE = 1
@@ -259,7 +260,7 @@ class ModelInfo(BaseModelMixin):
259 260
             'shot_image': self.shot_member_image_url,
260 261
             'integral': self.shot_member_integral,
261 262
         }
262
-    
263
+
263 264
     @property
264 265
     def consumer_shot_data(self):
265 266
         from member.models import ShotTypeInfo
@@ -276,6 +277,7 @@ class ModelInfo(BaseModelMixin):
276 277
             'shot_type_name': shot_type.shot_type_name
277 278
         }
278 279
 
280
+
279 281
 class ModelImageInfo(BaseModelMixin):
280 282
     model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True)
281 283
     model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')

+ 7 - 6
member/models.py

@@ -102,7 +102,7 @@ class GoodsInfo(BaseModelMixin):
102 102
     def admindata(self):
103 103
         try:
104 104
             coupon = CouponInfo.objects.get(coupon_id=self.coupon_id).admindata
105
-        except:
105
+        except CouponInfo.DoesNotExist:
106 106
             coupon = {}
107 107
         return {
108 108
             'good_id': self.good_id,
@@ -119,12 +119,12 @@ class GoodsInfo(BaseModelMixin):
119 119
             'coupon': coupon,
120 120
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),
121 121
         }
122
-    
122
+
123 123
     @property
124 124
     def admindetails(self):
125 125
         try:
126 126
             coupon = CouponInfo.objects.get(coupon_id=self.coupon_id).admindata
127
-        except:
127
+        except CouponInfo.DoesNotExist:
128 128
             coupon = {}
129 129
         return {
130 130
             'good_id': self.good_id,
@@ -143,6 +143,7 @@ class GoodsInfo(BaseModelMixin):
143 143
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),
144 144
         }
145 145
 
146
+
146 147
 class GoodsOrderInfo(BaseModelMixin):
147 148
     PHYSICAL = 0
148 149
     VIRTUAL = 1
@@ -456,7 +457,7 @@ class MemberActivityInfo(BaseModelMixin):
456 457
             'is_signed': self.is_signed(user_id),
457 458
             'is_signup': self.is_signup,
458 459
         }
459
-    
460
+
460 461
     @property
461 462
     def admindata(self):
462 463
         return {
@@ -482,7 +483,7 @@ class MemberActivityInfo(BaseModelMixin):
482 483
             'activity_state': self.activity_state,
483 484
             'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),
484 485
         }
485
-    
486
+
486 487
     @property
487 488
     def admindetails(self):
488 489
         return {
@@ -585,7 +586,7 @@ class MemberActivityGroupShareInfo(BaseModelMixin):
585 586
     class Meta:
586 587
         verbose_name = _(u'会员活动群组分享信息')
587 588
         verbose_name_plural = _(u'会员活动群组分享信息')
588
-        
589
+
589 590
         unique_together = (
590 591
             ('activity_id', 'share_user_id', 'click_user_id', 'open_gid', 'brand_id'),
591 592
         )

+ 1 - 2
miniapp/views.py

@@ -248,6 +248,7 @@ def membercard_extradata(request):
248 248
 
249 249
     return response(200, 'Get extraData Success', u'获取 extraData 成功', extraData)
250 250
 
251
+
251 252
 @logit
252 253
 @transaction.atomic
253 254
 def user_integral_add(request):
@@ -276,5 +277,3 @@ def user_integral_add(request):
276 277
     user.save()
277 278
 
278 279
     return response(200, 'Add User Integral Success', u'添加用户投稿积分成功')
279
-
280
-

+ 1 - 0
operation/views.py

@@ -68,6 +68,7 @@ def online_api(request):
68 68
         'online': app_settings.get('online', True),
69 69
     })
70 70
 
71
+
71 72
 @logit
72 73
 def splash_api(request):
73 74
     """ 启动页面 """

+ 1 - 0
page/oauth_views.py

@@ -11,6 +11,7 @@ from mch.models import BrandInfo, DistributorInfo, SaleclerkInfo
11 11
 from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode, SaleclerkStatusCode
12 12
 from utils.redis.connect import r
13 13
 
14
+
14 15
 def login_qrcode(request):
15 16
     lensman_type = int(request.GET.get('lt') or 0)
16 17
     unionid = request.GET.get('unionid', '')

+ 1 - 1
page/sale_views.py

@@ -577,7 +577,7 @@ def clerk_checkout_serialNo_api(request):
577 577
     except SaleclerkInfo.DoesNotExist:
578 578
         return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
579 579
 
580
-    log = MchInfoEncryptLogInfo.objects.filter(model_pk=model_pk, sn=serialNo).order_by('-created_at')
580
+    log = MchInfoEncryptLogInfo.objects.filter(model_pk=model_pk, sn=serialNo).order_by('-pk')
581 581
 
582 582
     if not log:
583 583
         return response(ProductMachineStatusCode.SN_NOT_FOUND)

+ 1 - 1
staff/admin.py

@@ -8,10 +8,10 @@ from staff.models import StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteConsumerS
8 8
 class StaffDeleteClerkSaleSubmitLogInfoAdmin(admin.ModelAdmin):
9 9
     list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at')
10 10
 
11
+
11 12
 class StaffDeleteConsumerSubmitLogInfoAdmin(admin.ModelAdmin):
12 13
     list_display = ('admin_id', 'log_pk', 'model_name', 'code', 'status', 'created_at', 'updated_at')
13 14
 
14 15
 
15 16
 admin.site.register(StaffDeleteClerkSaleSubmitLogInfo, StaffDeleteClerkSaleSubmitLogInfoAdmin)
16 17
 admin.site.register(StaffDeleteConsumerSubmitLogInfo, StaffDeleteConsumerSubmitLogInfoAdmin)
17
-

+ 1 - 0
staff/models.py

@@ -18,6 +18,7 @@ class StaffDeleteClerkSaleSubmitLogInfo(BaseModelMixin):
18 18
     def __unicode__(self):
19 19
         return '%d' % self.pk
20 20
 
21
+
21 22
 class StaffDeleteConsumerSubmitLogInfo(BaseModelMixin):
22 23
     admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'管理员ID', db_index=True)
23 24
     log_pk = models.CharField(_(u'log_pk'), max_length=32, blank=True, null=True, help_text=u'消费者提交记录关联pk', db_index=True)

+ 3 - 0
utils/error/errno_utils.py

@@ -99,6 +99,7 @@ class MarketCodeStatusCode(BaseStatusCode):
99 99
     """ 一物一码相关错误码 5050xx """
100 100
     MARKET_CODE_NOT_FOUND = StatusCodeField(505001, 'Market Code Not Found', description=u'一物一码不存在')
101 101
 
102
+
102 103
 class AdministratorStatusCode(BaseStatusCode):
103 104
     """ 操作员相关错误码 4002xx """
104 105
     ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在')
@@ -150,10 +151,12 @@ class WechatStatusCode(BaseStatusCode):
150 151
     UNIONID_NOT_FOUND = StatusCodeField(400702, 'Unionid Not Found', description=u'微信 UNIONID 不存在')
151 152
     OPENID_NOT_FOUND = StatusCodeField(400703, 'OPENID Not Found', description=u'微信 OPENID 不存在')
152 153
 
154
+
153 155
 class ScreenStatusCode(BaseStatusCode):
154 156
     """ 群组/团相关错误码 4030xx """
155 157
     QRCODE_NOT_SCAN = StatusCodeField(403001, 'QRCode Not Scan', description=u'二维码未扫描')
156 158
 
159
+
157 160
 class PermissionStatusCode(BaseStatusCode):
158 161
     """ 4099xx 权限相关错误码 """
159 162
     PERMISSION_DENIED = StatusCodeField(409900, 'Permission Denied', description=u'权限不足')