package com.zd.chemical.util; import cn.hutool.core.util.IdUtil; import com.esms.MOMsg; import com.esms.MessageData; import com.esms.PostMsg; import com.esms.common.entity.Account; import com.esms.common.entity.GsmsResponse; import com.esms.common.entity.MTPack; import com.zd.chemical.domain.SydSmsLog; import com.zd.chemical.service.ISydSmsLogService; import com.zd.common.core.constant.Constants; import com.zd.common.core.domain.R; import com.zd.common.core.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.validation.constraints.NotNull; import java.util.HashMap; import java.util.Map; import java.util.UUID; @Slf4j @Component public class SmsSydUtil { private static MTPack mtPack; // 证号 djjx // 登录密码 6B1aQety // 发送密码 yfhzfGSJ private static Account account = new Account("djjx", "yfhzfGSJ"); private static String SMS_IP = "127.0.0.1"; public static int DOWN_PORT = 8090; public static int UP_PORT = 8188; // 8090 下发端口 8188 拉取状态报告和上行 private static PostMsg DOWN_PM = new PostMsg(SMS_IP, DOWN_PORT); private static PostMsg UP_PM = new PostMsg(SMS_IP, UP_PORT); private static Map DOWN_MAP; private ISydSmsLogService sydSmsLogService; SmsSydUtil(){ // TODO 参数配置化 DOWN_MAP = new HashMap<>(); DOWN_MAP.put(0 , "成功"); DOWN_MAP.put(-1 , "账号无效,或者账号停用、过期等。"); DOWN_MAP.put(-2 , "参数无效"); DOWN_MAP.put(-3 , "连接不上服务器"); DOWN_MAP.put(-6 , "用户名密码错误"); DOWN_MAP.put(-11 , "单次提交号码数量超过系统限制"); DOWN_MAP.put(-12 , "超过发送量限制"); DOWN_MAP.put(-13 , "账号没有发送权限"); DOWN_MAP.put(-99 , "系统内部错误"); DOWN_MAP.put(-100 , "其它错误"); } private static MTPack buildDefaultSMSPack() { if(SmsSydUtil.mtPack == null){ mtPack = new MTPack(); mtPack.setSendType(MTPack.SendType.MASS); mtPack.setMsgType(MTPack.MsgType.SMS); mtPack.setBizType(1); } return SmsSydUtil.mtPack; } /** * 四医大平台发送短信 * @param content 发送内容 * @param purpose 短信用途 1 告警,2 登录,3 开锁 * @param phones 手机号 * @return 发送结果 */ public R sendSydSms(@NotNull String content, @NotNull Integer purpose, @NotNull String... phones) throws Exception { UUID uuid = UUID.randomUUID(); R r = singleTicketMsgId(content, uuid, phones); SydSmsLog sydSmsLog = new SydSmsLog(); sydSmsLog.setContent(content); sydSmsLog.setPhone(phones.toString()); sydSmsLog.setPurpose(purpose); sydSmsLog.setStatus(Integer.parseInt(r.getData() + "")); sydSmsLog.setCreateTime(DateUtils.getNowDate()); sydSmsLog.setUuid(uuid.toString()); sydSmsLogService.insertSydSmsLog(sydSmsLog); return r; } /** * 短信下发范例 每个话单,一个扩展码 */ private synchronized static R singleTicketMsgId(@NotNull String content, UUID uuid, @NotNull String... phones) throws Exception { MTPack pack = buildDefaultSMSPack(); // 批次号 pack.setBatchID(uuid); log.info("四医大短信下发参数:UUID," + pack.getBatchID() + "手机号:" + phones.toString() + "内容:" + content); for (String phone : phones) { pack.addMsg(MessageData.getInstance(phone, content)); } GsmsResponse resp = DOWN_PM.post(account, pack); log.info("四医大短信下发返回结果:" + resp.toString()); if(resp.getResult() == 0){ return R.ok(resp.getResult()+"", resp.getResult()); }else { return R.fail(resp.getResult()+"", DOWN_MAP.get(resp.getResult())); } } /** * 获取上行信息 * */ private static void doGetMos() throws Exception { MOMsg[] mos; mos = UP_PM.getMOMsgs(account, 10); if (mos != null) { for (MOMsg mo : mos) { log.info("四医大短信上行查询结果:" + mo.toString()); } } } }