changyuan_error.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. # coding=utf-8
  2. from base import init_env
  3. init_env(True)
  4. from apps.web.device.models import Device
  5. from apps.web.user.models import ConsumeRecord, RechargeRecord, RefundMoneyRecord
  6. from apps.web.dealer.proxy import DealerIncomeProxy
  7. import datetime
  8. from apps.web.agent.models import Agent
  9. from apps.web.dealer.models import Dealer
  10. from bson import ObjectId
  11. import csv
  12. from apilib.monetary import RMB
  13. from apps.web.agent.define import AGENT_INCOME_TYPE
  14. from apps.web.constant import PARTITION_ROLE
  15. from apps.web.dealer.define import DEALER_INCOME_TYPE
  16. from apps.web.report.utils import update_income_stats
  17. def get_agent():
  18. managerId = "5d857a130030483f797808b4"
  19. return Agent.objects.filter(managerId=managerId)
  20. def get_dealer(agentIds):
  21. return Dealer.objects.filter(agentId__in=agentIds)
  22. def get_consume(dealer):
  23. devNos = [_.devNo for _ in Device.objects.filter(ownerId=str(dealer.id))]
  24. records = ConsumeRecord.objects.filter(devNo__in=devNos, isNormal=False, dateTimeAdded__gte=datetime.datetime(2021, 6, 1))
  25. return records
  26. def filter_record(records):
  27. new_records = list()
  28. for _record in records:
  29. if not _record.rechargeRcdId:
  30. continue
  31. a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_record.rechargeRcdId)).first()
  32. b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_record.rechargeRcdId)).first()
  33. c = RechargeRecord.objects.filter(id=_record.rechargeRcdId).first()
  34. # 没有分账记录的 或者没有退款记录的
  35. if not a or not b:
  36. continue
  37. # 退款了并且还有分账的并且都成功的
  38. if a.totalAmount == b.money == c.money and b.status == "success":
  39. new_records.append(_record)
  40. return new_records
  41. def e(orderNo):
  42. order = ConsumeRecord.objects.get(orderNo=orderNo) # type: ConsumeRecord
  43. if order.attachParas.get("repaired"):
  44. return
  45. recharge_record = RechargeRecord.objects.get(id=order.rechargeRcdId)
  46. refund_order = RefundMoneyRecord.objects.get(rechargeObjId=ObjectId(order.rechargeRcdId))
  47. if not recharge_record.isAllocatedCardMoney or not refund_order:
  48. return
  49. proxy = DealerIncomeProxy.objects(ref_id=recharge_record.id).first() # type:DealerIncomeProxy
  50. if not proxy:
  51. return refund_order
  52. refundFee = refund_order.money
  53. # 更新经销商收益统计
  54. refund_partion = proxy.update_for_refund(refund_fee=refundFee)
  55. # 更新经销商,组和设备汇总信息
  56. if recharge_record.logicalCode:
  57. update_income_stats(proxy=proxy,
  58. refund_partition=refund_partion,
  59. refund_fee=refundFee,
  60. allowed={'dealer': True, 'group': True, 'device': False})
  61. else:
  62. update_income_stats(proxy=proxy, refund_fee=refundFee, refund_partition=refund_partion)
  63. # 更新经销商收益和代理商收益以及汇总数据
  64. for item in refund_partion:
  65. if item['amount'] > RMB(0):
  66. if item['role'] == PARTITION_ROLE.PARTNER or item['role'] == PARTITION_ROLE.OWNER:
  67. dealer = Dealer.objects(id=item['id']).first()
  68. dealer.decr_fund(DEALER_INCOME_TYPE.DEVICE_INCOME, recharge_record.withdrawSourceKey,
  69. item['amount'])
  70. else:
  71. from apps.web.agent.models import Agent, AgentIncomeReport
  72. agent = Agent.objects(id=item['id']).first() # type: Agent
  73. agent.decr_fund(AGENT_INCOME_TYPE.DEALER_DEVICE_FEE, recharge_record.withdrawSourceKey,
  74. item['amount'])
  75. AgentIncomeReport.get_collection().update(
  76. {'detail.recharge_record_id': recharge_record.id, 'agentId': item['id']},
  77. {'$inc': {'amount': (-item['amount']).mongo_amount}})
  78. order.attachParas["repaired"] = True
  79. order.save()
  80. def get_order_nos(dealerId):
  81. money = 0
  82. orderNos = list()
  83. with open("c/changyuan_{}.csv".format(dealerId), "r") as f:
  84. content = csv.DictReader(f)
  85. for _ in content:
  86. orderNos.append(_["orderNo"])
  87. money += float(_["money"])
  88. dealer = Dealer.objects.get(id=dealerId)
  89. print dealer.total_balance
  90. print money
  91. print orderNos
  92. y = raw_input('continue')
  93. if y == "yes":
  94. for _orderNo in orderNos:
  95. e(_orderNo)
  96. def main():
  97. agent = get_agent()
  98. agentIds = [str(_.id) for _ in agent]
  99. dealers = get_dealer(agentIds)
  100. orderNos = list()
  101. for _dealer in dealers:
  102. s = list()
  103. _consume = get_consume(_dealer)
  104. _orders = filter_record(_consume)
  105. for _order in _orders:
  106. a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_order.rechargeRcdId)).first()
  107. b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_order.rechargeRcdId)).first()
  108. c = RechargeRecord.objects.filter(id=_order.rechargeRcdId).first()
  109. s.append(
  110. {
  111. "dealerId": str(_dealer.id),
  112. "money": c.money,
  113. "orderNo": _order.orderNo,
  114. "rechargeId": str(c.id),
  115. "refundId": str(b.id),
  116. "incomeId": str(a.id),
  117. "rechargeTime": str(c.dateTimeAdded)[:19],
  118. "refundTime": str(b.datetimeAdded)[:19],
  119. "incomeTime": str(a.dateTimeAdded)[:19],
  120. }
  121. )
  122. orderNos.append(_order.orderNo)
  123. if s:
  124. with open("c/changyuan_{}.csv".format(_dealer.id), "w") as f:
  125. w = csv.DictWriter(f, fieldnames=s[0].keys())
  126. w.writeheader()
  127. w.writerows(s)
  128. if __name__ == '__main__':
  129. # o = raw_input("orderNo=")
  130. # e(o)
  131. # main()
  132. i = raw_input("dealerId = ")
  133. get_order_nos(i)
  134. # # 查询的开始时间比结束时间早2天
  135. # st = datetime.datetime(2021, 6, 1)
  136. #
  137. # agents = Agent.objects.filter(managerId=managerId)
  138. #
  139. # m = defaultdict(float)
  140. #
  141. # for _agent in agents:
  142. #
  143. # dealers = Dealer.objects.filter(id=str("608ffabb003048c43bb8de55"))
  144. # for _dealer in dealers:
  145. # devNos = [_.devNo for _ in Device.objects.filter(ownerId=str(_dealer.id))]
  146. #
  147. # records = ConsumeRecord.objects.filter(devNo__in=devNos, isNormal=False, dateTimeAdded__gte=st)
  148. # for _record in records:
  149. # if not _record.rechargeRcdId:
  150. # continue
  151. #
  152. # a = DealerIncomeProxy.objects.filter(ref_id=ObjectId(_record.rechargeRcdId)).first()
  153. # b = RefundMoneyRecord.objects.filter(rechargeObjId=ObjectId(_record.rechargeRcdId)).first()
  154. # if not a or not b:
  155. # continue
  156. # if a.totalAmount == b.money:
  157. # print _record.orderNo
  158. # m[str(_dealer.id)] += float(b.money.amount)
  159. #
  160. # s = list()
  161. # for _k, _v in m.items():
  162. # _dealer = Dealer.objects.get(id=_k) # type: Dealer
  163. #
  164. # s.append(
  165. # {
  166. # "dealer": _k,
  167. # "money": _v,
  168. # "balance": _dealer.total_balance
  169. # }
  170. # )
  171. #
  172. # print s
  173. # # import csv
  174. # # with open("changyuan.csv", "w") as f:
  175. # # w = csv.DictWriter(f, fieldnames=s[0].keys())
  176. # # w.writeheader()
  177. # # w.writerows(s)
  178. #