@@ -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)
|