auto_splict_account.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # coding=utf-8
  2. import imp
  3. import os
  4. import sys
  5. import traceback
  6. import datetime
  7. import django
  8. from django.utils import timezone
  9. from django.db import transaction
  10. from django.db.models import Sum, Q
  11. def autoSplitAccount():
  12. # 查询状态是未处理和处理中的分账明细进行分账处理(处理中就查询结果 未处理的就进行分账)
  13. details = SplitAccountDetail.objects.filter(Q(status=SplitAccountDetail.DEFAULT) | Q(status=SplitAccountDetail.PENDING))
  14. app = WechatApplet.objects.filter().first()
  15. if not app:
  16. return
  17. for instance in details:
  18. main = instance.main
  19. if (not main) or (main.status == SplitAccount.FINISHED):
  20. continue
  21. order = Order.objects.filter(splitaccount=main).first()
  22. if (not order) or (order.status != Order.FINISH) or (not order.recommend_member) or (order.rebate <= 0):
  23. continue
  24. pay = order.pay
  25. if (not pay) or (pay.status != Pay.CONFIRM) or (pay.profit_sharing == 'N'):
  26. continue
  27. try:
  28. main.handSplitAccont(instance, pay, app)
  29. except:
  30. traceback.print_exc()
  31. continue
  32. def setup_django_env(path):
  33. sys.path.insert(0, path)
  34. f, filename, desc = imp.find_module('settings', [path])
  35. imp.load_module('settings', f, filename, desc)
  36. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
  37. sys.path.append(os.path.abspath(os.path.join(path, os.path.pardir)))
  38. if __name__ == '__main__':
  39. dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
  40. setup_django_env(dirname+'/../carwin_activity')
  41. django.setup()
  42. from apps.activity.models import SplitAccount, SplitAccountDetail, Order, Pay
  43. from apps.WechatApplet.models import WechatApplet
  44. try:
  45. print('start=======',timezone.now())
  46. # with transaction.atomic():
  47. autoSplitAccount()
  48. print('end========', timezone.now())
  49. except Exception as e:
  50. traceback.print_exc()