123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # coding=utf-8
- import csv
- import datetime
- from tqdm import tqdm
- from base import init_env
- init_env(False)
- from apps.web.device.models import Device, DeviceDict, Group
- from apilib.monetary import VirtualCoin
- from apps.web.user.models import MyUser
- # class CoinError(Exception):
- # pass
- #
- #
- # notEqualDevs = list()
- # notWashDevs = list()
- #
- # for _dev in Device.objects.only("washConfig", "id", "ownerId", "devNo"):
- # if not _dev.ownerId:
- # continue
- # washConfig = _dev.washConfig
- # try:
- # for _wash in washConfig.values():
- # if _wash["price"] != _wash["coins"]:
- # raise CoinError()
- # except CoinError:
- # notEqualDevs.append(_dev.devNo)
- # except Exception as e:
- # notWashDevs.append(_dev.devNo)
- #
- # notEqualMap = list()
- # notWashMap = list()
- # for _devNo in notEqualDevs:
- # print _devNo
- # dealer = Dealer.get_dealer(Device.get_dev(_devNo).ownerId)
- # if not dealer:
- # continue
- # notEqualMap.append({"devNo": _devNo, "dealer": "{}-{}".format(dealer.get("id"), dealer.get("username"))})
- #
- #
- # for _devNo in notWashDevs:
- # dealer = Dealer.get_dealer(Device.get_dev(_devNo).ownerId)
- # if not dealer:
- # continue
- # notWashMap.append({"devNo": _devNo, "dealer": "{}-{}".format(dealer.get("id"), dealer.get("username"))})
- #
- # headers = ["devNo", "dealer"]
- # with open("notEqual.csv", "w") as f:
- # w = csv.DictWriter(f, fieldnames=headers)
- # w.writeheader()
- # w.writerows(notEqualMap)
- #
- # with open("notWash.csv", "w") as f:
- # w = csv.DictWriter(f, fieldnames=headers)
- # w.writeheader()
- # w.writerows(notWashMap)
- from collections import namedtuple
- DealerInfo = namedtuple("DealerInfo", ["id", "devCount", "offlineDevCount", "userCount", "coinCount"])
- def read_csv():
- with open("notEqual.csv", "r") as f:
- csvReader = csv.DictReader(f)
- data = [row.get("dealer").split("-")[0] for row in csvReader]
- return set(data)
- def get_dev_count(dealerInfo): # type: (DealerInfo) -> int
- dealerId = dealerInfo.id
- devCount = Device.objects.filter(ownerId=dealerId).count()
- return devCount
- def get_offline_dev_count(dealerInfo): # type: (DealerInfo) -> int
- dealerId = dealerInfo.id
- groupIds = Group.get_group_ids_of_dealer(dealerId)
- devNos = Device.get_devNos_by_group(groupIds)
- count = 0
- for _devNo in devNos:
- dev = Device.get_dev(_devNo) # type: DeviceDict
- if not dev.online and datetime.datetime.fromtimestamp(int(str(Device.get_dev("867435053358115").offTime)[0:10])) < datetime.datetime(2021, 2, 1):
- count += 1
- return count
- def get_user_count(dealerInfo): # type:(DealerInfo) -> int
- dealerId = dealerInfo.id
- groupIds = Group.get_group_ids_of_dealer(dealerId)
- return MyUser.objects.filter(groupId__in=groupIds).count()
- def get_user_coin_count(dealerInfo):
- dealerId = dealerInfo.id
- groupIds = Group.get_group_ids_of_dealer(dealerId)
- users = MyUser.objects.filter(groupId__in=groupIds).only("balance", "groupId")
- return sum((_user.balance for _user in users), VirtualCoin(0))
- def main():
- dealerIds = read_csv()
- resultList = list()
- for _id in tqdm(dealerIds):
- dealerInfo = DealerInfo(id=_id, devCount=-1, offlineDevCount=-1, userCount=-1, coinCount=-1)
- devCount = get_dev_count(dealerInfo)
- offDevCount = get_offline_dev_count(dealerInfo)
- userCount = get_user_count(dealerInfo)
- coinCount = get_user_coin_count(dealerInfo)
- dealerInfo = dealerInfo._replace(devCount=devCount, offlineDevCount=offDevCount, userCount=userCount, coinCount=coinCount)
- resultList.append(dealerInfo._asdict())
- with open("notEqualDealer.csv", "w") as f:
- w = csv.DictWriter(f, fieldnames=resultList[0].keys())
- w.writeheader()
- w.writerows(resultList)
- if __name__ == '__main__':
- main()
|