@@ -19,7 +19,7 @@ from TimeConvert import TimeConvert as tc |
||
19 | 19 |
|
20 | 20 |
|
21 | 21 |
# curl -X POST -F username=xxxxxxx -F password=xxxxxxx http://api.pai.ai/login |
22 |
-def lesman_login_api(request): |
|
22 |
+def lensman_login_api(request): |
|
23 | 23 |
username = request.POST.get('username', '') |
24 | 24 |
password = request.POST.get('password', '') |
25 | 25 |
|
@@ -12,7 +12,7 @@ from photo import views as photo_views |
||
12 | 12 |
|
13 | 13 |
# 帐户相关 |
14 | 14 |
urlpatterns = [ |
15 |
- url(r'^login$', account_views.lesman_login_api, name='lesman_login_api'), # 摄影师登录 |
|
15 |
+ url(r'^login$', account_views.lensman_login_api, name='lensman_login_api'), # 摄影师登录 |
|
16 | 16 |
url(r'^u/is_registered$', account_views.user_is_registered_api, name='user_is_registered_api'), # 用户是否已经注册 |
17 | 17 |
url(r'^u/signup$', account_views.user_signup_api, name='user_signup_api'), # 用户注册 |
18 | 18 |
url(r'^u/login$', account_views.user_login_api, name='user_login_api'), # 用户登录 |
@@ -44,7 +44,8 @@ urlpatterns += [ |
||
44 | 44 |
url(r'^f/thumbup/submit$', group_views.thumbup_submit_api, name='thumbup_submit_api'), # 飞图点赞提交 |
45 | 45 |
url(r'^f/thumbup/list$', group_views.thumbup_list_api, name='thumbup_list_api'), # 飞图点赞列表 |
46 | 46 |
url(r'^f/thumbup/cancel$', group_views.thumbup_cancel_api, name='thumbup_cancel_api'), # 飞图点赞取消 |
47 |
- url(r'^f/price$', group_views.lesman_photo_price, name='lesman_photo_price'), # 摄影师照片价格获取 |
|
47 |
+ url(r'^f/price$', group_views.lensman_photo_price, name='lensman_photo_price'), # 摄影师照片价格获取 |
|
48 |
+ url(r'^f/bought$', group_views.lensman_photo_bought, name='lensman_photo_bought'), # 摄影师照片已购买 |
|
48 | 49 |
] |
49 | 50 |
|
50 | 51 |
# 消息相关 |
@@ -2,7 +2,7 @@ |
||
2 | 2 |
|
3 | 3 |
from django.contrib import admin |
4 | 4 |
|
5 |
-from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo, PhotoCommentInfo, PhotoThumbUpInfo |
|
5 |
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo, GroupPhotoOrderInfo, PhotoCommentInfo, PhotoThumbUpInfo |
|
6 | 6 |
|
7 | 7 |
|
8 | 8 |
class GroupInfoAdmin(admin.ModelAdmin): |
@@ -17,7 +17,11 @@ class GroupUserInfoAdmin(admin.ModelAdmin): |
||
17 | 17 |
|
18 | 18 |
class GroupPhotoInfoAdmin(admin.ModelAdmin): |
19 | 19 |
list_display = ('group_id', 'user_id', 'nickname', 'photo_path', 'photo_thumbnail_path', 'photo_thumbnail2_path', 'status', 'created_at', 'updated_at') |
20 |
- list_filter = ('status', ) |
|
20 |
+ list_filter = ('photo_from', 'status') |
|
21 |
+ |
|
22 |
+ |
|
23 |
+class GroupPhotoOrderInfoAdmin(admin.ModelAdmin): |
|
24 |
+ list_display = ('group_id', 'user_id', 'photo_id', 'm_photo_path', 'l_photo_path', 'r_photo_path', 'status', 'created_at', 'updated_at') |
|
21 | 25 |
|
22 | 26 |
|
23 | 27 |
class PhotoCommentInfoAdmin(admin.ModelAdmin): |
@@ -33,5 +37,6 @@ class PhotoThumbUpInfoAdmin(admin.ModelAdmin): |
||
33 | 37 |
admin.site.register(GroupInfo, GroupInfoAdmin) |
34 | 38 |
admin.site.register(GroupUserInfo, GroupUserInfoAdmin) |
35 | 39 |
admin.site.register(GroupPhotoInfo, GroupPhotoInfoAdmin) |
40 |
+admin.site.register(GroupPhotoOrderInfo, GroupPhotoOrderInfoAdmin) |
|
36 | 41 |
admin.site.register(PhotoCommentInfo, PhotoCommentInfoAdmin) |
37 | 42 |
admin.site.register(PhotoThumbUpInfo, PhotoThumbUpInfoAdmin) |
@@ -0,0 +1,68 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('group', '0018_auto_20160417_2246'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.CreateModel( |
|
15 |
+ name='GroupPhotoOrderInfo', |
|
16 |
+ fields=[ |
|
17 |
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), |
|
18 |
+ ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')), |
|
19 |
+ ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)), |
|
20 |
+ ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)), |
|
21 |
+ ('group_id', models.CharField(max_length=255, blank=True, help_text='\u7fa4\u7ec4\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='group_id', db_index=True)), |
|
22 |
+ ('user_id', models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True)), |
|
23 |
+ ('photo_id', models.CharField(max_length=255, blank=True, help_text='\u7167\u7247\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='photo_id', db_index=True)), |
|
24 |
+ ('m_photo_path', models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u63a7\u5236\u5668\u4e0a\u4f20\uff0c\u65e0\u6c34\u5370', max_length=255, null=True, verbose_name='m_photo_path', blank=True)), |
|
25 |
+ ('l_photo_path', models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u7f8e\u5316\u5927\u56fe', max_length=255, null=True, verbose_name='l_photo_path', blank=True)), |
|
26 |
+ ('r_photo_path', models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u9ad8\u6e05\u5927\u56fe', max_length=255, null=True, verbose_name='r_photo_path', blank=True)), |
|
27 |
+ ], |
|
28 |
+ options={ |
|
29 |
+ 'verbose_name': 'groupphotoorderinfo', |
|
30 |
+ 'verbose_name_plural': 'groupphotoorderinfo', |
|
31 |
+ }, |
|
32 |
+ ), |
|
33 |
+ migrations.AddField( |
|
34 |
+ model_name='groupphotoinfo', |
|
35 |
+ name='lensman_id', |
|
36 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u6444\u5f71\u5e08\u552f\u4e00\u6807\u8bc6\uff0c\u540c PhotosInfo \u8868', null=True, verbose_name='lensman_id', db_index=True), |
|
37 |
+ ), |
|
38 |
+ migrations.AddField( |
|
39 |
+ model_name='groupphotoinfo', |
|
40 |
+ name='lensman_photo_id', |
|
41 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u6444\u5f71\u5e08\u7167\u7247\u552f\u4e00\u6807\u8bc6\uff0c\u540c PhotosInfo \u8868', null=True, verbose_name='lensman_photo_id', db_index=True), |
|
42 |
+ ), |
|
43 |
+ migrations.AlterField( |
|
44 |
+ model_name='groupinfo', |
|
45 |
+ name='admin_id', |
|
46 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='admin_id', db_index=True), |
|
47 |
+ ), |
|
48 |
+ migrations.AlterField( |
|
49 |
+ model_name='groupphotoinfo', |
|
50 |
+ name='user_id', |
|
51 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True), |
|
52 |
+ ), |
|
53 |
+ migrations.AlterField( |
|
54 |
+ model_name='groupuserinfo', |
|
55 |
+ name='user_id', |
|
56 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True), |
|
57 |
+ ), |
|
58 |
+ migrations.AlterField( |
|
59 |
+ model_name='photocommentinfo', |
|
60 |
+ name='user_id', |
|
61 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True), |
|
62 |
+ ), |
|
63 |
+ migrations.AlterField( |
|
64 |
+ model_name='photothumbupinfo', |
|
65 |
+ name='user_id', |
|
66 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True), |
|
67 |
+ ), |
|
68 |
+ ] |
@@ -0,0 +1,19 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('group', '0019_auto_20160422_1322'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AddField( |
|
15 |
+ model_name='groupphotoinfo', |
|
16 |
+ name='session_id', |
|
17 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7167\u7247\u7ec4\u552f\u4e00\u6807\u8bc6\uff0c\u540c PhotosInfo \u8868', null=True, verbose_name='session_id', db_index=True), |
|
18 |
+ ), |
|
19 |
+ ] |
@@ -9,6 +9,7 @@ from pai2.basemodels import CreateUpdateMixin |
||
9 | 9 |
from utils.url_utils import img_url |
10 | 10 |
|
11 | 11 |
from utils.redis.rgroup import get_group_photo_thumbup_flag |
12 |
+from utils.redis.rorder import get_lensman_order_record |
|
12 | 13 |
|
13 | 14 |
|
14 | 15 |
r = settings.REDIS_CACHE |
@@ -24,7 +25,7 @@ class GroupInfo(CreateUpdateMixin): |
||
24 | 25 |
) |
25 | 26 |
|
26 | 27 |
group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True, unique=True) |
27 |
- admin_id = models.CharField(_(u'admin_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识') |
|
28 |
+ admin_id = models.CharField(_(u'admin_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
28 | 29 |
group_name = models.CharField(_(u'group_name'), max_length=255, blank=True, null=True, help_text=u'群组名称') |
29 | 30 |
group_default_avatar = models.IntegerField(_(u'group_default_avatar'), default=0, help_text=u'群组默认头像,0 - 255,水果头像') |
30 | 31 |
group_avatar = models.CharField(_(u'group_avatar'), max_length=255, blank=True, null=True, help_text=u'群组头像') |
@@ -99,7 +100,7 @@ class GroupUserInfo(CreateUpdateMixin): |
||
99 | 100 |
) |
100 | 101 |
|
101 | 102 |
group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) |
102 |
- user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识') |
|
103 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
103 | 104 |
current_id = models.IntegerField(_(u'current_id'), default=-1, help_text=u'当前群组照片ID') |
104 | 105 |
nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称') |
105 | 106 |
avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像') |
@@ -137,7 +138,7 @@ class GroupPhotoInfo(CreateUpdateMixin): |
||
137 | 138 |
) |
138 | 139 |
|
139 | 140 |
group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) |
140 |
- user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识') |
|
141 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
141 | 142 |
nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称') |
142 | 143 |
avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像') |
143 | 144 |
|
@@ -157,8 +158,13 @@ class GroupPhotoInfo(CreateUpdateMixin): |
||
157 | 158 |
|
158 | 159 |
comment_num = models.IntegerField(_(u'comment_num'), default=0, help_text=u'照片评论数量') |
159 | 160 |
thumbup_num = models.IntegerField(_(u'thumbup_num'), default=0, help_text=u'照片点赞数量') |
161 |
+ |
|
160 | 162 |
photo_from = models.IntegerField(_(u'photo_from'), choices=PHOTO_FROM, default=APP_GROUP, help_text=u'照片来源') |
161 | 163 |
|
164 |
+ session_id = models.CharField(_(u'session_id'), max_length=255, blank=True, null=True, help_text=u'照片组唯一标识,同 PhotosInfo 表', db_index=True) |
|
165 |
+ lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识,同 PhotosInfo 表', db_index=True) |
|
166 |
+ lensman_photo_id = models.CharField(_(u'lensman_photo_id'), max_length=255, blank=True, null=True, help_text=u'摄影师照片唯一标识,同 PhotosInfo 表', db_index=True) |
|
167 |
+ |
|
162 | 168 |
class Meta: |
163 | 169 |
verbose_name = _(u'groupphotoinfo') |
164 | 170 |
verbose_name_plural = _(u'groupphotoinfo') |
@@ -183,6 +189,7 @@ class GroupPhotoInfo(CreateUpdateMixin): |
||
183 | 189 |
group = GroupInfo.objects.get(group_id=self.group_id) |
184 | 190 |
except GroupInfo.DoesNotExist: |
185 | 191 |
group = None |
192 |
+ porder = get_lensman_order_record(self.pk, user_id) if self.photo_from == GroupPhotoInfo.SESSION_GROUP else {} |
|
186 | 193 |
return { |
187 | 194 |
'group_id': group and group.group_id, |
188 | 195 |
'group_name': group and group.group_name, |
@@ -206,13 +213,51 @@ class GroupPhotoInfo(CreateUpdateMixin): |
||
206 | 213 |
'thumbup': get_group_photo_thumbup_flag(self.pk, user_id), |
207 | 214 |
'thumbup_num': self.thumbup_num, |
208 | 215 |
'photo_from': self.photo_from, |
216 |
+ 'porder': porder, |
|
209 | 217 |
'created_at': self.created_at.replace(microsecond=0), |
210 | 218 |
} |
211 | 219 |
|
212 | 220 |
|
221 |
+class GroupPhotoOrderInfo(CreateUpdateMixin): |
|
222 |
+ group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) |
|
223 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
224 |
+ photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True) |
|
225 |
+ |
|
226 |
+ m_photo_path = models.CharField(_(u'm_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,控制器上传,无水印') |
|
227 |
+ l_photo_path = models.CharField(_(u'l_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,美化大图') |
|
228 |
+ r_photo_path = models.CharField(_(u'r_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,高清大图') |
|
229 |
+ |
|
230 |
+ class Meta: |
|
231 |
+ verbose_name = _(u'groupphotoorderinfo') |
|
232 |
+ verbose_name_plural = _(u'groupphotoorderinfo') |
|
233 |
+ |
|
234 |
+ def __unicode__(self): |
|
235 |
+ return unicode(self.pk) |
|
236 |
+ |
|
237 |
+ @property |
|
238 |
+ def m_photo_url(self): |
|
239 |
+ return img_url(self.m_photo_path) |
|
240 |
+ |
|
241 |
+ @property |
|
242 |
+ def l_photo_url(self): |
|
243 |
+ return img_url(self.l_photo_path) |
|
244 |
+ |
|
245 |
+ @property |
|
246 |
+ def r_photo_url(self): |
|
247 |
+ return img_url(self.r_photo_path) |
|
248 |
+ |
|
249 |
+ @property |
|
250 |
+ def porder_info(self): |
|
251 |
+ return { |
|
252 |
+ 'm_photo_url': self.m_photo_url, |
|
253 |
+ 'l_photo_url': self.l_photo_url, |
|
254 |
+ 'r_photo_url': self.r_photo_url, |
|
255 |
+ } |
|
256 |
+ |
|
257 |
+ |
|
213 | 258 |
class PhotoCommentInfo(CreateUpdateMixin): |
214 | 259 |
photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'飞图唯一标识', db_index=True) |
215 |
- user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识') |
|
260 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
216 | 261 |
nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称') |
217 | 262 |
avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像') |
218 | 263 |
comment = models.TextField(_(u'comment'), blank=True, null=True, help_text=u'用户评论') |
@@ -237,7 +282,7 @@ class PhotoCommentInfo(CreateUpdateMixin): |
||
237 | 282 |
|
238 | 283 |
class PhotoThumbUpInfo(CreateUpdateMixin): |
239 | 284 |
photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'飞图唯一标识', db_index=True) |
240 |
- user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识') |
|
285 |
+ user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
241 | 286 |
nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称') |
242 | 287 |
avatar = models.CharField(_(u'avatar'), max_length=255, blank=True, null=True, help_text=u'用户头像') |
243 | 288 |
thumbup = models.BooleanField(_(u'thumbup'), default=True, help_text=u'用户点赞', db_index=True) |
@@ -26,9 +26,10 @@ from utils.redis.rkeys import ( |
||
26 | 26 |
GROUP_USERS_QUIT_SET, |
27 | 27 |
) |
28 | 28 |
from utils.redis.rkeys import GROUP_LAST_PHOTO_PK |
29 |
-from utils.redis.rkeys import LESMAN_PHOTO_PRICE, LESMAN_PHOTO_HAGGLE_TIMES |
|
29 |
+from utils.redis.rkeys import LENSMAN_PHOTO_PRICE, LENSMAN_PHOTO_HAGGLE_TIMES |
|
30 | 30 |
from utils.redis.rgroup import set_group_info, get_group_info, set_group_users_info, get_group_users_info |
31 | 31 |
from utils.redis.rgroup import set_group_photo_thumbup_flag, del_group_photo_thumbup_flag, get_group_photo_thumbup_flag |
32 |
+from utils.redis.rorder import get_lensman_order_record |
|
32 | 33 |
|
33 | 34 |
from utils.sql.raw import PAI2_HOME_API |
34 | 35 |
|
@@ -902,7 +903,10 @@ def pai2_home_api(request): |
||
902 | 903 |
'created_at': row[21], |
903 | 904 |
} for row in rows] |
904 | 905 |
|
905 |
- [row.update({'thumbup': get_group_photo_thumbup_flag(row['photo_id'], user_id)}) for row in rows] |
|
906 |
+ [row.update({ |
|
907 |
+ 'thumbup': get_group_photo_thumbup_flag(row['photo_id'], user_id), |
|
908 |
+ 'porder': get_lensman_order_record(row['photo_id'], user_id) if row['photo_from'] == GroupPhotoInfo.SESSION_GROUP else {} |
|
909 |
+ }) for row in rows] |
|
906 | 910 |
|
907 | 911 |
return JsonResponse({ |
908 | 912 |
'status': 200, |
@@ -914,7 +918,7 @@ def pai2_home_api(request): |
||
914 | 918 |
}) |
915 | 919 |
|
916 | 920 |
|
917 |
-def lesman_photo_price(request): |
|
921 |
+def lensman_photo_price(request): |
|
918 | 922 |
""" |
919 | 923 |
摄影师照片价格获取 |
920 | 924 |
:param request: |
@@ -925,22 +929,22 @@ def lesman_photo_price(request): |
||
925 | 929 |
photo_type = request.POST.get('photo_type', 'nomark') # nomark for 去除水印, origin for 获取高清图 |
926 | 930 |
|
927 | 931 |
# 处理价格逻辑 |
928 |
- lesman_photo_price_key = LESMAN_PHOTO_PRICE % (user_id, photo_id, photo_type) |
|
929 |
- lesman_photo_haggle_times_key = LESMAN_PHOTO_HAGGLE_TIMES % (user_id, photo_id, photo_type) |
|
932 |
+ lensman_photo_price_key = LENSMAN_PHOTO_PRICE % (user_id, photo_id, photo_type) |
|
933 |
+ lensman_photo_haggle_times_key = LENSMAN_PHOTO_HAGGLE_TIMES % (user_id, photo_id, photo_type) |
|
930 | 934 |
# Redis 获取存储的价格 |
931 |
- price = float(r.get(lesman_photo_price_key) or 0) |
|
935 |
+ price = float(r.get(lensman_photo_price_key) or 0) |
|
932 | 936 |
if price: |
933 |
- haggle_times = int(r.get(lesman_photo_haggle_times_key) or 0) |
|
937 |
+ haggle_times = int(r.get(lensman_photo_haggle_times_key) or 0) |
|
934 | 938 |
# 砍价逻辑 |
935 |
- if haggle_times < settings.LESMAN_PHOTO_HAGGLE_MAX_TIMES: |
|
939 |
+ if haggle_times < settings.LENSMAN_PHOTO_HAGGLE_MAX_TIMES: |
|
936 | 940 |
price -= random.choice([0.5, 1]) |
937 |
- r.incr(lesman_photo_haggle_times_key) |
|
941 |
+ r.incr(lensman_photo_haggle_times_key) |
|
938 | 942 |
else: |
939 | 943 |
# 获取摄影师定价 |
940 | 944 |
# TODO, 此处需要完整的摄影师定价 |
941 | 945 |
price = 9.9 if photo_type == 'origin' else 6.6 |
942 | 946 |
|
943 |
- r.set(lesman_photo_price_key, price) |
|
947 |
+ r.set(lensman_photo_price_key, price) |
|
944 | 948 |
|
945 | 949 |
return JsonResponse({ |
946 | 950 |
'status': 200, |
@@ -951,6 +955,24 @@ def lesman_photo_price(request): |
||
951 | 955 |
}) |
952 | 956 |
|
953 | 957 |
|
958 |
+def lensman_photo_bought(request): |
|
959 |
+ """ |
|
960 |
+ 摄影师照片已购买 |
|
961 |
+ :param request: |
|
962 |
+ :return: |
|
963 |
+ """ |
|
964 |
+ user_id = request.POST.get('user_id', '') |
|
965 |
+ photo_id = request.POST.get('photo_id', '') |
|
966 |
+ |
|
967 |
+ return JsonResponse({ |
|
968 |
+ 'status': 200, |
|
969 |
+ 'message': u'获取购买数据成功', |
|
970 |
+ 'data': { |
|
971 |
+ 'porder': get_lensman_order_record(photo_id, user_id) |
|
972 |
+ } |
|
973 |
+ }) |
|
974 |
+ |
|
975 |
+ |
|
954 | 976 |
def group_detail(request, group_id): |
955 | 977 |
return render(request, 'page/download.html', {}) |
956 | 978 |
|
@@ -0,0 +1,24 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('message', '0004_systemmessagedeleteinfo'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AlterField( |
|
15 |
+ model_name='usermessageinfo', |
|
16 |
+ name='group_id', |
|
17 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7fa4\u7ec4\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='group_id', db_index=True), |
|
18 |
+ ), |
|
19 |
+ migrations.AlterField( |
|
20 |
+ model_name='usermessageinfo', |
|
21 |
+ name='photo_id', |
|
22 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u98de\u56fe\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='photo_id', db_index=True), |
|
23 |
+ ), |
|
24 |
+ ] |
@@ -42,8 +42,8 @@ class UserMessageInfo(CreateUpdateMixin): |
||
42 | 42 |
|
43 | 43 |
to_uid = models.CharField(_(u'to_uid'), max_length=255, blank=True, null=True, help_text=u'接收消息用户唯一标识', db_index=True) |
44 | 44 |
|
45 |
- group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识') |
|
46 |
- photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'飞图唯一标识') |
|
45 |
+ group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) |
|
46 |
+ photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'飞图唯一标识', db_index=True) |
|
47 | 47 |
|
48 | 48 |
msg_type = models.CharField(_(u'msg_type'), max_length=255, default='system', help_text=u'消息类型', db_index=True) |
49 | 49 |
msg_title = models.CharField(_(u'msg_title'), max_length=255, blank=True, null=True, help_text=u'消息标题') |
@@ -1,4 +1,3 @@ |
||
1 |
-#!/usr/bin/env python |
|
2 | 1 |
# -*- coding: utf-8 -*- |
3 | 2 |
|
4 | 3 |
from django.db import models |
@@ -69,7 +69,6 @@ MIDDLEWARE_CLASSES += ('multidomain.middleware.DomainMiddleware', ) |
||
69 | 69 |
|
70 | 70 |
URL_CONFIG = ( |
71 | 71 |
# (r'^(.+\.)?xfoto\.com\.cn', 'pai2.urls_www'), |
72 |
- (r'^(.+\.)?api\.xfoto\.com\.cn', 'pai2.urls_api'), |
|
73 | 72 |
(r'^(.+\.)?api\.pai\.ai', 'pai2.urls_api'), |
74 | 73 |
) |
75 | 74 |
|
@@ -250,7 +249,7 @@ PAI2_HOME_MAX_ROWS = 400 # 首页照片最大数量, PAI2_HOME_PER_PAGE * PAI2_ |
||
250 | 249 |
GROUP_PER_PAGE = 20 # 群组每页数量 |
251 | 250 |
|
252 | 251 |
# 价格设置 |
253 |
-LESMAN_PHOTO_HAGGLE_MAX_TIMES = 3 # 摄影师照片最大砍价次数 |
|
252 |
+LENSMAN_PHOTO_HAGGLE_MAX_TIMES = 3 # 摄影师照片最大砍价次数 |
|
254 | 253 |
|
255 | 254 |
# 订单设置 |
256 | 255 |
ORDER_NUM_PER_PAGE = 10 # 订单每页数量 |
@@ -0,0 +1,34 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('pay', '0003_auto_20160417_1544'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AddField( |
|
15 |
+ model_name='orderinfo', |
|
16 |
+ name='group_id', |
|
17 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u7fa4\u7ec4\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='group_id', db_index=True), |
|
18 |
+ ), |
|
19 |
+ migrations.AddField( |
|
20 |
+ model_name='orderinfo', |
|
21 |
+ name='lensman_photo_id', |
|
22 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u6444\u5f71\u5e08\u7167\u7247\u552f\u4e00\u6807\u8bc6\uff0c\u540c PhotosInfo \u8868', null=True, verbose_name='lensman_photo_id', db_index=True), |
|
23 |
+ ), |
|
24 |
+ migrations.AddField( |
|
25 |
+ model_name='orderinfo', |
|
26 |
+ name='photo_id', |
|
27 |
+ field=models.CharField(max_length=255, blank=True, help_text='\u98de\u56fe\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='photo_id', db_index=True), |
|
28 |
+ ), |
|
29 |
+ migrations.AddField( |
|
30 |
+ model_name='orderinfo', |
|
31 |
+ name='photo_type', |
|
32 |
+ field=models.IntegerField(default=0, help_text='\u8d2d\u4e70\u7167\u7247\u7c7b\u578b', verbose_name='photo_type', choices=[(0, '\u53bb\u9664\u6c34\u5370'), (1, '\u83b7\u53d6\u9ad8\u6e05\u56fe')]), |
|
33 |
+ ), |
|
34 |
+ ] |
@@ -8,8 +8,18 @@ from shortuuidfield import ShortUUIDField |
||
8 | 8 |
|
9 | 9 |
from pai2.basemodels import CreateUpdateMixin |
10 | 10 |
|
11 |
+from group.models import GroupPhotoInfo |
|
12 |
+ |
|
11 | 13 |
|
12 | 14 |
class OrderInfo(CreateUpdateMixin): |
15 |
+ NOMARK = 0 |
|
16 |
+ ORIGIN = 1 |
|
17 |
+ |
|
18 |
+ PHOTO_TYPE = ( |
|
19 |
+ (NOMARK, u'去除水印'), |
|
20 |
+ (ORIGIN, u'获取高清图'), |
|
21 |
+ ) |
|
22 |
+ |
|
13 | 23 |
""" |
14 | 24 |
# Trade State of Wechat Query |
15 | 25 |
SUCCESS ——— 支付成功 |
@@ -35,6 +45,12 @@ class OrderInfo(CreateUpdateMixin): |
||
35 | 45 |
|
36 | 46 |
order_id = ShortUUIDField(_(u'order_id'), max_length=255, help_text=u'订单唯一标识', db_index=True) |
37 | 47 |
|
48 |
+ group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True) |
|
49 |
+ photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'飞图唯一标识', db_index=True) |
|
50 |
+ lensman_photo_id = models.CharField(_(u'lensman_photo_id'), max_length=255, blank=True, null=True, help_text=u'摄影师照片唯一标识,同 PhotosInfo 表', db_index=True) |
|
51 |
+ |
|
52 |
+ photo_type = models.IntegerField(_('photo_type'), choices=PHOTO_TYPE, default=NOMARK, help_text=u'购买照片类型') |
|
53 |
+ |
|
38 | 54 |
from_uid = models.CharField(_(u'from_uid'), max_length=255, help_text=u'付款用户唯一标识', db_index=True) |
39 | 55 |
to_lid = models.CharField(_(u'to_lid'), max_length=255, blank=True, null=True, help_text=u'收款摄影师唯一标识', db_index=True) |
40 | 56 |
to_uid = models.CharField(_(u'to_uid'), max_length=255, blank=True, null=True, help_text=u'收款用户唯一标识', db_index=True) |
@@ -54,11 +70,17 @@ class OrderInfo(CreateUpdateMixin): |
||
54 | 70 |
def __unicode__(self): |
55 | 71 |
return u'{0.pk}'.format(self) |
56 | 72 |
|
57 |
- @property |
|
58 |
- def data(self): |
|
73 |
+ def data(self, user_id=None): |
|
74 |
+ try: |
|
75 |
+ group_photo = GroupPhotoInfo.objects.get(pk=self.photo_id) |
|
76 |
+ except GroupPhotoInfo.DoesNotExist: |
|
77 |
+ group_photo = {} |
|
59 | 78 |
return { |
60 | 79 |
'order_id': self.order_id, |
61 | 80 |
'from_uid': self.from_uid, |
81 |
+ 'group_id': self.group_id, |
|
82 |
+ 'photo_id': self.photo_id, |
|
83 |
+ 'group_photo_info': group_photo and group_photo.photo_info(user_id), |
|
62 | 84 |
'to_lid': self.to_lid, |
63 | 85 |
'to_uid': self.to_uid, |
64 | 86 |
'body': self.body, |
@@ -5,13 +5,18 @@ from django.db import transaction |
||
5 | 5 |
from django.http import JsonResponse |
6 | 6 |
from django.shortcuts import HttpResponse |
7 | 7 |
|
8 |
+from group.models import GroupPhotoInfo, GroupPhotoOrderInfo |
|
8 | 9 |
from pay.models import OrderInfo |
10 |
+from photo.models import PhotosInfo |
|
9 | 11 |
|
10 | 12 |
from utils.page_utils import pagination |
11 | 13 |
|
12 |
-from utils.error.errno_utils import OrderStatusCode |
|
14 |
+from utils.error.errno_utils import GroupPhotoStatusCode, OrderStatusCode |
|
13 | 15 |
from utils.error.response_utils import response |
14 | 16 |
|
17 |
+from utils.redis.rkeys import LENSMAN_PHOTO_PRICE |
|
18 |
+from utils.redis.rorder import set_lensman_order_record |
|
19 |
+ |
|
15 | 20 |
from logit import logit |
16 | 21 |
|
17 | 22 |
from TimeConvert import TimeConvert as tc |
@@ -20,6 +25,7 @@ from wechatpy import WeChatPay, WeChatPayException |
||
20 | 25 |
import xmltodict |
21 | 26 |
|
22 | 27 |
|
28 |
+r = settings.REDIS_CACHE |
|
23 | 29 |
WECHAT = settings.WECHAT |
24 | 30 |
|
25 | 31 |
|
@@ -31,13 +37,33 @@ def wx_order_create_api(request): |
||
31 | 37 |
:param request: |
32 | 38 |
:return: |
33 | 39 |
""" |
34 |
- from_uid = request.POST.get('from_uid', '') |
|
35 |
- to_lid = request.POST.get('to_lid', '') |
|
36 |
- to_uid = request.POST.get('to_uid', '') |
|
40 |
+ # from_uid = request.POST.get('from_uid', '') |
|
41 |
+ # to_lid = request.POST.get('to_lid', '') |
|
42 |
+ # to_uid = request.POST.get('to_uid', '') |
|
43 |
+ |
|
44 |
+ group_id = request.POST.get('group_id', '') |
|
45 |
+ user_id = request.POST.get('user_id', '') |
|
46 |
+ photo_id = request.POST.get('photo_id', '') |
|
47 |
+ photo_type = request.POST.get('photo_type', 'nomark') # nomark for 去除水印, origin for 获取高清图 |
|
48 |
+ |
|
49 |
+ # 群组照片校验 |
|
50 |
+ try: |
|
51 |
+ group_photo = GroupPhotoInfo.objects.get(pk=photo_id) |
|
52 |
+ except GroupPhotoInfo.DoesNotExist: |
|
53 |
+ return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND) |
|
37 | 54 |
|
38 | 55 |
body = request.POST.get('body', '') # 商品描述 |
39 | 56 |
total_fee = int(request.POST.get('total_fee', 0)) # 总金额,单位分 |
40 | 57 |
|
58 |
+ # 金额校验 |
|
59 |
+ # if float(r.get(LENSMAN_PHOTO_PRICE % (user_id, photo_id, photo_type)) or 0) != total_fee: |
|
60 |
+ # return response(OrderStatusCode.FEE_CHECK_FAIL) |
|
61 |
+ |
|
62 |
+ # 获取 from_uid, to_lid, to_uid |
|
63 |
+ from_uid = user_id |
|
64 |
+ to_lid = group_photo.lensman_id |
|
65 |
+ to_uid = '' if group_photo.lensman_id else group_photo.user_id |
|
66 |
+ |
|
41 | 67 |
# JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里 |
42 | 68 |
trade_type = request.POST.get('trade_type', '') |
43 | 69 |
|
@@ -48,6 +74,10 @@ def wx_order_create_api(request): |
||
48 | 74 |
|
49 | 75 |
# 生成订单 |
50 | 76 |
order = OrderInfo.objects.create( |
77 |
+ group_id=group_id, |
|
78 |
+ photo_id=photo_id, |
|
79 |
+ lensman_photo_id=group_photo.lensman_photo_id, |
|
80 |
+ photo_type=1 if photo_type == 'origin' else 0, |
|
51 | 81 |
from_uid=from_uid, |
52 | 82 |
to_lid=to_lid, |
53 | 83 |
to_uid=to_uid, |
@@ -93,6 +123,16 @@ def order_paid_success(order): |
||
93 | 123 |
order.paid_at = tc.utc_datetime() |
94 | 124 |
order.save() |
95 | 125 |
|
126 |
+ porder, created = GroupPhotoOrderInfo.objects.get_or_create(group_id=order.group_id, photo_id=order.group_id, user_id=order.from_uid) |
|
127 |
+ photo = PhotosInfo.objects.get(photo_id=order.lensman_photo_id) |
|
128 |
+ if order.photo_type == OrderInfo.NOMARK: |
|
129 |
+ porder.m_photo_path = photo.m_photo_path |
|
130 |
+ elif order.photo_type == OrderInfo.ORIGIN: |
|
131 |
+ porder.r_photo_path = photo.r_photo_path |
|
132 |
+ porder.save() |
|
133 |
+ |
|
134 |
+ set_lensman_order_record(porder) |
|
135 |
+ |
|
96 | 136 |
|
97 | 137 |
def order_paid_fail(order): |
98 | 138 |
if order.pay_status == OrderInfo.FAIL: |
@@ -177,7 +217,7 @@ def wx_order_list_api(request): |
||
177 | 217 |
|
178 | 218 |
orders = OrderInfo.objects.filter(from_uid=user_id).order_by('-pk') |
179 | 219 |
orders, left = pagination(orders, page, num) |
180 |
- orders = [order.data for order in orders] |
|
220 |
+ orders = [order.data(user_id) for order in orders] |
|
181 | 221 |
|
182 | 222 |
return JsonResponse({ |
183 | 223 |
'status': 200, |
@@ -212,7 +252,7 @@ def wx_order_detail_api(request): |
||
212 | 252 |
'status': 200, |
213 | 253 |
'message': u'获取订单详情成功', |
214 | 254 |
'data': { |
215 |
- 'order': order.data, |
|
255 |
+ 'order': order.data(user_id), |
|
216 | 256 |
}, |
217 | 257 |
}) |
218 | 258 |
|
@@ -0,0 +1,34 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+from __future__ import unicode_literals |
|
3 |
+ |
|
4 |
+from django.db import models, migrations |
|
5 |
+ |
|
6 |
+ |
|
7 |
+class Migration(migrations.Migration): |
|
8 |
+ |
|
9 |
+ dependencies = [ |
|
10 |
+ ('photo', '0006_auto_20160120_1830'), |
|
11 |
+ ] |
|
12 |
+ |
|
13 |
+ operations = [ |
|
14 |
+ migrations.AlterField( |
|
15 |
+ model_name='photosinfo', |
|
16 |
+ name='l_photo_path', |
|
17 |
+ field=models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u7f8e\u5316\u5927\u56fe', max_length=255, null=True, verbose_name='l_photo_path', blank=True), |
|
18 |
+ ), |
|
19 |
+ migrations.AlterField( |
|
20 |
+ model_name='photosinfo', |
|
21 |
+ name='m_photo_path', |
|
22 |
+ field=models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u63a7\u5236\u5668\u4e0a\u4f20\uff0c\u65e0\u6c34\u5370', max_length=255, null=True, verbose_name='m_photo_path', blank=True), |
|
23 |
+ ), |
|
24 |
+ migrations.AlterField( |
|
25 |
+ model_name='photosinfo', |
|
26 |
+ name='p_photo_path', |
|
27 |
+ field=models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u63a7\u5236\u5668\u4e0a\u4f20\uff0c\u6709\u6c34\u5370\uff0c\u670d\u52a1\u5668\u6dfb\u52a0', max_length=255, null=True, verbose_name='p_photo_path', blank=True), |
|
28 |
+ ), |
|
29 |
+ migrations.AlterField( |
|
30 |
+ model_name='photosinfo', |
|
31 |
+ name='r_photo_path', |
|
32 |
+ field=models.CharField(help_text='\u7167\u7247\u5b58\u653e\u8def\u5f84\uff0c\u9ad8\u6e05\u5927\u56fe', max_length=255, null=True, verbose_name='r_photo_path', blank=True), |
|
33 |
+ ), |
|
34 |
+ ] |
@@ -34,10 +34,10 @@ class PhotosInfo(CreateUpdateMixin): |
||
34 | 34 |
lensman_id = models.CharField(_(u'lensman_id'), max_length=255, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True) |
35 | 35 |
session_id = models.CharField(_(u'session_id'), max_length=255, blank=True, null=True, help_text=u'照片组唯一标识', db_index=True) |
36 | 36 |
photo_id = models.CharField(_(u'photo_id'), max_length=255, blank=True, null=True, help_text=u'照片唯一标识', db_index=True, unique=True) |
37 |
- p_photo_path = models.CharField(_(u'p_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径') |
|
38 |
- m_photo_path = models.CharField(_(u'm_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径') |
|
39 |
- l_photo_path = models.CharField(_(u'l_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径') |
|
40 |
- r_photo_path = models.CharField(_(u'r_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径') |
|
37 |
+ p_photo_path = models.CharField(_(u'p_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,控制器上传,有水印,服务器添加') |
|
38 |
+ m_photo_path = models.CharField(_(u'm_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,控制器上传,无水印') |
|
39 |
+ l_photo_path = models.CharField(_(u'l_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,美化大图') |
|
40 |
+ r_photo_path = models.CharField(_(u'r_photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径,高清大图') |
|
41 | 41 |
|
42 | 42 |
class Meta: |
43 | 43 |
verbose_name = _('photosinfo') |
@@ -234,6 +234,9 @@ def session_join_api(request): |
||
234 | 234 |
photo_thumbnail2_w=photo_thumbnail2_w, |
235 | 235 |
photo_thumbnail2_h=photo_thumbnail2_h, |
236 | 236 |
photo_from=GroupPhotoInfo.SESSION_GROUP, |
237 |
+ session_id=photo.session_id, |
|
238 |
+ lensman_id=photo.lensman_id, |
|
239 |
+ lensman_photo_id=photo.photo_id, |
|
237 | 240 |
) |
238 | 241 |
|
239 | 242 |
# 设置群组最后一张照片PK |
@@ -69,6 +69,7 @@ class OrderStatusCode(BaseStatusCode): |
||
69 | 69 |
WX_ORDER_PAYING = StatusCodeField(404003, u'WX Order Paying', description=u'订单支付中') |
70 | 70 |
WX_ORDER_PAY_FAIL = StatusCodeField(404009, u'WX Order Pay Fail', description=u'微信支付失败') |
71 | 71 |
SIGN_CHECK_FAIL = StatusCodeField(404010, u'Sign Check Fail', description=u'签名校验失败') |
72 |
+ FEE_CHECK_FAIL = StatusCodeField(404011, u'FEE Check Fail', description=u'金额校验失败') |
|
72 | 73 |
NO_DETAIL_PERMISSION = StatusCodeField(404015, u'No Detail Permission', description=u'没有详情权限') |
73 | 74 |
|
74 | 75 |
|
@@ -19,8 +19,9 @@ GROUP_PHOTO_THUMB_UP = 'group:photo:thumb:up:%s:%s' # STRING,群组照片用 |
||
19 | 19 |
GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s' # STRING,群组最后一张照片PK,group_id |
20 | 20 |
|
21 | 21 |
# 摄影师照片相关 |
22 |
-LESMAN_PHOTO_PRICE = 'lesman:photo:price:%s:%s:%s' # STRING,摄影师照片价格,photo_id、user_id、photo_type |
|
23 |
-LESMAN_PHOTO_HAGGLE_TIMES = 'lesman:photo:haggle:times:%s:%s:%s' # STRING,摄影师照片价格,photo_id、user_id、photo_type |
|
22 |
+LENSMAN_PHOTO_PRICE = 'lensman:photo:price:%s:%s:%s' # STRING,摄影师照片价格,photo_id、user_id、photo_type |
|
23 |
+LENSMAN_PHOTO_HAGGLE_TIMES = 'lensman:photo:haggle:times:%s:%s:%s' # STRING,摄影师照片价格,photo_id、user_id、photo_type |
|
24 |
+LENSMAN_PHOTO_ORDER_RECORD = 'lensman:photo:order:record:%s:%s' # STRING,摄影师照片购买记录,photo_id、user_id |
|
24 | 25 |
|
25 | 26 |
# 系统消息相关 |
26 | 27 |
SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s' # STRING,系统消息删除信息,user_id |
@@ -0,0 +1,36 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from django.conf import settings |
|
4 |
+from django.core.serializers.json import DjangoJSONEncoder |
|
5 |
+ |
|
6 |
+from utils.redis.rkeys import LENSMAN_PHOTO_ORDER_RECORD |
|
7 |
+ |
|
8 |
+import json |
|
9 |
+ |
|
10 |
+ |
|
11 |
+r = settings.REDIS_CACHE |
|
12 |
+ |
|
13 |
+ |
|
14 |
+# 摄影师照片购买记录相关 |
|
15 |
+ |
|
16 |
+ |
|
17 |
+def set_lensman_order_record(porder): |
|
18 |
+ """ 设置摄影师照片购买记录 """ |
|
19 |
+ porder_info = porder.porder_info |
|
20 |
+ r.setex(LENSMAN_PHOTO_ORDER_RECORD % (porder.photo_id, porder.user_id), settings.REDIS_EXPIRED_MONTH, json.dumps(porder_info, cls=DjangoJSONEncoder)) |
|
21 |
+ return porder_info |
|
22 |
+ |
|
23 |
+ |
|
24 |
+def set_lensman_order_record_by_id(photo_id, user_id): |
|
25 |
+ """ 设置摄影师照片购买记录 """ |
|
26 |
+ from group.models import GroupPhotoOrderInfo |
|
27 |
+ try: |
|
28 |
+ porder = GroupPhotoOrderInfo.objects.get(photo_id=photo_id, user_id=user_id) |
|
29 |
+ except GroupPhotoOrderInfo.DoesNotExist: |
|
30 |
+ return {} |
|
31 |
+ return set_lensman_order_record(porder) |
|
32 |
+ |
|
33 |
+ |
|
34 |
+def get_lensman_order_record(photo_id, user_id): |
|
35 |
+ """ 获取摄影师照片购买记录 """ |
|
36 |
+ return json.loads(r.get(LENSMAN_PHOTO_ORDER_RECORD % (photo_id, user_id)) or '{}') or set_lensman_order_record_by_id(photo_id, user_id) |