pan>
17
|
from coupon.models import UserCouponInfo
|
|
23
|
|
-from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, ModelInfo, SaleclerkInfo
|
|
24
|
|
-from statistic.models import (ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo,
|
|
25
|
|
- ModelSaleStatisticInfo)
|
|
|
18
|
+from integral.models import SaleclerkSubmitLogInfo
|
|
|
19
|
+from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo
|
|
|
20
|
+from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
|
|
26
|
21
|
from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode,
|
|
27
|
22
|
ProductMachineStatusCode, UserStatusCode)
|
|
28
|
23
|
|
|
|
|
@@ -97,7 +92,7 @@ def usecoupon(request):
|
|
97
|
92
|
model_id=model_id,
|
|
98
|
93
|
serialNo=sn,
|
|
99
|
94
|
submit_during_activity=True,
|
|
100
|
|
- has_used=False,
|
|
|
95
|
+ has_used=False,
|
|
101
|
96
|
status=True
|
|
102
|
97
|
).first()
|
|
103
|
98
|
if not log:
|
|
|
|
@@ -168,6 +163,7 @@ def query_usercoupons(request):
|
|
168
|
163
|
'coupons': coupons,
|
|
169
|
164
|
})
|
|
170
|
165
|
|
|
|
166
|
+
|
|
171
|
167
|
@logit
|
|
172
|
168
|
def query_usergoods(request):
|
|
173
|
169
|
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
|
|
@@ -224,22 +220,22 @@ def query_userinfo(request):
|
|
224
|
220
|
|
|
225
|
221
|
if level:
|
|
226
|
222
|
userinfos = userinfos.filter(level=level)
|
|
227
|
|
-
|
|
|
223
|
+
|
|
228
|
224
|
if code_version:
|
|
229
|
225
|
userinfos = userinfos.filter(code_version=code_version)
|
|
230
|
|
-
|
|
|
226
|
+
|
|
231
|
227
|
if subscribe:
|
|
232
|
228
|
userinfos = userinfos.filter(subscribe=subscribe)
|
|
233
|
|
-
|
|
|
229
|
+
|
|
234
|
230
|
if has_membercard:
|
|
235
|
231
|
userinfos = userinfos.filter(has_membercard=has_membercard)
|
|
236
|
|
-
|
|
|
232
|
+
|
|
237
|
233
|
if is_member:
|
|
238
|
234
|
userinfos = userinfos.filter(level__gte=1)
|
|
239
|
|
-
|
|
|
235
|
+
|
|
240
|
236
|
if sex:
|
|
241
|
237
|
userinfos = userinfos.filter(sex=sex)
|
|
242
|
|
-
|
|
|
238
|
+
|
|
243
|
239
|
if start_time and end_time:
|
|
244
|
240
|
ftime = datetime.strptime(start_time + ' 00:00:00', '%Y%m%d %H:%M:%S')
|
|
245
|
241
|
ttime = datetime.strptime(end_time + ' 23:59:59', '%Y%m%d %H:%M:%S')
|
|
|
|
@@ -626,6 +622,7 @@ def statistic_consumer(request):
|
|
626
|
622
|
'province_logs': province_logs,
|
|
627
|
623
|
})
|
|
628
|
624
|
|
|
|
625
|
+
|
|
629
|
626
|
def statistic_member(request):
|
|
630
|
627
|
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
631
|
628
|
admin_id = request.POST.get('admin_id', '')
|
|
|
|
@@ -647,7 +644,7 @@ def statistic_member(request):
|
|
647
|
644
|
|
|
648
|
645
|
for user in users:
|
|
649
|
646
|
userinfos |= UserInfo.objects.filter(user_id=user.get('user_id', ''))
|
|
650
|
|
-
|
|
|
647
|
+
|
|
651
|
648
|
# 会员级别
|
|
652
|
649
|
level_logs = list(userinfos.values('level').annotate(num=Count('user_id')))
|
|
653
|
650
|
|
|
|
|
@@ -671,6 +668,7 @@ def statistic_member(request):
|
|
671
|
668
|
'province_logs': province_logs,
|
|
672
|
669
|
})
|
|
673
|
670
|
|
|
|
671
|
+
|
|
674
|
672
|
def record_consumer(request):
|
|
675
|
673
|
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
676
|
674
|
page = request.POST.get('page', 1)
|
|
|
|
@@ -689,15 +687,15 @@ def record_consumer(request):
|
|
689
|
687
|
administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
|
|
690
|
688
|
except AdministratorInfo.DoesNotExist:
|
|
691
|
689
|
return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
|
|
692
|
|
-
|
|
|
690
|
+
|
|
693
|
691
|
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')
|
|
694
|
692
|
|
|
695
|
693
|
if dupload:
|
|
696
|
694
|
logs = logs.filter(dupload=dupload)
|
|
697
|
|
-
|
|
|
695
|
+
|
|
698
|
696
|
if code_version:
|
|
699
|
697
|
logs = logs.filter(code_version=code_version)
|
|
700
|
|
-
|
|
|
698
|
+
|
|
701
|
699
|
if start_time and end_time:
|
|
702
|
700
|
logs = logs.filter(ymd__gte=start_time, ymd__lte=end_time)
|
|
703
|
701
|
|
|
|
|
@@ -711,6 +709,7 @@ def record_consumer(request):
|
|
711
|
709
|
'left': left
|
|
712
|
710
|
})
|
|
713
|
711
|
|
|
|
712
|
+
|
|
714
|
713
|
def record_sale(request):
|
|
715
|
714
|
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
716
|
715
|
admin_id = request.POST.get('admin_id', '')
|
|
|
|
@@ -731,15 +730,15 @@ def record_sale(request):
|
|
731
|
730
|
administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
|
|
732
|
731
|
except AdministratorInfo.DoesNotExist:
|
|
733
|
732
|
return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
|
|
734
|
|
-
|
|
735
|
|
- logs = SaleclerkSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & Q(test_sn=False) & (Q(model_name__icontains=query) | Q(clerk_name__icontains=query) | Q(distributor_name__icontains=query)| Q(code__icontains=query))).order_by('-created_at')
|
|
|
733
|
+
|
|
|
734
|
+ logs = SaleclerkSubmitLogInfo.objects.filter(Q(status=True) & Q(test_user=False) & Q(test_sn=False) & (Q(model_name__icontains=query) | Q(clerk_name__icontains=query) | Q(distributor_name__icontains=query) | Q(code__icontains=query))).order_by('-created_at')
|
|
736
|
735
|
|
|
737
|
736
|
if dupload:
|
|
738
|
737
|
logs = logs.filter(dupload=dupload)
|
|
739
|
|
-
|
|
|
738
|
+
|
|
740
|
739
|
if code_version:
|
|
741
|
740
|
logs = logs.filter(code_version=code_version)
|
|
742
|
|
-
|
|
|
741
|
+
|
|
743
|
742
|
if has_scan:
|
|
744
|
743
|
logs = logs.filter(has_scan=has_scan)
|
|
745
|
744
|
|
|
|
|
@@ -748,7 +747,6 @@ def record_sale(request):
|
|
748
|
747
|
|
|
749
|
748
|
if is_online_sale:
|
|
750
|
749
|
logs = logs.filter(remark=('扫描条形码' if is_online_sale == '1' else ''))
|
|
751
|
|
-
|
|
752
|
750
|
|
|
753
|
751
|
count = logs.count()
|
|
754
|
752
|
logs, left = pagination(logs, page, num)
|
|
|
|
@@ -294,28 +294,33 @@ def consumer_info_api(request):
|
|
294
|
294
|
for act in activities:
|
|
295
|
295
|
try:
|
|
296
|
296
|
coupon = CouponInfo.objects.get(coupon_id=act['coupon_id'])
|
|
|
297
|
+ except CouponInfo.DoesNotExist:
|
|
|
298
|
+ continue
|
|
|
299
|
+
|
|
|
300
|
+ try:
|
|
297
|
301
|
activity = ActivityInfo.objects.get(activity_id=act['activity_id'])
|
|
298
|
|
- UserCouponInfo.objects.create(
|
|
299
|
|
- brand_id=coupon.brand_id,
|
|
300
|
|
- brand_name=coupon.brand_name,
|
|
301
|
|
- coupon_id=coupon.coupon_id,
|
|
302
|
|
- user_id=user_id,
|
|
303
|
|
- coupon_title=coupon.coupon_title,
|
|
304
|
|
- coupon_detail=coupon.coupon_detail,
|
|
305
|
|
- coupon_value=coupon.coupon_value,
|
|
306
|
|
- coupon_image=coupon.coupon_image,
|
|
307
|
|
- active_at=tc.utc_datetime(),
|
|
308
|
|
- expire_at=coupon.final_expire_at,
|
|
309
|
|
- is_coupon_admin_writeoff=coupon.is_coupon_admin_writeoff,
|
|
310
|
|
- coupon_valid_period=coupon.coupon_valid_period,
|
|
311
|
|
- coupon_limit_model_ids=coupon.coupon_limit_model_ids,
|
|
312
|
|
- coupon_from='PROMOTION',
|
|
313
|
|
- activity_id=activity.activity_id,
|
|
314
|
|
- activity_name=activity.activity_name,
|
|
315
|
|
- )
|
|
316
|
|
- except:
|
|
|
302
|
+ except ActivityInfo.DoesNotExist:
|
|
317
|
303
|
continue
|
|
318
|
304
|
|
|
|
305
|
+ UserCouponInfo.objects.create(
|
|
|
306
|
+ brand_id=coupon.brand_id,
|
|
|
307
|
+ brand_name=coupon.brand_name,
|
|
|
308
|
+ coupon_id=coupon.coupon_id,
|
|
|
309
|
+ user_id=user_id,
|
|
|
310
|
+ coupon_title=coupon.coupon_title,
|
|
|
311
|
+ coupon_detail=coupon.coupon_detail,
|
|
|
312
|
+ coupon_value=coupon.coupon_value,
|
|
|
313
|
+ coupon_image=coupon.coupon_image,
|
|
|
314
|
+ active_at=tc.utc_datetime(),
|
|
|
315
|
+ expire_at=coupon.final_expire_at,
|
|
|
316
|
+ is_coupon_admin_writeoff=coupon.is_coupon_admin_writeoff,
|
|
|
317
|
+ coupon_valid_period=coupon.coupon_valid_period,
|
|
|
318
|
+ coupon_limit_model_ids=coupon.coupon_limit_model_ids,
|
|
|
319
|
+ coupon_from='PROMOTION',
|
|
|
320
|
+ activity_id=activity.activity_id,
|
|
|
321
|
+ activity_name=activity.activity_name,
|
|
|
322
|
+ )
|
|
|
323
|
+
|
|
319
|
324
|
# 更新销售员提交的表
|
|
320
|
325
|
SaleclerkSubmitLogInfo.objects.filter(code=serialNo, model_pk=model.pk, status=True).update(has_scan=True)
|
|
321
|
326
|
|
|
|
|
@@ -13,7 +13,8 @@ from group import (groupuser_views, lensman_views, tourguidegroup_views, tourgui
|
|
13
|
13
|
tourguidegroupuser_views)
|
|
14
|
14
|
from group import views as group_views
|
|
15
|
15
|
from message import views as message_views
|
|
16
|
|
-from miniapp import views as mini_views, qy_views
|
|
|
16
|
+from miniapp import qy_views
|
|
|
17
|
+from miniapp import views as mini_views
|
|
17
|
18
|
from operation import views as op_views
|
|
18
|
19
|
from page import oauth_views, sale_views, screen_views
|
|
19
|
20
|
from pay import views as pay_views
|
|
|
|
@@ -187,7 +188,7 @@ urlpatterns += [
|
|
187
|
188
|
|
|
188
|
189
|
url(r'^qy/login$', qy_views.qy_login_api, name='qy_login_api'), # 小程序登录
|
|
189
|
190
|
|
|
190
|
|
- url(r'^qy/query/userinfo$', qy_views.query_userinfo, name='query_userinfo'), # 查询用户等级及维修劵
|
|
|
191
|
+ url(r'^qy/query/userinfo$', qy_views.query_userinfo, name='query_userinfo'), # 查询用户等级及维修劵
|
|
191
|
192
|
]
|
|
192
|
193
|
|
|
193
|
194
|
urlpatterns += [
|
|
|
|
@@ -6,9 +6,9 @@ import os
|
|
6
|
6
|
from django_six import CompatibilityBaseCommand, close_old_connections
|
|
7
|
7
|
|
|
8
|
8
|
from integral.models import SaleclerkSubmitLogInfo
|
|
|
9
|
+from utils.qiniucdn import upload_file_path
|
|
9
|
10
|
from utils.redis.connect import r
|
|
10
|
11
|
from utils.redis.rkeys import QINIU_UPLOAD_LIST
|
|
11
|
|
-from utils.qiniucdn import upload_file_path
|
|
12
|
12
|
|
|
13
|
13
|
|
|
14
|
14
|
logger = logging.getLogger('console')
|
|
|
|
@@ -8,11 +8,11 @@ from django_redis_connector import connector
|
|
8
|
8
|
from django_six import CompatibilityBaseCommand, close_old_connections
|
|
9
|
9
|
from django_we.models import SubscribeUserInfo
|
|
10
|
10
|
from pywe_storage import RedisStorage
|
|
|
11
|
+from pywe_user import get_user_info
|
|
11
|
12
|
|
|
12
|
13
|
from account.models import UserInfo
|
|
13
|
14
|
from mch.models import BrandInfo
|
|
14
|
15
|
from pre.custom_message import sendcustomwxamessage
|
|
15
|
|
-from pywe_user import get_user_info
|
|
16
|
16
|
from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST
|
|
17
|
17
|
|
|
18
|
18
|
|
|
|
|
@@ -118,7 +118,7 @@ class UserCouponInfo(BaseModelMixin):
|
|
118
|
118
|
if not self.expire_at:
|
|
119
|
119
|
return False
|
|
120
|
120
|
return tc.utc_datetime() > self.expire_at
|
|
121
|
|
-
|
|
|
121
|
+
|
|
122
|
122
|
@property
|
|
123
|
123
|
def coupon_source(self):
|
|
124
|
124
|
if self.coupon_from == 'INTEGRAL_MALL':
|
|
|
|
@@ -151,7 +151,7 @@ class UserCouponInfo(BaseModelMixin):
|
|
151
|
151
|
'admin_id': self.admin_id,
|
|
152
|
152
|
'used_at': self.used_at
|
|
153
|
153
|
}
|
|
154
|
|
-
|
|
|
154
|
+
|
|
155
|
155
|
@property
|
|
156
|
156
|
def admindata(self):
|
|
157
|
157
|
return {
|
|
|
|
@@ -2,7 +2,7 @@
|
|
2
|
2
|
|
|
3
|
3
|
from django.db import models
|
|
4
|
4
|
from django.utils.translation import ugettext_lazy as _
|
|
5
|
|
-from django_models_ext import BaseModelMixin, upload_path, upload_file_path, upload_file_url
|
|
|
5
|
+from django_models_ext import BaseModelMixin, upload_file_path, upload_file_url, upload_path
|
|
6
|
6
|
from TimeConvert import TimeConvert as tc
|
|
7
|
7
|
|
|
8
|
8
|
from mch.models import ModelInfo
|
|
|
|
@@ -129,7 +129,7 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
|
|
129
|
129
|
|
|
130
|
130
|
def __unicode__(self):
|
|
131
|
131
|
return unicode(self.pk)
|
|
132
|
|
-
|
|
|
132
|
+
|
|
133
|
133
|
@property
|
|
134
|
134
|
def image_path(self):
|
|
135
|
135
|
return upload_file_path(self.image)
|
|
|
|
@@ -137,7 +137,7 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
|
|
137
|
137
|
@property
|
|
138
|
138
|
def image_url(self):
|
|
139
|
139
|
return qiniu_file_url(self.image.name, bucket='tamron') if self.is_upload_qiniu else upload_file_url(self.image)
|
|
140
|
|
-
|
|
|
140
|
+
|
|
141
|
141
|
@property
|
|
142
|
142
|
def code_image_path(self):
|
|
143
|
143
|
return upload_file_path(self.code_image)
|
|
|
|
@@ -164,4 +164,4 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
|
|
164
|
164
|
'image': self.image_url,
|
|
165
|
165
|
'code_image': self.code_image_url,
|
|
166
|
166
|
'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),
|
|
167
|
|
- }
|
|
|
167
|
+ }
|
|
|
|
@@ -9,8 +9,8 @@ from django_models_ext import ProvinceShortModelMixin
|
|
9
|
9
|
from pysnippets.strsnippets import strip
|
|
10
|
10
|
|
|
11
|
11
|
from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo,
|
|
12
|
|
- DistributorInfo, LatestAppInfo, LatestAppScreenInfo, ModelCameraBodyInfo, ModelInfo,
|
|
13
|
|
- OperatorInfo, SaleclerkInfo, MaintenancemanInfo)
|
|
|
12
|
+ DistributorInfo, LatestAppInfo, LatestAppScreenInfo, MaintenancemanInfo, ModelCameraBodyInfo,
|
|
|
13
|
+ ModelInfo, OperatorInfo, SaleclerkInfo)
|
|
14
|
14
|
from utils.redis.rshot import update_member_shot_data
|
|
15
|
15
|
|
|
16
|
16
|
|
|
|
|
@@ -161,6 +161,7 @@ class SaleclerkInfoAdmin(AdvancedExportExcelModelAdmin, AdvancedActionsModelAdmi
|
|
161
|
161
|
search_fields = ('brand_id', 'brand_name', 'distributor_id', 'distributor_name', 'clerk_id', 'clerk_name', 'clerk_phone', 'unionid', 'openid')
|
|
162
|
162
|
actions_exclude = ('delete_selected', )
|
|
163
|
163
|
|
|
|
164
|
+
|
|
164
|
165
|
class MaintenancemanInfoAdmin(AdvancedExportExcelModelAdmin, AdvancedActionsModelAdmin, admin.ModelAdmin):
|
|
165
|
166
|
list_display = ('brand_name', 'wx_userid', 'maintenance_id', 'maintenance_name', 'maintenance_phone', 'status', 'created_at', 'updated_at')
|
|
166
|
167
|
search_fields = ('maintenance_id', 'maintenance_name', 'maintenance_phone')
|
|
|
|
@@ -252,4 +253,4 @@ admin.site.register(LatestAppInfo, LatestAppInfoAdmin)
|
|
252
|
253
|
admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin)
|
|
253
|
254
|
admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin)
|
|
254
|
255
|
admin.site.register(ActivityInfo, ActivityInfoAdmin)
|
|
255
|
|
-admin.site.register(MaintenancemanInfo, MaintenancemanInfoAdmin)
|
|
|
256
|
+admin.site.register(MaintenancemanInfo, MaintenancemanInfoAdmin)
|
|
|
|
@@ -478,6 +478,7 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin):
|
|
478
|
478
|
|
|
479
|
479
|
data = admindata
|
|
480
|
480
|
|
|
|
481
|
+
|
|
481
|
482
|
class MaintenancemanInfo(BaseModelMixin, SexModelMixin):
|
|
482
|
483
|
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
|
|
483
|
484
|
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
|
|
|
|
@@ -503,12 +504,13 @@ class MaintenancemanInfo(BaseModelMixin, SexModelMixin):
|
|
503
|
504
|
|
|
504
|
505
|
@property
|
|
505
|
506
|
def data(self):
|
|
506
|
|
- return {
|
|
|
507
|
+ return {
|
|
507
|
508
|
'maintenance_id': self.maintenance_id,
|
|
508
|
509
|
'maintenance_name': self.maintenance_name,
|
|
509
|
510
|
'maintenance_phone': self.maintenance_phone,
|
|
510
|
511
|
}
|
|
511
|
512
|
|
|
|
513
|
+
|
|
512
|
514
|
class BrandModelDistributorPriceInfo(BaseModelMixin):
|
|
513
|
515
|
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)
|
|
514
|
516
|
brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')
|
|
|
|
@@ -729,7 +731,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
|
|
729
|
731
|
'code_version': self.code_version,
|
|
730
|
732
|
'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'),
|
|
731
|
733
|
}
|
|
732
|
|
-
|
|
|
734
|
+
|
|
733
|
735
|
@property
|
|
734
|
736
|
def admindata(self):
|
|
735
|
737
|
return {
|
|
|
|
@@ -219,7 +219,7 @@ class RightInfo(BaseModelMixin):
|
|
219
|
219
|
'left_num': 3,
|
|
220
|
220
|
'left_tip': 3,
|
|
221
|
221
|
}
|
|
222
|
|
-
|
|
|
222
|
+
|
|
223
|
223
|
def maintaindata(self, level):
|
|
224
|
224
|
right_detail = ''
|
|
225
|
225
|
if level == 1:
|
|
|
|
@@ -232,7 +232,7 @@ class RightInfo(BaseModelMixin):
|
|
232
|
232
|
right_detail = self.level4 if self.level4 else ''
|
|
233
|
233
|
elif level == 5:
|
|
234
|
234
|
right_detail = self.level5 if self.level5 else ''
|
|
235
|
|
-
|
|
|
235
|
+
|
|
236
|
236
|
return right_detail
|
|
237
|
237
|
|
|
238
|
238
|
|
|
|
|
@@ -1,9 +1,9 @@
|
|
1
|
1
|
# -*- coding: utf-8 -*-
|
|
2
|
2
|
|
|
3
|
|
-import logging
|
|
4
|
|
-import requests
|
|
5
|
3
|
import json
|
|
|
4
|
+import logging
|
|
6
|
5
|
|
|
|
6
|
+import requests
|
|
7
|
7
|
from django.conf import settings
|
|
8
|
8
|
from django.db import transaction
|
|
9
|
9
|
from django_curtail_uuid import CurtailUUID
|
|
|
|
@@ -16,14 +16,15 @@ from pywe_storage import RedisStorage
|
|
16
|
16
|
from TimeConvert import TimeConvert as tc
|
|
17
|
17
|
|
|
18
|
18
|
from account.models import UserInfo
|
|
19
|
|
-from mch.models import SaleclerkInfo, DistributorInfo, MaintenancemanInfo
|
|
20
|
|
-from statistic.models import RegisterStatisticInfo
|
|
21
|
|
-from member.models import RightInfo
|
|
22
|
19
|
from coupon.models import UserCouponInfo
|
|
|
20
|
+from mch.models import DistributorInfo, MaintenancemanInfo, SaleclerkInfo
|
|
|
21
|
+from member.models import RightInfo
|
|
|
22
|
+from statistic.models import RegisterStatisticInfo
|
|
23
|
23
|
from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode, UserStatusCode
|
|
24
|
24
|
from utils.redis.connect import r
|
|
25
|
25
|
from utils.redis.rprofile import set_profile_info
|
|
26
|
26
|
|
|
|
27
|
+
|
|
27
|
28
|
WECHAT = settings.WECHAT
|
|
28
|
29
|
logger = logging.getLogger('logit')
|
|
29
|
30
|
|
|
|
|
@@ -48,11 +49,11 @@ def qy_login_api(request):
|
|
48
|
49
|
|
|
49
|
50
|
token = access_token(appid=appid, secret=secret, storage=RedisStorage(r))
|
|
50
|
51
|
|
|
51
|
|
- userinfo = requests.post(url='https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token='+token+'&userid='+userid).text
|
|
|
52
|
+ userinfo = requests.post(url='https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=' + token + '&userid=' + userid).text
|
|
52
|
53
|
userinfo = json.loads(userinfo)
|
|
53
|
54
|
|
|
54
|
55
|
mobile = userinfo.get('mobile', '')
|
|
55
|
|
-
|
|
|
56
|
+
|
|
56
|
57
|
# Get or Create User
|
|
57
|
58
|
user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)
|
|
58
|
59
|
|
|
|
|
@@ -83,14 +84,14 @@ def qy_login_api(request):
|
|
83
|
84
|
if 122 in userinfo.get('department', []):
|
|
84
|
85
|
maintenance, created = MaintenancemanInfo.objects.get_or_create(brand_id=brand_id, maintenance_phone=mobile, status=True)
|
|
85
|
86
|
user.is_maintenance = True
|
|
86
|
|
-
|
|
|
87
|
+
|
|
87
|
88
|
if created:
|
|
88
|
89
|
maintenance.maintenance_name = userinfo.get('name', '')
|
|
89
|
90
|
maintenance.maintenance_sex = userinfo.get('gender', 0)
|
|
90
|
91
|
maintenance.maintenance_phone = mobile
|
|
91
|
92
|
maintenance.user_id = user.user_id
|
|
92
|
93
|
maintenance.wx_userid = userid
|
|
93
|
|
- maintenance.save()
|
|
|
94
|
+ maintenance.save()
|
|
94
|
95
|
else:
|
|
95
|
96
|
user.is_maintenance = False
|
|
96
|
97
|
# 销售员登录
|
|
|
|
@@ -99,9 +100,9 @@ def qy_login_api(request):
|
|
99
|
100
|
if created:
|
|
100
|
101
|
try:
|
|
101
|
102
|
distributor = DistributorInfo.objects.get(department_id__in=userinfo.get('department', []))
|
|
102
|
|
- except:
|
|
|
103
|
+ except DistributorInfo.DoesNotExist:
|
|
103
|
104
|
return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND)
|
|
104
|
|
-
|
|
|
105
|
+
|
|
105
|
106
|
saleclerk.brand_id = brand_id
|
|
106
|
107
|
saleclerk.distributor_id = distributor.distributor_id
|
|
107
|
108
|
saleclerk.distributor_name = distributor.distributor_name
|
|
|
|
@@ -113,7 +114,7 @@ def qy_login_api(request):
|
|
113
|
114
|
saleclerk.user_status = SaleclerkInfo.ACTIVATED
|
|
114
|
115
|
saleclerk.is_auth = True
|
|
115
|
116
|
saleclerk.save()
|
|
116
|
|
-
|
|
|
117
|
+
|
|
117
|
118
|
user.save()
|
|
118
|
119
|
|
|
119
|
120
|
return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brand_qydata(brand_id=brand_id))
|
|
|
|
@@ -128,9 +129,9 @@ def query_userinfo(request):
|
|
128
|
129
|
|
|
129
|
130
|
try:
|
|
130
|
131
|
user = UserInfo.objects.get(memberusercardcode=memebercardcode, status=True)
|
|
131
|
|
- except:
|
|
|
132
|
+ except UserInfo.DoesNotExist:
|
|
132
|
133
|
return response(UserStatusCode.USER_NOT_FOUND)
|
|
133
|
|
-
|
|
|
134
|
+
|
|
134
|
135
|
# 维修人工费
|
|
135
|
136
|
right = RightInfo.objects.get(right_id='X457xEV8KVxHQiTvhA7Dtf')
|
|
136
|
137
|
coupons = UserCouponInfo.objects.filter(user_id=user.user_id, has_used=False, status=True)
|
|
|
|
@@ -14,8 +14,8 @@ from pywe_storage import RedisStorage
|
|
14
|
14
|
from TimeConvert import TimeConvert as tc
|
|
15
|
15
|
|
|
16
|
16
|
from account.models import UserInfo
|
|
17
|
|
-from statistic.models import RegisterStatisticInfo
|
|
18
|
17
|
from mch.models import SaleclerkInfo
|
|
|
18
|
+from statistic.models import RegisterStatisticInfo
|
|
19
|
19
|
from utils.error.errno_utils import ProductBrandStatusCode, UserStatusCode
|
|
20
|
20
|
from utils.redis.connect import r
|
|
21
|
21
|
from utils.redis.rprofile import set_profile_info
|
|
|
|
@@ -158,9 +158,10 @@ def mini_login_api(request):
|
|
158
|
158
|
# 同步销售员手机号
|
|
159
|
159
|
try:
|
|
160
|
160
|
saleclerk = SaleclerkInfo.objects.get(unionid=unionid, is_auth=True, status=True)
|
|
|
161
|
+ except SaleclerkInfo.DoesNotExist:
|
|
|
162
|
+ saleclerk = None
|
|
|
163
|
+ if saleclerk:
|
|
161
|
164
|
user.phone = saleclerk.clerk_phone
|
|
162
|
|
- except:
|
|
163
|
|
- pass
|
|
164
|
165
|
user.unionid = unionid
|
|
165
|
166
|
user.user_status = UserInfo.ACTIVATED
|
|
166
|
167
|
user.signup_ip = client_ip(request)
|
|
|
|
@@ -17,10 +17,11 @@ from account.models import UserInfo
|
|
17
|
17
|
from coupon.models import UserCouponInfo
|
|
18
|
18
|
from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
|
|
19
|
19
|
from logs.models import MchInfoEncryptLogInfo
|
|
20
|
|
-from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo, MaintenancemanInfo
|
|
|
20
|
+from mch.models import (BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, MaintenancemanInfo, ModelInfo,
|
|
|
21
|
+ SaleclerkInfo)
|
|
|
22
|
+from member.models import RightInfo
|
|
21
|
23
|
from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
|
|
22
|
24
|
SaleclerkSaleStatisticInfo, SaleStatisticInfo)
|
|
23
|
|
-from member.models import RightInfo
|
|
24
|
25
|
from utils.error.errno_utils import (CouponStatusCode, ProductBrandStatusCode, ProductDistributorStatusCode,
|
|
25
|
26
|
ProductMachineStatusCode, ProductModelStatusCode, SaleclerkStatusCode)
|
|
26
|
27
|
|
|
|
|
@@ -454,19 +455,26 @@ def clerk_query_coupon(request):
|
|
454
|
455
|
user_coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id)
|
|
455
|
456
|
except UserCouponInfo.DoesNotExist:
|
|
456
|
457
|
return response(CouponStatusCode.COUPON_NOT_FOUND)
|
|
457
|
|
-
|
|
|
458
|
+
|
|
458
|
459
|
right_detail = ''
|
|
459
|
460
|
if is_maintenance:
|
|
460
|
461
|
try:
|
|
461
|
|
- maintenance = MaintenancemanInfo.objects.get(brand_id=brand.brand_id, user_id=user.user_id, status=True)
|
|
462
|
|
-
|
|
463
|
|
- # 维修人工费
|
|
|
462
|
+ maintenance = MaintenancemanInfo.objects.get(brand_id=brand.brand_id, user_id=user.user_id, status=True)
|
|
|
463
|
+ except MaintenancemanInfo.DoesNotExist:
|
|
|
464
|
+ return response(400001, 'MaintenancemanInfo Not Found', u'维修员不存在')
|
|
|
465
|
+
|
|
|
466
|
+ # 维修人工费
|
|
|
467
|
+ try:
|
|
464
|
468
|
right = RightInfo.objects.get(right_id='X457xEV8KVxHQiTvhA7Dtf')
|
|
465
|
|
- member = UserInfo.objects.get(user_id=user_coupon.user_id)
|
|
|
469
|
+ except RightInfo.DoesNotExist:
|
|
|
470
|
+ return response(400001, 'MaintenancemanInfo Not Found', u'维修员不存在')
|
|
466
|
471
|
|
|
467
|
|
- right_detail = right.maintaindata(level=member.level)
|
|
468
|
|
- except:
|
|
|
472
|
+ try:
|
|
|
473
|
+ member = UserInfo.objects.get(user_id=user_coupon.user_id)
|
|
|
474
|
+ except UserInfo.DoesNotExist:
|
|
469
|
475
|
return response(400001, 'MaintenancemanInfo Not Found', u'维修员不存在')
|
|
|
476
|
+
|
|
|
477
|
+ right_detail = right.maintaindata(level=member.level)
|
|
470
|
478
|
else:
|
|
471
|
479
|
try:
|
|
472
|
480
|
clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, clerk_phone=user.phone, status=True)
|
|
|
|
@@ -503,40 +511,43 @@ def clerk_writeoff_coupon(request):
|
|
503
|
511
|
brand = BrandInfo.objects.get(brand_id=brandID)
|
|
504
|
512
|
except BrandInfo.DoesNotExist:
|
|
505
|
513
|
return response(ProductBrandStatusCode.BRAND_NOT_FOUND)
|
|
506
|
|
-
|
|
|
514
|
+
|
|
507
|
515
|
try:
|
|
508
|
516
|
user_coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id)
|
|
509
|
|
- if user_coupon.has_used:
|
|
510
|
|
- return response(CouponStatusCode.COUPON_HAS_USED)
|
|
511
|
|
- elif user_coupon.is_coupon_admin_writeoff and not is_maintenance:
|
|
512
|
|
- return response(CouponStatusCode.COUPON_PERMISSION_DENIED)
|
|
513
|
|
- elif user_coupon.has_expired:
|
|
514
|
|
- return response(CouponStatusCode.COUPON_EXPIRED)
|
|
515
|
517
|
except UserCouponInfo.DoesNotExist:
|
|
516
|
518
|
return response(CouponStatusCode.COUPON_NOT_FOUND)
|
|
517
|
|
-
|
|
|
519
|
+
|
|
|
520
|
+ if user_coupon.has_used:
|
|
|
521
|
+ return response(CouponStatusCode.COUPON_HAS_USED)
|
|
|
522
|
+ elif user_coupon.is_coupon_admin_writeoff and not is_maintenance:
|
|
|
523
|
+ return response(CouponStatusCode.COUPON_PERMISSION_DENIED)
|
|
|
524
|
+ elif user_coupon.has_expired:
|
|
|
525
|
+ return response(CouponStatusCode.COUPON_EXPIRED)
|
|
|
526
|
+
|
|
518
|
527
|
user_coupon.has_used = True
|
|
519
|
528
|
user_coupon.used_at = tc.utc_datetime()
|
|
520
|
529
|
|
|
521
|
530
|
if is_maintenance:
|
|
522
|
531
|
try:
|
|
523
|
|
- maintenance = MaintenancemanInfo.objects.get(brand_id=brand.brand_id, user_id=user.user_id, status=True)
|
|
524
|
|
- user_coupon.admin_id = maintenance.maintenance_id
|
|
525
|
|
- user_coupon.admin_name = maintenance.maintenance_name
|
|
526
|
|
- user_coupon.save()
|
|
527
|
|
- except:
|
|
|
532
|
+ maintenance = MaintenancemanInfo.objects.get(brand_id=brand.brand_id, user_id=user.user_id, status=True)
|
|
|
533
|
+ except MaintenancemanInfo.DoesNotExist:
|
|
528
|
534
|
return response(400001, 'MaintenancemanInfo Not Found', u'维修员不存在')
|
|
|
535
|
+
|
|
|
536
|
+ user_coupon.admin_id = maintenance.maintenance_id
|
|
|
537
|
+ user_coupon.admin_name = maintenance.maintenance_name
|
|
|
538
|
+ user_coupon.save()
|
|
529
|
539
|
else:
|
|
530
|
540
|
try:
|
|
531
|
541
|
clerk = SaleclerkInfo.objects.get(brand_id=brand.brand_id, clerk_phone=user.phone, status=True)
|
|
532
|
|
- user_coupon.clerk_id = clerk.clerk_id
|
|
533
|
|
- user_coupon.clerk_name = clerk.clerk_name
|
|
534
|
|
- user_coupon.distributor_id = clerk.distributor_id
|
|
535
|
|
- user_coupon.distributor_name = clerk.distributor_name
|
|
536
|
|
- user_coupon.save()
|
|
537
|
542
|
except SaleclerkInfo.DoesNotExist:
|
|
538
|
543
|
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
|
|
539
|
544
|
|
|
|
545
|
+ user_coupon.clerk_id = clerk.clerk_id
|
|
|
546
|
+ user_coupon.clerk_name = clerk.clerk_name
|
|
|
547
|
+ user_coupon.distributor_id = clerk.distributor_id
|
|
|
548
|
+ user_coupon.distributor_name = clerk.distributor_name
|
|
|
549
|
+ user_coupon.save()
|
|
|
550
|
+
|
|
540
|
551
|
return response(200, 'Write Off Coupon Success', u'劵核销成功')
|
|
541
|
552
|
|
|
542
|
553
|
|
|
|
|
@@ -3,8 +3,8 @@
|
|
3
|
3
|
from django.conf import settings
|
|
4
|
4
|
from django_redis_connector import connector
|
|
5
|
5
|
from pywe_storage import RedisStorage
|
|
6
|
|
-
|
|
7
|
6
|
from pywe_user import get_all_users
|
|
|
7
|
+
|
|
8
|
8
|
from utils.redis.rkeys import SUBSCRIBE_USERINFO_LIST
|
|
9
|
9
|
|
|
10
|
10
|
|