|
@@ -12,6 +12,14 @@ from apps.Alipay import Alipay
|
|
from apps.tenant.config.models import Config
|
|
from apps.tenant.config.models import Config
|
|
|
|
|
|
class Tenant(models.Model):
|
|
class Tenant(models.Model):
|
|
|
|
+ EDITION_1 = 1
|
|
|
|
+ EDITION_2 = 2
|
|
|
|
+ EDITION_3 = 3
|
|
|
|
+ EDITION_CHOICES = (
|
|
|
|
+ (EDITION_1, u'标准版'),
|
|
|
|
+ (EDITION_2, u'专业版'),
|
|
|
|
+ (EDITION_3, u'无限版'),
|
|
|
|
+ )
|
|
|
|
|
|
company_no = models.CharField(max_length=10, verbose_name=u'企业编号', blank=True, null=True)
|
|
company_no = models.CharField(max_length=10, verbose_name=u'企业编号', blank=True, null=True)
|
|
company_name = models.CharField(max_length=200, verbose_name=u'企业名称', blank=True, null=True)
|
|
company_name = models.CharField(max_length=200, verbose_name=u'企业名称', blank=True, null=True)
|
|
@@ -28,6 +36,7 @@ class Tenant(models.Model):
|
|
editable=False, null=True)
|
|
editable=False, null=True)
|
|
reject_reason = models.CharField(max_length=200, verbose_name=u'拒绝原因', blank=True, null=True)
|
|
reject_reason = models.CharField(max_length=200, verbose_name=u'拒绝原因', blank=True, null=True)
|
|
delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
|
|
delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
|
|
|
|
+ edition = models.PositiveSmallIntegerField(choices=EDITION_CHOICES, verbose_name='版本', default=EDITION_1)
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
db_table = 'tenant'
|
|
db_table = 'tenant'
|
|
@@ -98,9 +107,11 @@ class Pay(models.Model):
|
|
)
|
|
)
|
|
WECHAT = 1
|
|
WECHAT = 1
|
|
ALIPAY = 2
|
|
ALIPAY = 2
|
|
|
|
+ WECHAT_APP = 3
|
|
PAY_CHANNEL_CHOICES = (
|
|
PAY_CHANNEL_CHOICES = (
|
|
(WECHAT, u'微信'),
|
|
(WECHAT, u'微信'),
|
|
(ALIPAY, u'支付宝'),
|
|
(ALIPAY, u'支付宝'),
|
|
|
|
+ (WECHAT_APP, u'小程序'),
|
|
)
|
|
)
|
|
pay_no = models.CharField(max_length=25, verbose_name='支付单号',unique=True, null=True)
|
|
pay_no = models.CharField(max_length=25, verbose_name='支付单号',unique=True, null=True)
|
|
status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name='状态', default=WAIT)
|
|
status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name='状态', default=WAIT)
|
|
@@ -111,6 +122,7 @@ class Pay(models.Model):
|
|
amount = models.BigIntegerField(verbose_name=u"支付金额", null=True)
|
|
amount = models.BigIntegerField(verbose_name=u"支付金额", null=True)
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'下单人',related_name='pay_user', on_delete=models.PROTECT)
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'下单人',related_name='pay_user', on_delete=models.PROTECT)
|
|
tenant = models.ForeignKey(Tenant, verbose_name=u'商户',related_name='pay_tenant', on_delete=models.PROTECT)
|
|
tenant = models.ForeignKey(Tenant, verbose_name=u'商户',related_name='pay_tenant', on_delete=models.PROTECT)
|
|
|
|
+ edition_year = models.CharField(max_length=10, verbose_name='版本年限', default='')
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
db_table = "pay"
|
|
db_table = "pay"
|
|
@@ -132,7 +144,7 @@ class Pay(models.Model):
|
|
self.status = Pay.PAY
|
|
self.status = Pay.PAY
|
|
self.amount = Formater.formatAmount(pay_amount)
|
|
self.amount = Formater.formatAmount(pay_amount)
|
|
self.save()
|
|
self.save()
|
|
- year = Config.objects.filter(property=Config.KEY_RENEW_YEAR_1).first().value
|
|
|
|
|
|
+ year = self.edition_year.split(',')[1]
|
|
today = datetime.datetime.now().strftime('%Y-%m-%d')
|
|
today = datetime.datetime.now().strftime('%Y-%m-%d')
|
|
today_stamp = time.mktime(time.strptime(today, "%Y-%m-%d"))
|
|
today_stamp = time.mktime(time.strptime(today, "%Y-%m-%d"))
|
|
|
|
|
|
@@ -144,6 +156,7 @@ class Pay(models.Model):
|
|
renew_date = (datetime.datetime.now() + datetime.timedelta(days=365 * int(year))).strftime('%Y-%m-%d')
|
|
renew_date = (datetime.datetime.now() + datetime.timedelta(days=365 * int(year))).strftime('%Y-%m-%d')
|
|
self.tenant.end_date = renew_date
|
|
self.tenant.end_date = renew_date
|
|
self.tenant.status = settings.PASS
|
|
self.tenant.status = settings.PASS
|
|
|
|
+ self.tenant.edition = self.edition_year.split(',')[0]
|
|
self.tenant.save()
|
|
self.tenant.save()
|
|
|
|
|
|
# 支付宝回调,付款
|
|
# 支付宝回调,付款
|
|
@@ -169,30 +182,44 @@ class Pay(models.Model):
|
|
raise CustomError(u'未找到相应的支付单号!')
|
|
raise CustomError(u'未找到相应的支付单号!')
|
|
return instance
|
|
return instance
|
|
|
|
|
|
|
|
+ # 小程序支付
|
|
|
|
+ @staticmethod
|
|
|
|
+ def wechatAppPay(user, tenant_id, amount, edition_year):
|
|
|
|
+ item = Pay._precreatePay(
|
|
|
|
+ user,
|
|
|
|
+ tenant_id,
|
|
|
|
+ Pay.WECHAT_APP,
|
|
|
|
+ amount,
|
|
|
|
+ edition_year,
|
|
|
|
+ )
|
|
|
|
+ return item
|
|
|
|
+
|
|
# 微信支付
|
|
# 微信支付
|
|
@staticmethod
|
|
@staticmethod
|
|
- def wechatPay(user, tenant_id, amount):
|
|
|
|
|
|
+ def wechatPay(user, tenant_id, amount, edition_year):
|
|
item = Pay._precreatePay(
|
|
item = Pay._precreatePay(
|
|
user,
|
|
user,
|
|
tenant_id,
|
|
tenant_id,
|
|
Pay.WECHAT,
|
|
Pay.WECHAT,
|
|
- amount
|
|
|
|
|
|
+ amount,
|
|
|
|
+ edition_year,
|
|
)
|
|
)
|
|
return item
|
|
return item
|
|
|
|
|
|
# 支付宝支付
|
|
# 支付宝支付
|
|
@staticmethod
|
|
@staticmethod
|
|
- def alipayPay(user, tenant_id, amount):
|
|
|
|
|
|
+ def alipayPay(user, tenant_id, amount, edition_year):
|
|
item = Pay._precreatePay(
|
|
item = Pay._precreatePay(
|
|
user,
|
|
user,
|
|
tenant_id,
|
|
tenant_id,
|
|
Pay.ALIPAY,
|
|
Pay.ALIPAY,
|
|
- amount
|
|
|
|
|
|
+ amount,
|
|
|
|
+ edition_year,
|
|
)
|
|
)
|
|
return item
|
|
return item
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
- def _precreatePay(user, tenant_id, pay_channel, amount):
|
|
|
|
|
|
+ def _precreatePay(user, tenant_id, pay_channel, amount, edition_year):
|
|
|
|
|
|
pay_no = '{0}{1}'.format(tenant_id, timezone.now().strftime('%y%m%d%H%M%S'))
|
|
pay_no = '{0}{1}'.format(tenant_id, timezone.now().strftime('%y%m%d%H%M%S'))
|
|
pay = Pay.objects.create(
|
|
pay = Pay.objects.create(
|
|
@@ -202,6 +229,7 @@ class Pay(models.Model):
|
|
status=Pay.WAIT,
|
|
status=Pay.WAIT,
|
|
precreate_amount=amount,
|
|
precreate_amount=amount,
|
|
user=user,
|
|
user=user,
|
|
|
|
+ edition_year=edition_year,
|
|
)
|
|
)
|
|
qrcode = ''
|
|
qrcode = ''
|
|
if pay_channel == Pay.WECHAT:
|
|
if pay_channel == Pay.WECHAT:
|