package com.hdw.sms.util;


import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import com.hdw.common.util.JacksonUtil;
import com.hdw.sms.entity.Sms;
import com.hdw.sms.entity.SmsRecord;
import com.hdw.sms.entity.SmsType;
import com.hdw.sms.entity.SysSms;
import com.hdw.sms.service.ISmsRecordService;
import com.hdw.sms.service.ISmsTypeService;
import com.hdw.sms.service.ISysSmsService;
import com.hdw.websocket.SmsPushSocket;
import lombok.extern.log4j.Log4j2;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;


/**
 * @Description 接收系统消息
 * @Author TuMinglong
 * @Date 2018/5/23 16:05
 */
@Log4j2
@Component
public class SmsReceiveMsgService {

    @Reference
    private ISysSmsService sysSmsService;
    @Reference
    private ISmsTypeService smsTypeService;
    @Reference
    private ISmsRecordService smsRecordService;
    @Autowired
    private SmsPushSocket smsPushSocket;

    @JmsListener(destination = "hdw-dubbo-sms", containerFactory = "queueJmsListenerContainerFactory", concurrency = "5-10")
    public void receiveMsg(String msg) {
        log.info("接收到的数据:" + msg);
        Sms sms = JacksonUtil.toObject(msg, Sms.class);
        if (null != sms) {
            Snowflake snowflake = IdUtil.createSnowflake(1, 1);
            long id = snowflake.nextId();
            SysSms sysSms = new SysSms();
            sysSms.setId(id);
            sysSms.setSmsTypeId(Long.valueOf(sms.getSmsType()));
            sysSms.setTitle(sms.getTitle());
            sysSms.setContent(sms.getContent());
            sysSms.setSmsTime(sms.getSmsTime());
            sysSms.setIntervalTime(sms.getIntervalTime());
            sysSms.setSmsCount(sms.getSmsCount());
            sysSms.setStatus(0);
            sysSmsService.save(sysSms);
            SmsType smsType = smsTypeService.getById(sms.getSmsType());
            if (null != smsType) {
                List<String> userIds = new ArrayList<>();
                if (smsType.getTargetList().contains(",")) {
                    String[] targetList = smsType.getTargetList().split(",");
                    userIds.addAll(Arrays.asList(targetList));
                } else {
                    userIds.add(smsType.getTargetList());
                }
                //保存消息记录
                userIds.forEach(userId -> {
                    SmsRecord smsRecord = new SmsRecord();
                    smsRecord.setUserId(Long.valueOf(userId));
                    smsRecord.setSmsId(sysSms.getId());
                    smsRecord.setSmsTime(sms.getSmsTime());
                    smsRecord.setStatus(sms.getStatus());
                    smsRecordService.save(smsRecord);
                    sms.setId(smsRecord.getId().toString());
                    //推送消息
                    smsPushSocket.sendInfo(userId, sms.toString());
                });
                //更新消息信息
                sysSms.setRealTime(new Date());
                sysSms.setRealCount(1);
                sysSmsService.updateById(sysSms);
            }
        }
    }
}