repaired_ledger.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # coding=utf-8
  2. import simplejson as json
  3. from apps.web.constant import USER_RECHARGE_TYPE
  4. from base import init_env
  5. init_env(True)
  6. from apps.web.device.models import Group
  7. from apps.web.dealer.define import DEALER_INCOME_SOURCE
  8. from apps.web.report.ledger import Ledger
  9. from apps.web.dealer.models import Dealer
  10. from apps.web.user.models import RechargeRecord, MyUser
  11. from apps.web.dealer.proxy import DealerIncomeProxy
  12. PATH = "test.json"
  13. GIVE_CLIENT_COIN = False
  14. REPAIR = False
  15. OWNER_ID = None
  16. VIA = ["recharge", "chargeCard"]
  17. def get_record_item(path):
  18. with open(path) as f:
  19. jsonDict = json.load(f)
  20. return jsonDict
  21. def get_dealer_info(dealerId):
  22. dealer = Dealer.objects.filter(id=dealerId).only("username", "nickname").first()
  23. if not dealer:
  24. return
  25. return {
  26. "name": dealer.nickname,
  27. "phone": dealer.username,
  28. }
  29. def get_dealer_money(records):
  30. return sum([item.get("money") for item in records])
  31. def ledger_recharge_record(orderNo):
  32. # TODO zjl 这个地方处理充值分账的问题
  33. order = RechargeRecord.objects.filter(orderNo=orderNo).first()
  34. if not order:
  35. return False
  36. # 在做一次分账校验
  37. if DealerIncomeProxy.objects.filter(ref_id=order.id).first():
  38. return False
  39. group = Group.get_group(order.groupId)
  40. if order.via == "recharge":
  41. ledger = Ledger(USER_RECHARGE_TYPE.RECHARGE, order)
  42. elif order.via == "chargeCard":
  43. ledger = Ledger(USER_RECHARGE_TYPE.RECHARGE_CARD, order)
  44. else:
  45. return False
  46. # 需要执行的时候才会执行
  47. attachParas = order.attachParas or dict()
  48. try:
  49. # 分账
  50. if REPAIR:
  51. ledger.execute(journal=False, stats=True, check=False)
  52. attachParas["ledger"] = True
  53. order.attachParas = attachParas
  54. order.save()
  55. # 给用户金币
  56. if GIVE_CLIENT_COIN and int(order.coins) <= 5:
  57. user = MyUser.objects.filter(openId=order.openId, groupId=order.groupId).first()
  58. if user:
  59. user.incr_balance(order.coins)
  60. attachParas["addCoins"] = order.coins.mongo_amount
  61. order.attachParas = attachParas
  62. order.save()
  63. except Exception as e:
  64. print e
  65. return False
  66. return True
  67. def run():
  68. jsonDict = get_record_item(PATH)
  69. handleRecords = list()
  70. for dealerId, records in jsonDict.items():
  71. # 如果有经销商的ID
  72. if OWNER_ID and OWNER_ID != dealerId:
  73. continue
  74. dealerInfo = get_dealer_info(dealerId)
  75. print u"当前经销商 {}, 共有 {} 笔订单等待分账, 涉及金额一共 {}".format(dealerInfo.get("name"), len(records), get_dealer_money(records))
  76. for record in records:
  77. try:
  78. result = ledger_recharge_record(record.get("orderNo"))
  79. except Exception as e:
  80. print e
  81. print record.get("orderNo")
  82. else:
  83. if result:
  84. handleRecords.append(record.get("orderNo"))
  85. if not OWNER_ID:
  86. fileName = "repaired_09_27_ledger_record.txt"
  87. else:
  88. fileName = "repaired_09_27_{}ledger_record.txt".format(OWNER_ID)
  89. with open(fileName, "w") as f:
  90. content = "\n".join(handleRecords)
  91. f.write(content)
  92. if __name__ == '__main__':
  93. ac = u"执行查询,并不对结果进行更改" if not REPAIR else u"当前执行后会对记录进行修改"
  94. s = raw_input(u"当前{} \n订单类型范围{}:\n经销商ID: {}\n5元以下给用户金币: {}\n继续执行请输入yes\n".format(ac, VIA, OWNER_ID, GIVE_CLIENT_COIN))
  95. assert s == "yes", u"执行结束"
  96. run()