RemindController.class.php 2.72 KB
<?php
/**
 * 定时提醒定时回调
 */

namespace Frontend\Controller\Callback;

use Common\Common\Msg;
use Common\Service\AnswerService;
use Common\Service\BaseinfoService;
use Common\Service\RecordService;
use Common\Service\RightService;
use Common\Service\ViewrangeService;
use VcySDK\Message;
use VcySDK\Service;

class RemindController extends AbstractController
{
    /**
     * @var RecordService 调研回答信息表
     */
    protected $_record_s;

    /**
     * @var RightService 调研权限信息表
     */
    protected $_view_s;

    /**
     * @var  BaseinfoService 调研基本信息
     */
    protected $_baseinfo_s;

    /**
     * @var  AnswerService  用户回复信息表
     */
    protected $_answer_s;

    public function before_action($action = '')
    {
        if (!parent::before_action($action)) {
            return false;
        }

        // 实例化活动表
        $this->_baseinfo_s = new BaseinfoService();
        $this->_answer_s = new AnswerService();
        $this->_record_s = new RecordService();
        $this->_view_s = new RightService();

        return true;
    }

    public function Index()
    {

        // 获取需要发送的活动id
        $back = $this->callBackData;
        $qu_id = $back['qu_id'];
        // 非空判断
        if (empty($qu_id)) {

            return true;
        }

        // 获取调研基本详情
        $data = $this->_baseinfo_s->get($qu_id);
        if (empty($data)) {

            return true;
        }

        // 获取应参与人的列表
        $all_users = $this->_view_s->list_user($qu_id, $data['is_all']);
        // 查询已经参与问卷的用户记录信息
        $answer_list = $this->_answer_s->list_by_conds(['qu_id' => $qu_id]);
        // 已参与人 uid集合
        $join_users = array_unique(array_filter(array_column($answer_list, 'uid')));

        // 未参与人uid集合
        $no_join_users = array_diff($all_users, $join_users);
        sort($no_join_users);

        // 无需发送消息的情况
        if (empty($no_join_users)) {

            return true;
        }


        $toUser = implode('|', $no_join_users);
        $articles =  [
            [
                'title' => '【培训调研】' . $data['title'],
                'description' => '该调研将于' . $data['remind'] . '分钟后截止,请尽快填写完毕',
                'url' => oaUrl('Frontend/Index/QuestionnaireView/Index', ['qu_id' => $qu_id]),
                'picUrl' => ''
            ]
        ];

        // 发送消息
        $msg = new Msg();
        $msg->sendNews($toUser, '', '', $articles, $safe = 0);

        return true;
    }
}