123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- # coding=utf-8
- import simplejson as json
- from apps.web.constant import USER_RECHARGE_TYPE
- from base import init_env
- init_env(True)
- from apps.web.device.models import Group
- from apps.web.dealer.define import DEALER_INCOME_SOURCE
- from apps.web.report.ledger import Ledger
- from apps.web.dealer.models import Dealer
- from apps.web.user.models import RechargeRecord, MyUser
- from apps.web.dealer.proxy import DealerIncomeProxy
- PATH = "test.json"
- GIVE_CLIENT_COIN = False
- REPAIR = False
- OWNER_ID = None
- VIA = ["recharge", "chargeCard"]
- def get_record_item(path):
- with open(path) as f:
- jsonDict = json.load(f)
- return jsonDict
- def get_dealer_info(dealerId):
- dealer = Dealer.objects.filter(id=dealerId).only("username", "nickname").first()
- if not dealer:
- return
- return {
- "name": dealer.nickname,
- "phone": dealer.username,
- }
- def get_dealer_money(records):
- return sum([item.get("money") for item in records])
- def ledger_recharge_record(orderNo):
- # TODO zjl 这个地方处理充值分账的问题
- order = RechargeRecord.objects.filter(orderNo=orderNo).first()
- if not order:
- return False
- # 在做一次分账校验
- if DealerIncomeProxy.objects.filter(ref_id=order.id).first():
- return False
- group = Group.get_group(order.groupId)
- if order.via == "recharge":
- ledger = Ledger(USER_RECHARGE_TYPE.RECHARGE, order)
- elif order.via == "chargeCard":
- ledger = Ledger(USER_RECHARGE_TYPE.RECHARGE_CARD, order)
- else:
- return False
- # 需要执行的时候才会执行
- attachParas = order.attachParas or dict()
- try:
- # 分账
- if REPAIR:
- ledger.execute(journal=False, stats=True, check=False)
- attachParas["ledger"] = True
- order.attachParas = attachParas
- order.save()
- # 给用户金币
- if GIVE_CLIENT_COIN and int(order.coins) <= 5:
- user = MyUser.objects.filter(openId=order.openId, groupId=order.groupId).first()
- if user:
- user.incr_balance(order.coins)
- attachParas["addCoins"] = order.coins.mongo_amount
- order.attachParas = attachParas
- order.save()
- except Exception as e:
- print e
- return False
- return True
- def run():
- jsonDict = get_record_item(PATH)
- handleRecords = list()
- for dealerId, records in jsonDict.items():
- # 如果有经销商的ID
- if OWNER_ID and OWNER_ID != dealerId:
- continue
- dealerInfo = get_dealer_info(dealerId)
- print u"当前经销商 {}, 共有 {} 笔订单等待分账, 涉及金额一共 {}".format(dealerInfo.get("name"), len(records), get_dealer_money(records))
- for record in records:
- try:
- result = ledger_recharge_record(record.get("orderNo"))
- except Exception as e:
- print e
- print record.get("orderNo")
- else:
- if result:
- handleRecords.append(record.get("orderNo"))
- if not OWNER_ID:
- fileName = "repaired_09_27_ledger_record.txt"
- else:
- fileName = "repaired_09_27_{}ledger_record.txt".format(OWNER_ID)
- with open(fileName, "w") as f:
- content = "\n".join(handleRecords)
- f.write(content)
- if __name__ == '__main__':
- ac = u"执行查询,并不对结果进行更改" if not REPAIR else u"当前执行后会对记录进行修改"
- s = raw_input(u"当前{} \n订单类型范围{}:\n经销商ID: {}\n5元以下给用户金币: {}\n继续执行请输入yes\n".format(ac, VIA, OWNER_ID, GIVE_CLIENT_COIN))
- assert s == "yes", u"执行结束"
- run()
|