# 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()