# coding=utf-8 from base import init_env init_env(True) from apps.web.device.models import Device from apps.web.user.models import ConsumeRecord, RechargeRecord, RefundMoneyRecord from apps.web.dealer.proxy import DealerIncomeProxy import datetime from apps.web.agent.models import Agent from apps.web.dealer.models import Dealer from bson import ObjectId import csv from apilib.monetary import RMB from apps.web.agent.define import AGENT_INCOME_TYPE 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 def get_agent(): managerId = "5d857a130030483f797808b4" return Agent.objects.filter(managerId=managerId) def get_dealer(agentIds): return Dealer.objects.filter(agentId__in=agentIds) def get_consume(dealer): devNos = [_.devNo for _ in Device.objects.filter(ownerId=str(dealer.id))] records = ConsumeRecord.objects.filter(devNo__in=devNos, isNormal=False, dateTimeAdded__gte=datetime.datetime(2021, 6, 1)) return records def filter_record(records): new_records = list() for _record in records: if not _record.rechargeRcdId: continue a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_record.rechargeRcdId)).first() b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_record.rechargeRcdId)).first() c = RechargeRecord.objects.filter(id=_record.rechargeRcdId).first() # 没有分账记录的 或者没有退款记录的 if not a or not b: continue # 退款了并且还有分账的并且都成功的 if a.totalAmount == b.money == c.money and b.status == "success": new_records.append(_record) return new_records def e(orderNo): order = ConsumeRecord.objects.get(orderNo=orderNo) # type: ConsumeRecord if order.attachParas.get("repaired"): return recharge_record = RechargeRecord.objects.get(id=order.rechargeRcdId) refund_order = RefundMoneyRecord.objects.get(rechargeObjId=ObjectId(order.rechargeRcdId)) if not recharge_record.isAllocatedCardMoney or not refund_order: return proxy = DealerIncomeProxy.objects(ref_id=recharge_record.id).first() # type:DealerIncomeProxy if not proxy: return refund_order refundFee = refund_order.money # 更新经销商收益统计 refund_partion = proxy.update_for_refund(refund_fee=refundFee) # 更新经销商,组和设备汇总信息 if recharge_record.logicalCode: update_income_stats(proxy=proxy, refund_partition=refund_partion, refund_fee=refundFee, allowed={'dealer': True, 'group': True, 'device': False}) else: update_income_stats(proxy=proxy, refund_fee=refundFee, refund_partition=refund_partion) # 更新经销商收益和代理商收益以及汇总数据 for item in refund_partion: if item['amount'] > RMB(0): if item['role'] == PARTITION_ROLE.PARTNER or item['role'] == PARTITION_ROLE.OWNER: dealer = Dealer.objects(id=item['id']).first() dealer.decr_fund(DEALER_INCOME_TYPE.DEVICE_INCOME, recharge_record.withdrawSourceKey, item['amount']) else: from apps.web.agent.models import Agent, AgentIncomeReport agent = Agent.objects(id=item['id']).first() # type: Agent agent.decr_fund(AGENT_INCOME_TYPE.DEALER_DEVICE_FEE, recharge_record.withdrawSourceKey, item['amount']) AgentIncomeReport.get_collection().update( {'detail.recharge_record_id': recharge_record.id, 'agentId': item['id']}, {'$inc': {'amount': (-item['amount']).mongo_amount}}) order.attachParas["repaired"] = True order.save() def get_order_nos(dealerId): money = 0 orderNos = list() with open("c/changyuan_{}.csv".format(dealerId), "r") as f: content = csv.DictReader(f) for _ in content: orderNos.append(_["orderNo"]) money += float(_["money"]) dealer = Dealer.objects.get(id=dealerId) print dealer.total_balance print money print orderNos y = raw_input('continue') if y == "yes": for _orderNo in orderNos: e(_orderNo) def main(): agent = get_agent() agentIds = [str(_.id) for _ in agent] dealers = get_dealer(agentIds) orderNos = list() for _dealer in dealers: s = list() _consume = get_consume(_dealer) _orders = filter_record(_consume) for _order in _orders: a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_order.rechargeRcdId)).first() b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_order.rechargeRcdId)).first() c = RechargeRecord.objects.filter(id=_order.rechargeRcdId).first() s.append( { "dealerId": str(_dealer.id), "money": c.money, "orderNo": _order.orderNo, "rechargeId": str(c.id), "refundId": str(b.id), "incomeId": str(a.id), "rechargeTime": str(c.dateTimeAdded)[:19], "refundTime": str(b.datetimeAdded)[:19], "incomeTime": str(a.dateTimeAdded)[:19], } ) orderNos.append(_order.orderNo) if s: with open("c/changyuan_{}.csv".format(_dealer.id), "w") as f: w = csv.DictWriter(f, fieldnames=s[0].keys()) w.writeheader() w.writerows(s) if __name__ == '__main__': # o = raw_input("orderNo=") # e(o) # main() i = raw_input("dealerId = ") get_order_nos(i) # # 查询的开始时间比结束时间早2天 # st = datetime.datetime(2021, 6, 1) # # agents = Agent.objects.filter(managerId=managerId) # # m = defaultdict(float) # # for _agent in agents: # # dealers = Dealer.objects.filter(id=str("608ffabb003048c43bb8de55")) # for _dealer in dealers: # devNos = [_.devNo for _ in Device.objects.filter(ownerId=str(_dealer.id))] # # records = ConsumeRecord.objects.filter(devNo__in=devNos, isNormal=False, dateTimeAdded__gte=st) # for _record in records: # if not _record.rechargeRcdId: # continue # # a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_record.rechargeRcdId)).first() # b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_record.rechargeRcdId)).first() # if not a or not b: # continue # if a.totalAmount == b.money: # print _record.orderNo # m[str(_dealer.id)] += float(b.money.amount) # # s = list() # for _k, _v in m.items(): # _dealer = Dealer.objects.get(id=_k) # type: Dealer # # s.append( # { # "dealer": _k, # "money": _v, # "balance": _dealer.total_balance # } # ) # # print s # # import csv # # with open("changyuan.csv", "w") as f: # # w = csv.DictWriter(f, fieldnames=s[0].keys()) # # w.writeheader() # # w.writerows(s) #