dianchuan_refund.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # coding=utf-8
  2. import csv
  3. from base import init_env
  4. init_env(interactive = True)
  5. from apps.web.device.models import Device
  6. from apps.web.user.models import ConsumeRecord, MyUser
  7. from apps.web.dealer.models import Dealer
  8. from apilib.monetary import VirtualCoin
  9. def get_device():
  10. code = "1002101"
  11. agentId = "5b1dfe024864d01678b57990"
  12. dealerIds = [str(dealer.id) for dealer in Dealer.objects.filter(agentId=agentId)]
  13. devNos = list()
  14. for dev in Device.objects.filter(ownerId__in=dealerIds):
  15. if dev.devType.get("code") == code:
  16. devNos.append(dev.devNo)
  17. return devNos
  18. def get_record():
  19. devNos = get_device()
  20. records = ConsumeRecord.objects.filter(devNo__in=devNos)
  21. info = list()
  22. for record in records:
  23. if not record.servicedInfo:
  24. continue
  25. refundCoins = record.servicedInfo.get("refundedMoney")
  26. if not refundCoins:
  27. continue
  28. if float(refundCoins) > float(record.coin):
  29. user = MyUser.objects.filter(openId=record.openId, groupId=record.groupId).first()
  30. nickname = user.nickname
  31. via = u"微信" if user.gateway == "wechat" else u"支付宝"
  32. info.append({
  33. "id": str(record.id),
  34. "refund": refundCoins,
  35. "pay": record.coin,
  36. "openId": record.openId,
  37. "groupId": record.groupId,
  38. "time": str(record.finishedTime)[:19],
  39. "nickname": nickname,
  40. "via": via,
  41. "devNo": record.devNo
  42. })
  43. return info
  44. def main():
  45. info = get_record()
  46. with open("refund.csv", "w") as f:
  47. fieldnames = ['id', 'refund', "pay", "openId", "groupId", "time", "nickname", "via", "devNo"]
  48. w = csv.DictWriter(f, fieldnames=fieldnames)
  49. w.writerows(info)
  50. def charge_user_coin():
  51. info = get_record()
  52. for item in info:
  53. openId = item.get("openId")
  54. refund = item.get("refund")
  55. groupId = item.get("groupId")
  56. user = MyUser.objects.filter(openId=openId, groupId=groupId).first()
  57. print u"目前用户余额 {}, 需要扣除 {}".format(user.balance, refund)
  58. s = raw_input("是否继续y/n")
  59. if s == "y":
  60. if VirtualCoin(user.balance) > VirtualCoin(refund):
  61. user.pay(VirtualCoin(refund))
  62. else:
  63. user.pay(VirtualCoin(user.balance))
  64. def get_dev_logicalCode():
  65. devNos = get_device()
  66. logicalCodes = list()
  67. for devNo in devNos:
  68. dev = Device.get_dev(devNo)
  69. logicalCodes.append(dev.logicalCode)
  70. with open("refund_dev.txt", "w") as f:
  71. logicalStr = "\n".join(list(set(logicalCodes)))
  72. f.write(logicalStr)
  73. if __name__ == '__main__':
  74. get_dev_logicalCode()