EventSubmitTask.java 5.56 KB
package com.xiniunet.service.railway.util.thread;

import com.alibaba.fastjson.JSON;
import com.xiniunet.basic.enumeration.SmsTemplateProviderEnum;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.railway.domain.Event;
import com.xiniunet.railway.request.EventExtendCreateRequest;
import com.xiniunet.railway.request.EventGetByEventIdRequest;
import com.xiniunet.service.railway.biz.EventExtendManager;
import com.xiniunet.service.railway.biz.EventManager;
import com.xiniunet.service.railway.dal.NoticePersonMapper;
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 EventSubmitTask implements Runnable{

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

    private final NoticePersonMapper noticePersonMapper;

    private final EventExtendManager eventExtendManager;

    private final EventManager eventManager;

    /**事件id*/
    private final Long eventId;

    private final Passport passport;

    public EventSubmitTask(Long eventId,
                           EventManager eventManager,
                           EventExtendManager eventExtendManager,
                           NoticePersonMapper noticePersonMapper,
                           Passport passport) {
        this.eventId = eventId;
        this.eventManager = eventManager;
        this.eventExtendManager = eventExtendManager;
        this.noticePersonMapper = noticePersonMapper;
        this.passport = passport;
    }

    @Override
    public void run() {
        EventExtendCreateRequest extendCreateRequest = new EventExtendCreateRequest();
        boolean isNoticed = true;
        try {
            if (eventId == null) {
                isNoticed = false;
                throw new RuntimeException("事件为空,事件id也为空");
            }
            EventGetByEventIdRequest getEventRequest = new EventGetByEventIdRequest();
            getEventRequest.setEventId(eventId.toString());
            Event event = eventManager.getByEventId(getEventRequest, passport).getEvent();
            if (event == null) {
                log.error("事件为空:event=null ---- eventId={}", eventId);
                isNoticed = false;
                return;
            }

            String description = event.getDescription();
            Map<String, String> params = new HashMap<>(6);
            params.put("station_name", event.getStation());
            params.put("event_time", event.getHappenTime());
            params.put("event_number", event.getAppEventId() != null ? event.getAppEventId() : "");
            params.put("line_carriage", (event.getLineName() + event.getCarriageNumber()).replaceAll("null", ""));
            params.put("event_titile", event.getTitle());
            params.put("event_description", description == null ? "" : description.length() > 10 ? description.substring(0, 10) + "... " : description);

            List<SmsSendRequest> smsList = new ArrayList<>();
            if (event.getStation() != null && event.getLineName() != null) {
                // 按车站发消息
                List<NoticePersonPO> persons = noticePersonMapper.queryPersonByStation("line", event.getLineId(), event.getLineName(), "station", event.getStationId(), event.getStation());
                if (persons.isEmpty()) {
                    isNoticed = false;
                    return;
                }
                for (NoticePersonPO person : persons) {
                    smsList.add(getSmsSendRequest(person, JSON.toJSONString(params), "shmetro.station.event.deal"));
                }

            } else if (event.getStation() == null && event.getLineName() != null) {
                // 按线路发消息
                List<NoticePersonPO> persons = noticePersonMapper.queryPersonByLine( "line", event.getLineId(), event.getLineName());
                if (persons.isEmpty()) {
                    isNoticed = false;
                    return;
                }
                for (NoticePersonPO person : persons) {
                    smsList.add(getSmsSendRequest(person, JSON.toJSONString(params), "shmetro.carriage.event.deal"));
                }
            }
            SmsSendResponse smsSendResponse = SendSmsUtils.send(smsList);
            isNoticed = !smsSendResponse.hasError();
            log.info("eventId-----------------------{}==smsSendResponse===={}", eventId, JSON.toJSONString(smsSendResponse));
        } catch (Exception e) {
            isNoticed = false;
        } finally {
            extendCreateRequest.setId(eventId);
            extendCreateRequest.setIsNoticed(isNoticed);
            extendCreateRequest.setNoticeTime(isNoticed? new Date(): null);
            extendCreateRequest.setIsHurried(false);
            eventExtendManager.create(extendCreateRequest, passport);
        }
    }

    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(eventId);
        smsSendRequest.setBusinessType(person.getType());
        smsSendRequest.setSign("平安地铁");
        return smsSendRequest;
    }
}