"lines-code">
+from django.test import TestCase
+
+# Create your tests here.
@@ -0,0 +1,3 @@ |
||
| 1 |
+from django.shortcuts import render |
|
| 2 |
+ |
|
| 3 |
+# Create your views here. |
@@ -0,0 +1,3 @@ |
||
| 1 |
+from django.contrib import admin |
|
| 2 |
+ |
|
| 3 |
+# Register your models here. |
@@ -0,0 +1,6 @@ |
||
| 1 |
+from django.apps import AppConfig |
|
| 2 |
+ |
|
| 3 |
+ |
|
| 4 |
+class ActivityConfig(AppConfig): |
|
| 5 |
+ default_auto_field = 'django.db.models.BigAutoField' |
|
| 6 |
+ name = 'apps.lensman.activity' |
@@ -0,0 +1,32 @@ |
||
| 1 |
+# Generated by Django 3.2.8 on 2024-08-09 04:36 |
|
| 2 |
+ |
|
| 3 |
+from django.db import migrations, models |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+class Migration(migrations.Migration): |
|
| 7 |
+ |
|
| 8 |
+ initial = True |
|
| 9 |
+ |
|
| 10 |
+ dependencies = [ |
|
| 11 |
+ ] |
|
| 12 |
+ |
|
| 13 |
+ operations = [ |
|
| 14 |
+ migrations.CreateModel( |
|
| 15 |
+ name='LensmanContributionActivityIncomeExpensesInfo', |
|
| 16 |
+ fields=[ |
|
| 17 |
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 18 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
|
|
| 19 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
|
|
| 20 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
|
|
| 21 |
+ ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
|
|
| 22 |
+ ('lensman_id', models.CharField(blank=True, db_index=True, help_text='摄影师唯一标识', max_length=32, null=True, verbose_name='lensman_id')),
|
|
| 23 |
+ ('activity_id', models.CharField(blank=True, db_index=True, help_text='活动唯一标识', max_length=32, null=True, verbose_name='activity_id')),
|
|
| 24 |
+ ('contribution_id', models.CharField(blank=True, db_index=True, help_text='活动投稿唯一标识', max_length=32, null=True, verbose_name='contribution_id')),
|
|
| 25 |
+ ('amount', models.IntegerField(default=0, help_text='金额(分)', verbose_name='amount')),
|
|
| 26 |
+ ], |
|
| 27 |
+ options={
|
|
| 28 |
+ 'verbose_name': '摄影师投稿活动收入费用信息', |
|
| 29 |
+ 'verbose_name_plural': '摄影师投稿活动收入费用信息', |
|
| 30 |
+ }, |
|
| 31 |
+ ), |
|
| 32 |
+ ] |
@@ -0,0 +1,37 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.db import models |
|
| 4 |
+from django.utils.translation import ugettext_lazy as _ |
|
| 5 |
+from django_models_ext import BaseModelMixin |
|
| 6 |
+from TimeConvert import TimeConvert as tc |
|
| 7 |
+ |
|
| 8 |
+class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin): |
|
| 9 |
+ user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
|
| 10 |
+ lensman_id = models.CharField(_(u'lensman_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True) |
|
| 11 |
+ |
|
| 12 |
+ activity_id = models.CharField(_(u'activity_id'), max_length=32, blank=True, null=True, help_text=u'活动唯一标识', db_index=True) |
|
| 13 |
+ contribution_id = models.CharField(_(u'contribution_id'), max_length=32, blank=True, null=True, help_text=u'活动投稿唯一标识', db_index=True) |
|
| 14 |
+ |
|
| 15 |
+ amount = models.IntegerField(_(u'amount'), default=0, help_text=u'金额(分)') |
|
| 16 |
+ |
|
| 17 |
+ class Meta: |
|
| 18 |
+ verbose_name = _(u'摄影师投稿活动收入费用信息') |
|
| 19 |
+ verbose_name_plural = _(u'摄影师投稿活动收入费用信息') |
|
| 20 |
+ |
|
| 21 |
+ def __unicode__(self): |
|
| 22 |
+ return '%d' % self.pk |
|
| 23 |
+ |
|
| 24 |
+ @property |
|
| 25 |
+ def data(self): |
|
| 26 |
+ return {
|
|
| 27 |
+ 'lensman_id': self.lensman_id, |
|
| 28 |
+ 'activity_id': self.activity_id, |
|
| 29 |
+ 'contribution_id': self.contribution_id, |
|
| 30 |
+ 'amount': self.amount, |
|
| 31 |
+ 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'), |
|
| 32 |
+ 'updated_at': tc.local_string(utc_dt=self.updated_at, format='%Y-%m-%d %H:%M:%S') |
|
| 33 |
+ } |
|
| 34 |
+ |
|
| 35 |
+ @property |
|
| 36 |
+ def admindata(self): |
|
| 37 |
+ return self.data |
@@ -0,0 +1,3 @@ |
||
| 1 |
+from django.test import TestCase |
|
| 2 |
+ |
|
| 3 |
+# Create your tests here. |
@@ -0,0 +1,3 @@ |
||
| 1 |
+from django.shortcuts import render |
|
| 2 |
+ |
|
| 3 |
+# Create your views here. |
@@ -74,6 +74,8 @@ INSTALLED_APPS = ( |
||
| 74 | 74 |
'statistic', |
| 75 | 75 |
'tenancy', |
| 76 | 76 |
'website', |
| 77 |
+ 'apps.contract', |
|
| 78 |
+ 'apps.lensman.activity' |
|
| 77 | 79 |
) |
| 78 | 80 |
|
| 79 | 81 |
INSTALLED_APPS += ('multidomain', )
|
@@ -262,9 +264,12 @@ QINIU = {
|
||
| 262 | 264 |
# 图片链接设置 |
| 263 | 265 |
FILE_URL_TYPE = 'AUTO' # QINIU / SERVER / AUTO |
| 264 | 266 |
QINIU_FILE_URL_HTTPS = True |
| 265 |
-QINIU_FILE_URL_BEFORE = 'https://img.tamron.kodo.com.cn' # QINIU_FILE_URL_HTTPS False 时必填 |
|
| 266 |
-QINIU_FILE_URL_BEFORE2 = 'https://img.tamron.kodo.com.cn' # QINIU_FILE_URL_HTTPS False 时必填 |
|
| 267 |
-QINIU_FILE_URL_AFTER = 'http://img.tamron.kodo.com.cn' # QINIU_FILE_URL_HTTPS False 时必填 |
|
| 267 |
+# QINIU_FILE_URL_HTTPS False 时必填 |
|
| 268 |
+QINIU_FILE_URL_BEFORE = 'https://img.tamron.kodo.com.cn' |
|
| 269 |
+# QINIU_FILE_URL_HTTPS False 时必填 |
|
| 270 |
+QINIU_FILE_URL_BEFORE2 = 'https://img.tamron.kodo.com.cn' |
|
| 271 |
+# QINIU_FILE_URL_HTTPS False 时必填 |
|
| 272 |
+QINIU_FILE_URL_AFTER = 'http://img.tamron.kodo.com.cn' |
|
| 268 | 273 |
|
| 269 | 274 |
# 图片设置 |
| 270 | 275 |
# https://docs.djangoproject.com/en/5.0/releases/1.10/#maximum-size-of-a-request-body-and-the-number-of-get-post-parameters-is-limited |
@@ -280,10 +285,12 @@ CURTAIL_UUID_LENGTH = 7 # Used in django-curtail-uuid==1.0.0 |
||
| 280 | 285 |
|
| 281 | 286 |
# 水印设置 |
| 282 | 287 |
WATERMARK_OR_NOT = False # 水印是否开启 |
| 283 |
-WATERMARK_LOGO_PATH = os.path.join(PROJ_DIR, 'static/kodo/img/paiai_water_mark.png').replace('\\', '/') # 水印图片路径
|
|
| 288 |
+WATERMARK_LOGO_PATH = os.path.join( |
|
| 289 |
+ PROJ_DIR, 'static/kodo/img/paiai_water_mark.png').replace('\\', '/') # 水印图片路径
|
|
| 284 | 290 |
|
| 285 | 291 |
# 原图设置 |
| 286 |
-LENSMAN_PHOTO_ORIGIN_EXPIRED_MSEL = 604800000 # 摄影师原图过期毫秒数,7d = 7 * 24 * 3600 * 1000msel |
|
| 292 |
+# 摄影师原图过期毫秒数,7d = 7 * 24 * 3600 * 1000msel |
|
| 293 |
+LENSMAN_PHOTO_ORIGIN_EXPIRED_MSEL = 604800000 |
|
| 287 | 294 |
|
| 288 | 295 |
# 缩略图设置 |
| 289 | 296 |
THUMBNAIL_MAX_WIDTH = 540 |
@@ -292,19 +299,27 @@ THUMBNAIL_MAX_WIDTH2 = 1080 |
||
| 292 | 299 |
# 首页设置 |
| 293 | 300 |
PAI2_HOME_PER_PAGE = 20 # 首页照片每页数量 |
| 294 | 301 |
PAI2_HOME_MAX_PAGE = 20 # 首页照片最大页数 |
| 295 |
-PAI2_HOME_MAX_ROWS = 400 # 首页照片最大数量,PAI2_HOME_PER_PAGE * PAI2_HOME_MAX_PAGE = 20 * 20 = 400 |
|
| 302 |
+# 首页照片最大数量,PAI2_HOME_PER_PAGE * PAI2_HOME_MAX_PAGE = 20 * 20 = 400 |
|
| 303 |
+PAI2_HOME_MAX_ROWS = 400 |
|
| 296 | 304 |
|
| 297 | 305 |
# 下载页设置 |
| 298 |
-TMPL_DOWNLOAD_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/download.tmpl.html').replace('\\', '/')
|
|
| 306 |
+TMPL_DOWNLOAD_PAGE_PATH = os.path.join( |
|
| 307 |
+ BASE_DIR, 'page/templates/page/download.tmpl.html').replace('\\', '/')
|
|
| 299 | 308 |
|
| 300 |
-PAI2_USER_DOWNLOAD_ADR_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_user_adr_download.html').replace('\\', '/')
|
|
| 301 |
-PAI2_USER_DOWNLOAD_IOS_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_user_ios_download.html').replace('\\', '/')
|
|
| 309 |
+PAI2_USER_DOWNLOAD_ADR_PAGE_PATH = os.path.join( |
|
| 310 |
+ BASE_DIR, 'page/templates/page/kodo_user_adr_download.html').replace('\\', '/')
|
|
| 311 |
+PAI2_USER_DOWNLOAD_IOS_PAGE_PATH = os.path.join( |
|
| 312 |
+ BASE_DIR, 'page/templates/page/kodo_user_ios_download.html').replace('\\', '/')
|
|
| 302 | 313 |
|
| 303 |
-PAI2_LENSMAN_DOWNLOAD_ADR_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_lensman_adr_download.html').replace('\\', '/')
|
|
| 304 |
-PAI2_LENSMAN_DOWNLOAD_IOS_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_lensman_ios_download.html').replace('\\', '/')
|
|
| 314 |
+PAI2_LENSMAN_DOWNLOAD_ADR_PAGE_PATH = os.path.join( |
|
| 315 |
+ BASE_DIR, 'page/templates/page/kodo_lensman_adr_download.html').replace('\\', '/')
|
|
| 316 |
+PAI2_LENSMAN_DOWNLOAD_IOS_PAGE_PATH = os.path.join( |
|
| 317 |
+ BASE_DIR, 'page/templates/page/kodo_lensman_ios_download.html').replace('\\', '/')
|
|
| 305 | 318 |
|
| 306 |
-PAI2_TOURGUIDE_DOWNLOAD_ADR_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_tourguide_adr_download.html').replace('\\', '/')
|
|
| 307 |
-PAI2_TOURGUIDE_DOWNLOAD_IOS_PAGE_PATH = os.path.join(BASE_DIR, 'page/templates/page/kodo_tourguide_ios_download.html').replace('\\', '/')
|
|
| 319 |
+PAI2_TOURGUIDE_DOWNLOAD_ADR_PAGE_PATH = os.path.join( |
|
| 320 |
+ BASE_DIR, 'page/templates/page/kodo_tourguide_adr_download.html').replace('\\', '/')
|
|
| 321 |
+PAI2_TOURGUIDE_DOWNLOAD_IOS_PAGE_PATH = os.path.join( |
|
| 322 |
+ BASE_DIR, 'page/templates/page/kodo_tourguide_ios_download.html').replace('\\', '/')
|
|
| 308 | 323 |
|
| 309 | 324 |
# 下载设置 |
| 310 | 325 |
PAI2_USER_DOWNLOAD_WX_URL = 'https://a.app.qq.com/o/simple.jsp?pkgname=ai.pai.client' |
@@ -490,7 +505,8 @@ WEBSITE_MOBI = '{0}/pc/'.format(DOMAIN)
|
||
| 490 | 505 |
|
| 491 | 506 |
# 依赖 local_settings 中的配置 |
| 492 | 507 |
# 微信授权设置 |
| 493 |
-WECHAT_OAUTH2_REDIRECT_URI = '{0}/we/we_oauth2?scope={{0}}redirect_url={{1}}'.format(DOMAIN_HTTP)
|
|
| 508 |
+WECHAT_OAUTH2_REDIRECT_URI = '{0}/we/we_oauth2?scope={{0}}redirect_url={{1}}'.format(
|
|
| 509 |
+ DOMAIN_HTTP) |
|
| 494 | 510 |
WECHAT_BASE_REDIRECT_URI = '{0}/we/base_redirect'.format(DOMAIN_HTTP)
|
| 495 | 511 |
WECHAT_USERINFO_REDIRECT_URI = '{0}/we/userinfo_redirect'.format(DOMAIN_HTTP)
|
| 496 | 512 |
|
@@ -500,13 +516,18 @@ SYSTEM_MESSAGE_AVATAR = PAI2_LOGO_URL |
||
| 500 | 516 |
COMMENT_MESSAGE_AVATAR = PAI2_LOGO_URL |
| 501 | 517 |
THUMBUP_MESSAGE_AVATAR = PAI2_LOGO_URL |
| 502 | 518 |
|
| 503 |
-KODO_CLERK_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fclerk%3Fbrand_id%3D{{0}}'.format(OAUTH_DOMAIN, BASE_DOMAIN)
|
|
| 504 |
-KODO_SCREEN_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fscreen%2Fadmin%2Foauth%3Fbrand_id%3D{{0}}'.format(OAUTH_DOMAIN, BASE_DOMAIN)
|
|
| 505 |
-KODO_SCREEN_LOGIN_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fscreen%2Fadmin%2Flogin%3Fbrand_id%3D{{0}}%26token%3D{{1}}'.format(OAUTH_DOMAIN, BASE_DOMAIN)
|
|
| 519 |
+KODO_CLERK_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fclerk%3Fbrand_id%3D{{0}}'.format(
|
|
| 520 |
+ OAUTH_DOMAIN, BASE_DOMAIN) |
|
| 521 |
+KODO_SCREEN_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fscreen%2Fadmin%2Foauth%3Fbrand_id%3D{{0}}'.format(
|
|
| 522 |
+ OAUTH_DOMAIN, BASE_DOMAIN) |
|
| 523 |
+KODO_SCREEN_LOGIN_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fscreen%2Fadmin%2Flogin%3Fbrand_id%3D{{0}}%26token%3D{{1}}'.format(
|
|
| 524 |
+ OAUTH_DOMAIN, BASE_DOMAIN) |
|
| 506 | 525 |
|
| 507 |
-KODO_SUPERSR_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fsupersr%2Foauth%3Fbrand_id%3D{{0}}'.format(OAUTH_DOMAIN, BASE_DOMAIN)
|
|
| 526 |
+KODO_SUPERSR_AUTH_URL = '{0}/w/o?r=http%3A%2F%2F{1}%2Fp%2Fsupersr%2Foauth%3Fbrand_id%3D{{0}}'.format(
|
|
| 527 |
+ OAUTH_DOMAIN, BASE_DOMAIN) |
|
| 508 | 528 |
|
| 509 |
-DJANGO_WE_COMPONENT_REDIRECT_URI = '{0}/we/component_preauth'.format(PREAUTH_DOMAIN)
|
|
| 529 |
+DJANGO_WE_COMPONENT_REDIRECT_URI = '{0}/we/component_preauth'.format(
|
|
| 530 |
+ PREAUTH_DOMAIN) |
|
| 510 | 531 |
|
| 511 | 532 |
# Redis 连接 |
| 512 | 533 |
REDIS_CACHE = connector(REDIS.get('default', {}))
|
@@ -569,3 +590,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' |
||
| 569 | 590 |
|
| 570 | 591 |
DEFAULT_START_DATE = '1970-01-02' |
| 571 | 592 |
DEFAULT_END_DATE = '9999-12-03' |
| 593 |
+ |
|
| 594 |
+# 腾讯电子签配置 |
|
| 595 |
+CONTRACT_LENSMAN_CONTRIBUTION_TEMPLATE_ID = 'yDCp3UU05rgksnUXtZsEvdrK1tRGb7ax' |
|
| 596 |
+CONTRACT_LENSMAN_CONTRIBUTION_OPERATOR_ID = 'yDCp3UU055m70lUx6jaTk1RVkiVkKenJ' |