area_business_card_enter_or_leave.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "area_business_card_enter_or_leave.h"
  2. #include "area.h"
  3. #include "card_base.h"
  4. #include"common_tool.h"
  5. #include"tool_time.h"
  6. #include"db/db_tool.h"
  7. #include"log.h"
  8. struct enter_or_leave_data:business_data
  9. {
  10. enter_or_leave_data()
  11. {
  12. m_enter_time_ms = tool_time::to_ms(std::chrono::system_clock::now());
  13. }
  14. ///考勤开始时间
  15. uint64_t m_enter_time_ms;
  16. };
  17. //进入区域则入库操作
  18. void area_business_card_enter_or_leave::on_enter(const std::shared_ptr<area_hover>&area_hover_ptr,
  19. const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data>&ptr)
  20. {
  21. auto ptr_temp = std::make_shared<enter_or_leave_data>();
  22. ptr = ptr_temp;
  23. save_his_area_location_enter(area_hover_ptr, card_ptr, ptr_temp->m_enter_time_ms);
  24. }
  25. void area_business_card_enter_or_leave::on_hover(const std::shared_ptr<area_hover>&a,
  26. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  27. {
  28. }
  29. //出区域则入库
  30. void area_business_card_enter_or_leave::on_leave(const std::shared_ptr<area_hover>&area_hover_ptr,
  31. const std::shared_ptr<card_location_base>&card_ptr,std::shared_ptr<business_data> ptr)
  32. {
  33. if(nullptr == ptr)
  34. {
  35. log_error("出区域失败:nullptr == ptr");
  36. return;
  37. }
  38. auto ptr_temp = static_cast<enter_or_leave_data*>(ptr.get());
  39. save_his_area_location_leave(area_hover_ptr, card_ptr, ptr_temp->m_enter_time_ms);
  40. }
  41. ///入库
  42. void area_business_card_enter_or_leave::save_his_area_location_enter(const std::shared_ptr<area_hover>&area_hover_ptr,
  43. const std::shared_ptr<card_location_base>&card_ptr,
  44. uint64_t start_time_ms)
  45. {
  46. char sql[LENGTH_SQL] = {0};
  47. std::string call(card_ptr->is_vehicle()?"add_area_vehicle":"add_area_staff");
  48. #if 0
  49. std::string call("add_area_staff");
  50. if(card_ptr->is_vehicle())//车卡
  51. {
  52. call="add_area_vehicle";
  53. }
  54. #endif
  55. std::string start_str = tool_time::to_str_ex(start_time_ms);
  56. sprintf(sql, "CALL %s(%s, %d, %d, %d, '%s','%s');", call.c_str(),
  57. tool_other::type_id_to_str(card_ptr->m_type, card_ptr->m_id).c_str(),
  58. card_ptr->m_id, area_hover_ptr->id(), area_hover_ptr->mapid(), start_str.c_str(), start_str.c_str());
  59. db_tool::PushAsync(sql);
  60. }
  61. ///入库
  62. void area_business_card_enter_or_leave::save_his_area_location_leave(const std::shared_ptr<area_hover>&area_hover_ptr,
  63. const std::shared_ptr<card_location_base>&card_ptr,
  64. uint64_t start_time_ms)
  65. {
  66. char sql[LENGTH_SQL] = {0};
  67. std::string call(card_ptr->is_vehicle()?"add_area_vehicle":"add_area_staff");
  68. #if 0
  69. std::string call("add_area_staff");
  70. if(card_ptr->is_vehicle())//车卡
  71. {
  72. call="add_area_vehicle";
  73. }
  74. #endif
  75. std::string start_str = tool_time::to_str_ex(start_time_ms);
  76. std::string end_str = tool_time::to_str_ex(tool_time::now_to_ms());
  77. sprintf(sql, "CALL %s(%s, %d, %d, %d, '%s','%s');", call.c_str(),
  78. tool_other::type_id_to_str(card_ptr->m_type, card_ptr->m_id).c_str(),
  79. card_ptr->m_id, area_hover_ptr->id(), area_hover_ptr->mapid(), start_str.c_str(), end_str.c_str());
  80. db_tool::PushAsync(sql);
  81. }