EventUrgeTask.java 6.48 KB
package com.xiniunet.service.railway.util.thread;

import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.fastjson.JSON;
import com.xiniunet.basic.enumeration.SmsTemplateProviderEnum;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.railway.domain.EventExtend;
import com.xiniunet.railway.request.EventExtendGetRequest;
import com.xiniunet.railway.request.EventExtendUpdateRequest;
import com.xiniunet.service.railway.biz.EventExtendManager;
import com.xiniunet.service.railway.dal.NoticePersonMapper;
import com.xiniunet.service.railway.po.EventPO;
import com.xiniunet.service.railway.po.NoticePersonPO;
import com.xiniunet.service.railway.util.SendSmsUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

import static com.xiniunet.service.railway.Constant.RAILWAY_TENANT_ID;

/**
 * @author xiang
 */
public class EventUrgeTask implements Runnable {

    private final Logger log = LoggerFactory.getLogger(EventUrgeTask.class);

    private final NoticePersonMapper noticePersonMapper;

    private final EventExtendManager eventExtendManager;

    /**事件id*/
    private final EventPO event;

    private final Passport passport;

    private final int timeoutMinutes;

    public EventUrgeTask(EventPO event,
                         NoticePersonMapper noticePersonMapper,
                         EventExtendManager eventExtendManager,
                         int timeoutMinutes,
                         Passport passport) {
        this.event = event;
        this.eventExtendManager = eventExtendManager;
        this.noticePersonMapper = noticePersonMapper;
        this.timeoutMinutes = timeoutMinutes;
        this.passport = passport;

    }

    @Override
    public void run() {
        log.warn("======event_quartz_async---");
        try {
            if (event == null) {
                log.error("事件为空:event=null");
                return;
            }

            log.warn("======event_quartz_async---{}", event.getId());
            String description = event.getDescription();
            Map<String, String> params = new HashMap<>(7);
            params.put("station_name", event.getStation());
            params.put("event_time", event.getHappenTime());
            params.put("event_number", event.getAppEventId() != null ? event.getAppEventId() : "");
            params.put("event_titile", event.getTitle());
            params.put("line_carriage", (event.getLineName() + event.getCarriageNumber()).replaceAll("null", ""));
            params.put("event_description", description == null ? "" : description.length() > 20 ? description.substring(0, 20) + "... " : description);
            params.put("timeout_minutes", timeoutMinutes + "");

            List<SmsSendRequest> smsList = new ArrayList<>();
            String function = "";
            if (!StringUtils.isBlank(event.getStationId()) && !StringUtils.isBlank(event.getLineId())) {
                log.warn("======event_quartz_async_by_station---{}", event.getId());
                function = "shmetro.station.event.hotline.deal";
                // 按车站发消息
                List<NoticePersonPO> persons = noticePersonMapper.queryPersonByStation("line", event.getLineId(), "station", event.getStationId());
                for (NoticePersonPO person : persons) {
                    smsList.add(getSmsSendRequest(person, JSON.toJSONString(params), "shmetro.station.event.urge.deal"));
                }
            } else if (StringUtils.isBlank(event.getStationId()) && !StringUtils.isBlank(event.getLineId())) {
                log.warn("======event_quartz_async_by_line---{}", event.getId());
                function = "shmetro.carriage.event.hotline.deal";
                // 按线路发消息
                List<NoticePersonPO> persons = noticePersonMapper.queryPersonByLine("line", event.getLineId());
                for (NoticePersonPO person : persons) {
                    smsList.add(getSmsSendRequest(person, JSON.toJSONString(params), "shmetro.carriage.event.urge.deal"));
                }
            }

            // 查询热线人员
            List<NoticePersonPO> hotlinePersons = noticePersonMapper.queryPersonByHotline();
            log.warn("======event_quartz_async_by_hotline---{}---热线人员个数:{}", event.getId(), hotlinePersons != null ? hotlinePersons.size() : 0);
            if (hotlinePersons != null) {
                for (NoticePersonPO person : hotlinePersons) {
                    smsList.add(getSmsSendRequest(person, JSON.toJSONString(params), function));
                }
            }
            if (smsList.isEmpty()) {
                log.warn("======event_quartz_async_empty---{}", event.getId());
                return;
            }
            SmsSendResponse smsSendResponse = SendSmsUtils.send(smsList);
            log.info("eventId-----------------------{}==smsSendResponse===={}", event.getId(), JSON.toJSONString(smsSendResponse));
        } finally {
            if (event != null) {
                log.warn("======event_quartz_async_finally---{}", event.getId());
                EventExtendGetRequest getRequest = new EventExtendGetRequest();
                getRequest.setId(event.getId());
                EventExtend extend = eventExtendManager.get(getRequest, passport).getEventExtend();

                EventExtendUpdateRequest updateRequest = new EventExtendUpdateRequest();
                updateRequest.setId(extend.getId());
                updateRequest.setIsHurried(true);
                updateRequest.setHurryTime(new Date());
                updateRequest.setIsNoticed(extend.getIsNoticed());
                updateRequest.setNoticeTime(extend.getNoticeTime());
                updateRequest.setRowVersion(extend.getRowVersion());
                eventExtendManager.update(updateRequest, passport);
            } else {
                log.warn("======event_quartz_async_event=null---");
            }
        }
    }

    private SmsSendRequest getSmsSendRequest(NoticePersonPO person, String params, String function) {
        SmsSendRequest smsSendRequest = new SmsSendRequest();
        smsSendRequest.setTenantId(RAILWAY_TENANT_ID);
        smsSendRequest.setFunction(function);
        smsSendRequest.setParam(params);
        smsSendRequest.setMobile(person.getUserMobile());
        smsSendRequest.setProvider(SmsTemplateProviderEnum.ALIYUN.name());
        smsSendRequest.setBusinessId(event.getId());
        smsSendRequest.setBusinessType(person.getType());
        smsSendRequest.setSign("平安地铁");
        return smsSendRequest;
    }
}