|
@@ -1,136 +1,118 @@
|
|
|
# coding=utf-8
|
|
|
from django.db import models
|
|
|
from django.conf import settings
|
|
|
-from django.utils import timezone
|
|
|
from utils.exceptions import CustomError
|
|
|
-from apps.base import Formater
|
|
|
-from apps.option.models import Balance
|
|
|
from apps.log.models import BizLog
|
|
|
from django.contrib.auth import get_user_model
|
|
|
User = get_user_model()
|
|
|
+from apps.upload.models import Upload
|
|
|
+from apps import order
|
|
|
|
|
|
-class Pay(models.Model):
|
|
|
- WAIT = 0
|
|
|
- PAY = 1
|
|
|
- UNDO = 2
|
|
|
- STATUS_CHOICES = (
|
|
|
- (WAIT, u'待付款'),
|
|
|
- (PAY, u'已付款'),
|
|
|
- (UNDO, u'已取消'),
|
|
|
- )
|
|
|
- CUSTOMER = 1
|
|
|
- TYPE_CHOICES = (
|
|
|
- (CUSTOMER, u'客户'),
|
|
|
- )
|
|
|
-
|
|
|
- pay_no = models.CharField(max_length=25, verbose_name='支付单号', unique=True, null=True)
|
|
|
- status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name='状态', default=WAIT)
|
|
|
- type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name='类别', default=CUSTOMER)
|
|
|
- precreate_amount = models.BigIntegerField(verbose_name=u"预支付金额")
|
|
|
- create_time = models.DateTimeField(verbose_name=u"创建时间", default=timezone.now)
|
|
|
- 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)
|
|
|
- pay_time = models.DateTimeField(verbose_name=u"创建时间", null=True)
|
|
|
-
|
|
|
- class Meta:
|
|
|
- db_table = "pay"
|
|
|
- verbose_name = u"支付信息"
|
|
|
- ordering = ('-id',)
|
|
|
- default_permissions = ()
|
|
|
-
|
|
|
- def payClosed(self):
|
|
|
- if self.status != Pay.WAIT:
|
|
|
- return
|
|
|
-
|
|
|
- self.status = Pay.UNDO
|
|
|
- self.save()
|
|
|
-
|
|
|
- def paySuccess(self, pay_amount):
|
|
|
- if self.status != Pay.WAIT:
|
|
|
- return
|
|
|
-
|
|
|
- self.status = Pay.PAY
|
|
|
- self.amount = Formater.formatPrice(pay_amount)
|
|
|
- self.pay_time = timezone.now()
|
|
|
- self.save()
|
|
|
- order = Order.objects.filter(pay=self).first()
|
|
|
- if order:
|
|
|
- order.status = Order.FINISH
|
|
|
- order.actual_amount = self.amount
|
|
|
-
|
|
|
- if order.package:
|
|
|
- desc = '充值{}元,赠送{}元'.format(Formater.formatPriceShow(order.package.amount),
|
|
|
- Formater.formatPriceShow(order.package.give_amount))
|
|
|
- Balance.update_balance(order.create_user, order.package.amount+order.package.give_amount, desc)
|
|
|
- order.save()
|
|
|
-
|
|
|
- @staticmethod
|
|
|
- def getByNo(pay_no):
|
|
|
- instance = Pay.objects.filter(pay_no=pay_no).first()
|
|
|
- if not instance:
|
|
|
- raise CustomError(u'未找到相应的支付单号!')
|
|
|
- return instance
|
|
|
-
|
|
|
- # 小程序支付
|
|
|
- @staticmethod
|
|
|
- def wechatAppPay(user, amount, type=1):
|
|
|
- item = Pay._precreatePay(
|
|
|
- user,
|
|
|
- amount,
|
|
|
- type,
|
|
|
- )
|
|
|
- return item
|
|
|
-
|
|
|
- @staticmethod
|
|
|
- def _precreatePay(user, amount, type):
|
|
|
-
|
|
|
- pay_no = '{0}{1}'.format(user.id, timezone.now().strftime('%y%m%d%H%M%S'))
|
|
|
- pay = Pay.objects.create(
|
|
|
- pay_no=pay_no,
|
|
|
- status=Pay.WAIT,
|
|
|
- precreate_amount=amount,
|
|
|
- user=user,
|
|
|
- type=type,
|
|
|
- )
|
|
|
- return pay
|
|
|
-
|
|
|
-class Package(models.Model):
|
|
|
+class Product(models.Model):
|
|
|
create_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='package_create_user', verbose_name=u"添加人",
|
|
|
on_delete=models.PROTECT, editable=False)
|
|
|
create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
|
|
|
- amount = models.BigIntegerField(verbose_name=u'充值金额', default=0)
|
|
|
- give_amount = models.BigIntegerField(verbose_name=u'赠送余额', default=0)
|
|
|
-
|
|
|
+ month = models.IntegerField(verbose_name=u'贷款期限')
|
|
|
+ name = models.CharField(verbose_name=u'产品名称', max_length=200)
|
|
|
+ enable = models.BooleanField(verbose_name=u'是否在用', default=True,)
|
|
|
+ main_image = models.ForeignKey(Upload, verbose_name=u'主图', on_delete=models.SET_NULL, null=True,
|
|
|
+ related_name='main_image')
|
|
|
class Meta:
|
|
|
- db_table = "package"
|
|
|
- verbose_name = u"套餐"
|
|
|
+ db_table = "product"
|
|
|
+ verbose_name = u"贷款产品"
|
|
|
ordering = ('-id',)
|
|
|
default_permissions = ()
|
|
|
permissions = [
|
|
|
]
|
|
|
|
|
|
+class ProductImages(models.Model):
|
|
|
+
|
|
|
+ name = models.CharField(verbose_name=u'名称', max_length=200)
|
|
|
+ product = models.ForeignKey(Product, verbose_name=u'产品', on_delete=models.PROTECT, related_name='product_images')
|
|
|
+ image = models.ForeignKey(Upload, verbose_name=u'图片', on_delete=models.PROTECT)
|
|
|
+
|
|
|
+ class Meta:
|
|
|
+ db_table = "product_images"
|
|
|
+ verbose_name = u"产品图片"
|
|
|
+ ordering = ('id',)
|
|
|
+ default_permissions = ()
|
|
|
+
|
|
|
class Order(models.Model):
|
|
|
- WAIT_PAY = 1
|
|
|
- FINISH = 2
|
|
|
- CANCEL = 3
|
|
|
- STATUS_CHOICES = (
|
|
|
- (WAIT_PAY, u'待付款'),
|
|
|
- (FINISH, u'已完成'),
|
|
|
- (CANCEL, u'已取消'),
|
|
|
- )
|
|
|
-
|
|
|
- no = models.CharField(max_length=50, verbose_name=u'订单号', blank=True)
|
|
|
- pay = models.ForeignKey(Pay, verbose_name='支付信息', on_delete=models.PROTECT, null=True, editable=False)
|
|
|
- package = models.ForeignKey(Package, verbose_name='套餐', on_delete=models.PROTECT, null=True, editable=False)
|
|
|
-
|
|
|
- status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"订单状态", default=WAIT_PAY)
|
|
|
+
|
|
|
+
|
|
|
+ category = models.PositiveSmallIntegerField(choices=order.CATEGORY_CHOICES, verbose_name=u"订单类型", default=order.ZERO)
|
|
|
+ status = models.PositiveSmallIntegerField(choices=order.STATUS_CHOICES, verbose_name=u"订单状态", default=order.ZERO)
|
|
|
+ seller = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='order_seller', verbose_name=u"业务人员",
|
|
|
+ on_delete=models.PROTECT, editable=False)
|
|
|
create_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='order_create_user', verbose_name=u"添加人",
|
|
|
on_delete=models.PROTECT, editable=False)
|
|
|
create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
|
|
|
- total_amount = models.BigIntegerField(verbose_name=u'总金额', default=0)
|
|
|
- balance_deduction = models.BigIntegerField(verbose_name=u'余额抵扣', editable=False, default=0)
|
|
|
- actual_amount = models.BigIntegerField(verbose_name=u'实付金额', editable=False, default=0)
|
|
|
+ cancel_reason = models.CharField(max_length=100, verbose_name=u"未通过原因", null=True)
|
|
|
+
|
|
|
+ vmodel = models.CharField(max_length=100, verbose_name=u"车型", null=True)
|
|
|
+ invioce = models.CharField(max_length=10, verbose_name=u"车辆发票金额", null=True)
|
|
|
+
|
|
|
+ ptax = models.CharField(max_length=10, verbose_name=u"购置税", null=True)
|
|
|
+ insurance = models.CharField(max_length=10, verbose_name=u"保险", null=True)
|
|
|
+ boutique = models.CharField(max_length=10, verbose_name=u"精品", null=True)
|
|
|
+ wextension = models.CharField(max_length=10, verbose_name=u"延保", null=True)
|
|
|
+ upkeep = models.CharField(max_length=10, verbose_name=u"保养", null=True)
|
|
|
+ dpratio = models.CharField(max_length=10, verbose_name=u"首付比例", null=True)
|
|
|
+ lamount = models.CharField(max_length=10, verbose_name=u"申请贷款金额", null=True)
|
|
|
+ package = models.ForeignKey(Product, verbose_name=u'贷款产品', on_delete=models.PROTECT, null=True)
|
|
|
+
|
|
|
+ name = models.CharField(max_length=10, verbose_name=u"姓名", null=True)
|
|
|
+ sex = models.PositiveSmallIntegerField(choices=order.STATUS_CHOICES, verbose_name=u"性别", default=order.ZERO)
|
|
|
+ bdate = models.DateField(verbose_name=u"出生日期", null=True)
|
|
|
+ rpr = models.PositiveSmallIntegerField(choices=order.HUKOU_CHOICES, verbose_name=u"户口", default=order.ZERO)
|
|
|
+ nationality = models.PositiveSmallIntegerField(choices=order.NATIONALITY_CHOICES, verbose_name=u"国籍/地区", default=order.ZERO)
|
|
|
+ ntype = models.PositiveSmallIntegerField(choices=order.ITYPE_CHOICES, verbose_name=u"身份证件类型", default=order.ZERO)
|
|
|
+ inumber = models.CharField(max_length=18, verbose_name=u"身份证件号码", null=True)
|
|
|
+ mstatus = models.PositiveSmallIntegerField(choices=order.HUNYIN_CHOICES, verbose_name=u"婚姻状况", default=order.ZERO)
|
|
|
+ elevel = models.PositiveSmallIntegerField(choices=order.JIAOYU_CHOICES, verbose_name=u"教育程度", default=order.ZERO)
|
|
|
+ naddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
|
|
|
+ hptype = models.PositiveSmallIntegerField(choices=order.FAGNCHAN_CHOICES, verbose_name=u"现居住房产类型", default=order.ZERO)
|
|
|
+ maddress = models.PositiveSmallIntegerField(choices=order.YOUJI_CHOICES, verbose_name=u"邮寄地址", default=order.ZERO)
|
|
|
+ email = models.CharField(max_length=100, verbose_name=u"电子邮箱", null=True)
|
|
|
+ wx = models.CharField(max_length=100, verbose_name=u"微信号", null=True)
|
|
|
+ phone = models.CharField(max_length=15, verbose_name=u"住宅固定电话", null=True)
|
|
|
+ tel = models.CharField(max_length=11, verbose_name=u"手机号", null=True)
|
|
|
+ wname = models.CharField(max_length=100, verbose_name=u"现工作单位名称", null=True)
|
|
|
+ wphone = models.CharField(max_length=15, verbose_name=u"单位电话", null=True)
|
|
|
+ waddress = models.CharField(max_length=100, verbose_name=u"现工作单位地址", null=True)
|
|
|
+ itype = models.PositiveSmallIntegerField(choices=order.HANGYE_CHOICES, verbose_name=u"行业类型", default=order.ZERO)
|
|
|
+ otype = models.PositiveSmallIntegerField(choices=order.ZHIYE_CHOICES, verbose_name=u"职业类型", default=order.ZERO)
|
|
|
+ position = models.CharField(max_length=20, verbose_name=u"职位", null=True)
|
|
|
+
|
|
|
+ wbst = models.BooleanField(verbose_name=u"是否挂靠", default=False)
|
|
|
+ bstname = models.CharField(max_length=100, verbose_name=u"挂靠公司名称", null=True)
|
|
|
+ bstcode = models.CharField(max_length=100, verbose_name=u"挂靠公司组织机构代码", null=True)
|
|
|
+ bsttel = models.CharField(max_length=100, verbose_name=u"挂靠公司电话", null=True)
|
|
|
+ bstaddress = models.CharField(max_length=100, verbose_name=u"挂靠公司地址", null=True)
|
|
|
+
|
|
|
+ cname = models.CharField(max_length=10, verbose_name=u"联系人1名称", null=True)
|
|
|
+ ctel = models.CharField(max_length=11, verbose_name=u"联系人1手机号", null=True)
|
|
|
+ relation = models.PositiveSmallIntegerField(choices=order.GUANXI_CHOICES, verbose_name=u"与借款人关系", default=order.ZERO)
|
|
|
+ caddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
|
|
|
+ ctname = models.CharField(max_length=10, verbose_name=u"联系人2姓名", null=True)
|
|
|
+ cttel = models.CharField(max_length=11, verbose_name=u"联系人2手机号", null=True)
|
|
|
+
|
|
|
+ thesame = models.BooleanField(verbose_name=u"是否有共同借款人", default=False)
|
|
|
+ tsname = models.CharField(max_length=10, verbose_name=u"共借人姓名", null=True)
|
|
|
+ tsbdate = models.DateField(verbose_name=u"出生日期", null=True)
|
|
|
+ tsitype = models.PositiveSmallIntegerField(choices=order.ITYPE_CHOICES, verbose_name=u"身份证件类型", default=order.ZERO)
|
|
|
+ tsinumber = models.CharField(max_length=18, verbose_name=u"身份证件号码", null=True)
|
|
|
+ tstel = models.CharField(max_length=11, verbose_name=u"手机号", null=True)
|
|
|
+ tsrelation = models.PositiveSmallIntegerField(choices=order.GUANXI_CHOICES, verbose_name=u"与借款人关系",
|
|
|
+ default=order.ZERO)
|
|
|
+ tsnaddress = models.CharField(max_length=100, verbose_name=u"现居住地址", null=True)
|
|
|
+ tsmaddress = models.PositiveSmallIntegerField(choices=order.YOUJI_CHOICES, verbose_name=u"邮寄地址", default=order.ZERO)
|
|
|
+ tsemail = models.CharField(max_length=50, verbose_name=u"电子邮箱", null=True)
|
|
|
+ tswx = models.CharField(max_length=20, verbose_name=u"微信号", null=True)
|
|
|
+ tswname = models.CharField(max_length=100, verbose_name=u"现工作单位名称", null=True)
|
|
|
+ tswphone = models.CharField(max_length=15, verbose_name=u"单位电话", null=True)
|
|
|
+ tswaddress = models.CharField(max_length=100, verbose_name=u"现工作单位地址", null=True)
|
|
|
+ tsmincome = models.CharField(max_length=10, verbose_name=u"税后月收入", null=True)
|
|
|
|
|
|
class Meta:
|
|
|
db_table = "order"
|
|
@@ -140,11 +122,6 @@ class Order(models.Model):
|
|
|
permissions = [
|
|
|
]
|
|
|
|
|
|
- def get_no(self):
|
|
|
- now = timezone.now()
|
|
|
- no = '%s%s' % (self.create_user.id, now.strftime('%Y%m%d%H%M%S'))
|
|
|
- return no
|
|
|
-
|
|
|
@staticmethod
|
|
|
def get_instance_by_id(id):
|
|
|
try:
|