MerchantWriter.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # from . import DataHandler #此时是导入文件
  2. from .DataStream import DataWriteStream, MchPosmap, day_stamp
  3. import numpy as np
  4. __all__ = ['MerchantWriter']
  5. class MerchantWriter(DataWriteStream, MchPosmap):
  6. def write(self, method, params):
  7. if method == 'refill_submit':
  8. self._onSubmit(params)
  9. elif method == 'refill_succ':
  10. self._onSucc(params)
  11. elif method == 'refill_fail':
  12. self._onFail(params)
  13. else:
  14. pass
  15. def _onSubmit(self, params):
  16. def parse(input):
  17. return params['mchid'], params['time'], params['spec'], params['card_type'], params['mch_amount']
  18. mchid, time, spec, card_type, mch_amount = parse(params)
  19. path, pos = self.path_pos(mchid, time, spec, card_type)
  20. self.file[path][self._pos_map['submit_count'], pos] += 1
  21. self.file[path][self._pos_map['submit_amounts'], pos] += mch_amount
  22. pass
  23. def _onSucc(self, params):
  24. def parse(input):
  25. return params['mchid'], params['time'], params['spec'], params['card_type'], params['mch_amount'], params['channel_amount']
  26. mchid, time, spec, card_type, mch_amount, channel_amount = parse(params)
  27. path, pos = self.path_pos(mchid, time, spec, card_type)
  28. self.file[path][self._pos_map['succ_count'], pos] += 1
  29. self.file[path][self._pos_map['succ_mch_amounts'], pos] += mch_amount
  30. self.file[path][self._pos_map['succ_ch_amounts'], pos] += channel_amount
  31. pass
  32. def _onFail(self, params):
  33. def parse(input):
  34. return params['mchid'], params['time'], params['spec'], params['card_type'], params['mch_amount']
  35. mchid, time, spec, card_type, mch_amount = parse(params)
  36. path, pos = self.path_pos(mchid, time, spec, card_type)
  37. self.file[path][self._pos_map['fail_count'], pos] += 1
  38. self.file[path][self._pos_map['fail_mch_amounts'], pos] += mch_amount
  39. pass
  40. def path_pos(self, mchid, time, spec, card_type):
  41. today = day_stamp(time)
  42. path = f'/{self._version}/{today}/{mchid}/{card_type}/{spec}'
  43. hfive = self.file
  44. if path not in hfive:
  45. dim = len(self._pos_map)
  46. hfive[path] = np.zeros((dim, 86400))
  47. return path, time - today