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