MpEventMsgLogModel.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * MpEventMsgLogModel.php UTF-8
  4. * 事件消息
  5. *
  6. * @date : 2018/9/26 16:16
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HuoMp 1.0
  11. */
  12. namespace huoMpMsg\model;
  13. use huo\model\log\LogModel;
  14. class MpEventMsgLogModel extends LogModel {
  15. /* 数据库名 */
  16. protected $table = 'mp_log_mp_event_msg';
  17. /**
  18. * 插入数据
  19. *
  20. * @param $data
  21. * @param bool $replace
  22. * @param bool $get_last_insert_id
  23. *
  24. * @return bool|int|string
  25. */
  26. public function insertLog($data, $replace = false, $get_last_insert_id = true) {
  27. $_data['mp_id'] = get_val($data, 'mp_id', '');
  28. $_data['source_id'] = get_val($data, 'source_id', '');
  29. $_data['open_id'] = get_val($data, 'open_id', '');
  30. $_data['msg_type'] = get_val($data, 'msg_type', 'event');
  31. $_data['event'] = get_val($data, 'event', '');
  32. $_data['event_key'] = get_val($data, 'event_key', '');
  33. $_data['ticket'] = get_val($data, 'ticket', '');
  34. $_data['latitude'] = get_val($data, 'latitude', '');
  35. $_data['longitude'] = get_val($data, 'longitude', '');
  36. $_data['precision'] = get_val($data, 'precision', '');
  37. $_data['wx_create_time'] = get_val($data, 'wx_create_time', 0);
  38. $_data['create_time'] = time();
  39. $_data['date'] = date('Y-m-d', $_data['create_time']);
  40. return parent::insertLog($_data, $replace, $get_last_insert_id);
  41. }
  42. /**
  43. * @return bool|int
  44. * @throws \think\db\exception\BindParamException
  45. * @throws \think\exception\PDOException
  46. */
  47. function checkTable() {
  48. $this->table = $this->getPartitionTableName(
  49. $this->partition_data, $this->partition_field, $this->partition_rule
  50. );
  51. $_sql = "CREATE TABLE IF NOT EXISTS `".$this->table."` (";
  52. $_sql .= " `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',";
  53. $_sql .= " `date` date NOT NULL COMMENT '日期',";
  54. $_sql .= " `mp_id` varchar(32) NOT NULL DEFAULT '' COMMENT '小程序、公众号appid 支付商户号',";
  55. $_sql .= " `source_id` varchar(64) NOT NULL DEFAULT '0' COMMENT 'ToUserName 小程序的原始ID',";
  56. $_sql .= " `open_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'FromUserName 发送者的openid',";
  57. $_sql .= " `msg_type` varchar(16) NOT NULL DEFAULT 'text' COMMENT 'MsgType 消息类型',";
  58. $_sql .= " `event` varchar(64) NOT NULL DEFAULT 'text' COMMENT 'MsgType 事件类型',";
  59. $_sql .= " `event_key` varchar(255) NOT NULL DEFAULT '' COMMENT '事件KEY值',";
  60. $_sql .= " `ticket` varchar(64) NOT NULL DEFAULT '' COMMENT '二维码的ticket',";
  61. $_sql .= " `latitude` varchar(64) NOT NULL DEFAULT '' COMMENT '地理位置纬度',";
  62. $_sql .= " `longitude` varchar(64) NOT NULL DEFAULT '' COMMENT '地理位置经度',";
  63. $_sql .= " `precision` varchar(64) NOT NULL DEFAULT '' COMMENT '地理位置精度',";
  64. $_sql .= " `wx_create_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'CreateTime 消息创建时间(整型)',";
  65. $_sql .= " `create_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',";
  66. $_sql .= " PRIMARY KEY (`id`),";
  67. $_sql .= " KEY `lmem_event_index` (`event`),";
  68. $_sql .= " UNIQUE KEY `lmem_time_index` (`open_id`,`wx_create_time`)";
  69. $_sql .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信事件消息';";
  70. return $this->execute($_sql);
  71. }
  72. /**
  73. * 是否存在此消息
  74. *
  75. * @param $open_id
  76. * @param string $wx_create_time
  77. * @param string $date 日期
  78. *
  79. * @return int
  80. */
  81. public function hasMsg($open_id, $wx_create_time = '', $date = '') {
  82. if (empty($open_id) || empty($wx_create_time)) {
  83. return 0;
  84. }
  85. $_date = $date;
  86. if (empty($date)) {
  87. $_date = date('Y-m-d');
  88. }
  89. $_map['open_id'] = $open_id;
  90. $_map['wx_create_time'] = $wx_create_time;
  91. $_cnt = $this->computeTable($_date)->where($_map)->count();
  92. if ($_cnt > 0) {
  93. return $_cnt;
  94. }
  95. return 0;
  96. }
  97. }