card_base.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef _CARD_BASE_HPP_
  2. #define _CARD_BASE_HPP_
  3. #include <vector>
  4. #include <memory>
  5. #include <atomic>
  6. #include "point.h"
  7. #include "common.h"
  8. #define CARD_LOST_TIME_OUT (60*1000)
  9. struct task;
  10. template<typename T> struct zloop;
  11. struct select_tool;
  12. struct smooth_tool;
  13. struct monkey_person;
  14. struct card_message_handle;
  15. struct card_location_base;
  16. struct message_locinfo;
  17. struct loc_message;
  18. struct mine_tool;
  19. struct location_card;
  20. struct card_pos;
  21. struct area_hover;
  22. struct site_area_hover;
  23. struct site;
  24. struct area_tool;
  25. namespace YA{struct _CARD_POS_;}
  26. struct card:point
  27. {
  28. card(uint32_t id,uint16_t dis,uint64_t type,int32_t deptid,int32_t level_id,uint32_t cid)
  29. :m_type(type)
  30. ,m_time(0)
  31. ,m_id(id)
  32. ,m_cid(cid)
  33. ,m_deptid(deptid)
  34. ,m_level_id(level_id)
  35. ,m_stat(0)
  36. ,m_biz_stat(0)
  37. ,m_pwr_stat(0)
  38. ,m_display(dis)
  39. ,m_ct(0)
  40. ,m_acc(0)
  41. ,m_speed(0)
  42. {}
  43. uint64_t type_(){return m_type;}
  44. uint64_t time_(){return m_time;}
  45. uint64_t m_type; //类型
  46. uint64_t m_time; //时间戳 ms
  47. uint32_t m_id; //卡号
  48. uint32_t m_cid; //标识id 人staff_id 车 vehicle_id
  49. int32_t m_deptid; //部门编号
  50. int32_t m_level_id; //职务级别
  51. int m_stat; //运动静止状态
  52. int m_biz_stat;
  53. int m_pwr_stat; //电量状态
  54. uint16_t m_display; //1显示0不显示,往前端推送
  55. uint16_t m_ct; //ct
  56. ///人卡(加速度状态),其值就是0和1,掘进机和采煤机,其值就是0~255,车辆,其值就需要乘以0.01,用于表示加速度值
  57. double m_acc;
  58. double m_speed; //速度
  59. };
  60. struct card_location_base:card,std::enable_shared_from_this<card_location_base>
  61. {
  62. uint64_t m_timeval=0;
  63. uint16_t m_display_old{0}; //1显示0不显示,往前端推送
  64. void update_display(){m_display_old=m_display;}
  65. bool eq_display(){return m_display_old==m_display;}
  66. std::uint8_t m_event[CARD_EVENT_COUNT_MAX]{0};
  67. std::unique_ptr<select_tool> m_sel_tool;
  68. std::unique_ptr<smooth_tool> m_smo_tool;
  69. std::unique_ptr<card_message_handle> m_message_handle;
  70. std::unique_ptr<location_card> m_his_location_card;
  71. std::atomic<int> m_upmine_flag{0};
  72. time_t m_help_last_time=0;
  73. int m_help_bit=0;
  74. card_location_base()=default;
  75. card_location_base(const std::string&type,uint32_t id,uint16_t dis,int16_t t,int32_t,int32_t,uint32_t );
  76. void inc_upmine_flag(int flag){m_upmine_flag=flag;}
  77. int upmine_flag(){return m_upmine_flag.load();}
  78. virtual void do_business(const std::shared_ptr<site>&site,const point &pt,double acc)=0;
  79. virtual void on_timer()=0;
  80. virtual std::shared_ptr<mine_tool> get_mine_tool()=0;
  81. virtual void clear();
  82. virtual void reset(std::shared_ptr<monkey_person> mp){}
  83. virtual int get_vehicle_type_id(){return 0;}
  84. virtual void set_area_info(int mapid,double scale,int areaid,uint64_t t,int type)=0;
  85. virtual int get_area(){return -1;}
  86. virtual std::shared_ptr<area_tool> get_area_tool()=0;
  87. virtual int get_vehicle_category_id(){return -1;}
  88. virtual int get_workline(){return -1;}
  89. virtual void get_card(bool f)=0;
  90. virtual void site_hover(int sid){}
  91. virtual void handle_message(uint16_t ct,uint8_t& value){}
  92. void make_his_location(uint64_t t,const point & pt,bool bclose = false);
  93. void on_message(zloop<task*> * loop,message_locinfo&loc,bool is_history);
  94. void on_location(const std::vector<point>&vp,const std::vector<loc_message> &lm );
  95. void do_status(int st);
  96. void upt_card_pos(YA::_CARD_POS_&cp, point &pt);
  97. void del_card_pos();
  98. int get_stat();
  99. void put_three_rates(card_pos &);
  100. void set_event_flag(EVENT_TYPE et,std::uint8_t f=1){m_event[et]=f;}
  101. bool get_event_flag(EVENT_TYPE et){return m_event[et];}
  102. bool is_person() const;
  103. bool is_vehicle() const;
  104. void set_base_data(uint32_t cid,uint16_t type,uint32_t deptid,int32_t level_id);
  105. virtual ~card_location_base();
  106. static std::shared_ptr<card_location_base> make_person(const std::string&type,uint32_t cardid,uint16_t needdisplay,int16_t t,
  107. int32_t deptid,int32_t level_id,uint32_t cid,int wl,const std::string & sname,const std::string & dname,int worktype_id);
  108. static std::shared_ptr<card_location_base> make_car(const std::string&type,uint32_t cardid,uint16_t needdisplay,int16_t t,
  109. int32_t deptid, int32_t categoryid, int type_id,int32_t level_id,uint32_t cid);
  110. };
  111. #endif