123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- # coding=utf-8
- import csv
- import pandas as pd
- from bson import ObjectId
- from base import init_env
- init_env(True)
- from apps.web.agent.define import AGENT_INCOME_TYPE
- from apps.web.agent.models import Agent, AgentIncomeReport
- from apps.web.constant import PARTITION_ROLE
- from apps.web.dealer.define import DEALER_INCOME_TYPE
- from apps.web.report.utils import update_income_stats
- from apps.web.dealer.proxy import DealerIncomeProxy
- from apps.web.dealer.models import Dealer
- from apilib.monetary import RMB
- from apps.web.user.models import RechargeRecord
- CSV_PATH = u"微信平台9_28退款记录.csv"
- def get_source_data(csvPath):
- columns = ["refundStatus", "refundMoney", "wxOrderNo", "orderNo", "payMoney"]
- columnNums = [3, 5, 7, 8, 11]
- dataFrame = pd.read_csv(csvPath, skiprows=5, encoding="GBK", usecols=columnNums, names=columns)
- return dataFrame.iterrows()
- def get_recharge_record(**kwargs):
- for k in kwargs.keys():
- if k not in ["wxOrderNo", "orderNo"]:
- print "错误的获取订单参数, {}".format(kwargs)
- raise Exception(u"错误的获取订单参数")
- return RechargeRecord.objects.filter(**kwargs).first()
- def repaired_ledger(csvRow):
- """
- 处理 分账记录的修复
- :param csvRow:
- :return:
- """
- wxOrderNo = csvRow.get("wxOrderNo").replace("`", "")
- orderNo = csvRow.get("orderNo").replace("`", "")
- refundFee = RMB(csvRow.get("refundMoney"))
- record = get_recharge_record(wxOrderNo=wxOrderNo, orderNo=orderNo)
- refundFee = record.money
- # 获取分账记录
- proxy = DealerIncomeProxy.objects(ref_id=record.id).first()
- if not proxy:
- print "not proxy"
- return
- # 处理经销商以及参与设备分成的 记录先修改
- refund_partition = proxy.update_for_refund(refund_fee=refundFee)
- # 更新经销商,组和设备汇总信息
- if record.logicalCode:
- update_income_stats(proxy=proxy, refund_partion=refund_partition, refund_fee=refundFee, allowed={'dealer': True, 'group': True, 'device': False})
- else:
- update_income_stats(proxy=proxy, refund_fee=refundFee, refund_partion=refund_partition)
- # 更新经销商收益和代理商收益以及汇总数据
- refund_info = list()
- for item in refund_partition:
- if item['amount'] > RMB(0):
- if item['role'] == PARTITION_ROLE.PARTNER or item['role'] == PARTITION_ROLE.OWNER:
- try:
- dealer = Dealer.objects(id=item['id']).first()
- dealer.decr_fund(DEALER_INCOME_TYPE.DEVICE_INCOME, record.withdrawSourceKey,
- item['amount'])
- except Exception, e:
- print('refund money from dealer<id={}> error={}'.format(item['id'], str(e)))
- return
- else:
- try:
- agent = Agent.objects(id=item['id']).first() # type: Agent
- agent.decr_fund(AGENT_INCOME_TYPE.DEALER_DEVICE_FEE, record.withdrawSourceKey, item['amount'])
- AgentIncomeReport.get_collection().update(
- {'detail.recharge_record_id': ObjectId(record.id), 'agentId': item['id']},
- {'$inc': {'amount': (-item['amount']).mongo_amount}})
- except Exception, e:
- print('refund money from agent<id={}> error={}'.format(item['id'], str(e)))
- return
- refund_info.append({"role": item["role"], "id": item["id"], "money": str(item["amount"])})
- record.attachParas.update({"lige": True, "refund_partition": refund_info})
- record.save()
- return refund_info
- def run():
- repairedList = list()
- for index, row in get_source_data(CSV_PATH):
- print row
- try:
- refund_info = repaired_ledger(row)
- except Exception as e:
- print e
- repairedList.append({"orderNo": row.get("orderNo"), "repaired": 0})
- else:
- repairedList.append({"orderNo": row.get("orderNo"), "repaired": 1, "refundInfo": refund_info})
- with open("lige_ledger", "w") as f:
- w = csv.DictWriter(f, fieldnames=repairedList[0].keys())
- w.writeheader()
- w.writerows(repairedList)
- if __name__ == '__main__':
- run()
|