where($condition)->order($order)->paginate(['list_rows' => $pagesize, 'query' => request()->param()], false); $this->page_info = $result; return $result->items(); } else { return Db::name('InstantMessage')->where($condition)->order($order)->select()->toArray(); } } /** * 取得服务机构通知信息 * @access public * @author csdeshang * @param array $condition 检索条件 * @param string $fields 字段 * @param string $order 排序 * @return array */ public function getInstantMessageInfo($condition = array(), $fields = '*') { return Db::name('InstantMessage')->where($condition)->field($fields)->order('instant_message_id desc')->find(); } /** * 添加服务机构通知信息 * @access public * @author csdeshang * @param array $data 参数数据 * @return type */ public function addInstantMessage($data) { switch ($data['instant_message_to_type']) { case 0: $member_model = model('member'); $member = $member_model->getMemberInfo(array('member_id' => $data['instant_message_to_id'], 'member_state' => 1)); if (!$member) { throw new \think\Exception(lang('user_not_exist'), 10006); } if ($data['instant_message_from_type'] == 0 && $member['member_id'] == $data['instant_message_from_id']) { throw new \think\Exception(lang('chat_self_error'), 10006); } $to_name = $member['member_name']; break; case 1: $store_model = model('store'); $store = $store_model->getStoreOnlineInfoByID($data['instant_message_to_id']); if (!$store) { throw new \think\Exception(lang('store_not_exist'), 10006); } if ($data['instant_message_from_type'] == 0 && $store['member_id'] == $data['instant_message_from_id']) { throw new \think\Exception(lang('chat_self_error'), 10006); } if ($data['instant_message_from_type'] == 1 && $store['store_id'] == $data['instant_message_from_id']) { throw new \think\Exception(lang('chat_self_error'), 10006); } $to_name = $store['store_name']; break; case 2: $live_apply_model = model('live_apply'); $live_apply = $live_apply_model->getLiveApplyInfo(array(array('live_apply_id', '=', $data['instant_message_to_id']), array('live_apply_state', '=', 1), array('live_apply_end_time', '>', TIMESTAMP))); if (!$live_apply) { throw new \think\Exception(lang('live_not_exit'), 10006); } $to_name = $live_apply['live_apply_id'] . lang('live_room'); break; default: throw new \think\Exception(lang('param_error'), 10006); } $data['instant_message_to_name'] = $to_name; switch ($data['instant_message_type']) { case 1: $goods_id = $data['instant_message']; if (!$goods_id) { throw new \think\Exception(lang('param_error'), 10006); } $goods_model = model('goods'); $goods = $goods_model->getGoodsInfoByID($goods_id); if (is_array($goods) && !empty($goods)) { $data['instant_message'] = json_encode(array( 'goods_id' => $goods['goods_id'], 'goods_name' => $goods['goods_name'], 'goods_price' => $goods['goods_price'], 'goods_image' => $goods['goods_image'], )); } else { throw new \think\Exception(lang('goods_not_exit'), 10006); } break; } $instant_message_id = Db::name('InstantMessage')->insertGetId($data); if (!$instant_message_id) { throw new \think\Exception(lang('send_fail'), 10006); } $data['instant_message_id'] = $instant_message_id; $data = $this->formatInstantMessage($data); return $data; } public function formatInstantMessage($data) { if ($data['instant_message_type'] == 1) { $data['instant_message'] = json_decode($data['instant_message'], true); $data['instant_message']['goods_image_url'] = goods_cthumb($data['instant_message']['goods_image']); } $member_model = model('member'); $store_model = model('store'); if ($data['instant_message_to_type'] == 0) { $member = $member_model->getMemberInfo(array('member_id' => $data['instant_message_to_id'], 'member_state' => 1)); $data['instant_message_to_avatar'] = get_member_avatar($member ? $member['member_avatar'] : ''); $data['instant_message_to_info'] = $member; } elseif ($data['instant_message_to_type'] == 1) { $store = $store_model->getStoreOnlineInfoByID($data['instant_message_to_id']); $data['instant_message_to_avatar'] = get_store_logo($store ? $store['store_avatar'] : ''); $data['instant_message_to_info'] = $store; } if ($data['instant_message_from_type'] == 0) { $member = $member_model->getMemberInfo(array('member_id' => $data['instant_message_from_id'], 'member_state' => 1)); $data['instant_message_from_avatar'] = get_member_avatar($member ? $member['member_avatar'] : ''); $data['instant_message_from_info'] = $member; } elseif ($data['instant_message_from_type'] == 1) { $store = $store_model->getStoreOnlineInfoByID($data['instant_message_from_id']); $data['instant_message_from_avatar'] = get_store_logo($store ? $store['store_avatar'] : ''); $data['instant_message_from_info'] = $store; } return $data; } /** * 编辑服务机构通知信息 * @access public * @author csdeshang * @param array $data 更新数据 * @param array $condition 条件 * @return bool */ public function editInstantMessage($data, $condition = array()) { return Db::name('InstantMessage')->where($condition)->update($data); } /** * 获取服务机构通知数量 * @access public * @author csdeshang * @param array $condition 条件 * @return bool */ public function getInstantMessageCount($condition = array()) { return Db::name('InstantMessage')->where($condition)->count(); } public function sendInstantMessage($instant_message, $auto = false) { if (!config('ds_config.instant_message_register_url')) { return ds_callback(false, '未设置直播聊天gateway地址'); } // 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0) try { Gateway::$registerAddress = config('ds_config.instant_message_register_url'); if ($instant_message['instant_message_to_type'] == 2) { Gateway::sendToGroup('live_apply_' . $instant_message['instant_message_to_id'], json_encode($instant_message)); } elseif ($instant_message['instant_message_to_type'] == 0) { Gateway::sendToUid('0:' . $instant_message['instant_message_to_id'], json_encode($instant_message)); } } catch (\Exception $e) { return ds_callback(false, $e->getMessage()); } return ds_callback(true); } }