From f16864096d96f7685da0a19e04b5d93c1136b0b4 Mon Sep 17 00:00:00 2001 From: 3y Date: Sun, 22 May 2022 12:25:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E5=9B=9E=E6=89=A7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=80=E5=8F=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java3y/austin/common/enums/SmsStatus.java | 15 +++++ .../handler/receipt/TencentSmsReceipt.java | 4 +- .../austin/support/dao/SmsRecordDao.java | 13 +++- .../austin/web/controller/DataController.java | 11 ++- .../austin/web/service/DataService.java | 10 +++ .../web/service/impl/DataServiceImpl.java | 57 ++++++++++++++++ .../com/java3y/austin/web/vo/DataParam.java | 3 +- .../austin/web/vo/amis/SmsTimeLineVo.java | 67 +++++++++++++++++++ 8 files changed, 172 insertions(+), 8 deletions(-) create mode 100644 austin-web/src/main/java/com/java3y/austin/web/vo/amis/SmsTimeLineVo.java diff --git a/austin-common/src/main/java/com/java3y/austin/common/enums/SmsStatus.java b/austin-common/src/main/java/com/java3y/austin/common/enums/SmsStatus.java index 2ee30ba..285280c 100644 --- a/austin-common/src/main/java/com/java3y/austin/common/enums/SmsStatus.java +++ b/austin-common/src/main/java/com/java3y/austin/common/enums/SmsStatus.java @@ -21,4 +21,19 @@ public enum SmsStatus { private String description; + /** + * 根据状态获取描述信息 + * @param code + * @return + */ + public static String getDescriptionByStatus(Integer code) { + for (SmsStatus value : SmsStatus.values()) { + if (value.getCode().equals(code)) { + return value.getDescription(); + } + } + return ""; + } + + } diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/TencentSmsReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/TencentSmsReceipt.java index 20c77fd..e59f67a 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/TencentSmsReceipt.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/TencentSmsReceipt.java @@ -78,8 +78,8 @@ public class TencentSmsReceipt { .chargingNum(0) .status("SUCCESS".equals(pullSmsSendStatus.getReportStatus()) ? SmsStatus.RECEIVE_SUCCESS.getCode() : SmsStatus.RECEIVE_FAIL.getCode()) .reportContent(pullSmsSendStatus.getDescription()) - .created(Math.toIntExact(pullSmsSendStatus.getUserReceiveTime())) - .updated(Math.toIntExact(DateUtil.currentSeconds())) + .updated(Math.toIntExact(pullSmsSendStatus.getUserReceiveTime())) + .created(Math.toIntExact(DateUtil.currentSeconds())) .build(); smsRecordList.add(smsRecord); } diff --git a/austin-support/src/main/java/com/java3y/austin/support/dao/SmsRecordDao.java b/austin-support/src/main/java/com/java3y/austin/support/dao/SmsRecordDao.java index c312996..4211d88 100644 --- a/austin-support/src/main/java/com/java3y/austin/support/dao/SmsRecordDao.java +++ b/austin-support/src/main/java/com/java3y/austin/support/dao/SmsRecordDao.java @@ -4,12 +4,21 @@ package com.java3y.austin.support.dao; import com.java3y.austin.support.domain.SmsRecord; import org.springframework.data.repository.CrudRepository; +import java.util.List; + /** * 短信记录的Dao - * @author 3y * + * @author 3y */ public interface SmsRecordDao extends CrudRepository { - + /** + * 通过日期和手机号找到发送记录 + * + * @param phone + * @param sendDate + * @return + */ + List findByPhoneAndSendDate(Long phone, Integer sendDate); } diff --git a/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java b/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java index 801e4ad..6477ceb 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java +++ b/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java @@ -1,12 +1,12 @@ package com.java3y.austin.web.controller; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.java3y.austin.common.enums.RespStatusEnum; import com.java3y.austin.common.vo.BasicResultVO; import com.java3y.austin.web.service.DataService; import com.java3y.austin.web.vo.DataParam; import com.java3y.austin.web.vo.amis.EchartsVo; +import com.java3y.austin.web.vo.amis.SmsTimeLineVo; import com.java3y.austin.web.vo.amis.UserTimeLineVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -49,8 +49,13 @@ public class DataController { @PostMapping("/sms") @ApiOperation("/获取短信下发数据") public BasicResultVO getSmsData(@RequestBody DataParam dataParam) { - EchartsVo echartsVo = EchartsVo.builder().build(); - return null; + if (dataParam == null || dataParam.getDateTime() == null || dataParam.getReceiver() == null) { + return new BasicResultVO<>(RespStatusEnum.SUCCESS, new SmsTimeLineVo()); + } + + SmsTimeLineVo smsTimeLineVo = dataService.getTraceSmsInfo(dataParam); + + return new BasicResultVO<>(RespStatusEnum.SUCCESS, smsTimeLineVo); } } diff --git a/austin-web/src/main/java/com/java3y/austin/web/service/DataService.java b/austin-web/src/main/java/com/java3y/austin/web/service/DataService.java index 86e1e8e..42b09b2 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/service/DataService.java +++ b/austin-web/src/main/java/com/java3y/austin/web/service/DataService.java @@ -1,6 +1,8 @@ package com.java3y.austin.web.service; +import com.java3y.austin.web.vo.DataParam; import com.java3y.austin.web.vo.amis.EchartsVo; +import com.java3y.austin.web.vo.amis.SmsTimeLineVo; import com.java3y.austin.web.vo.amis.UserTimeLineVo; /** @@ -28,4 +30,12 @@ public interface DataService { EchartsVo getTraceMessageTemplateInfo(String businessId); + /** + * 获取短信下发记录 + * + * @param dataParam + * @return + */ + SmsTimeLineVo getTraceSmsInfo(DataParam dataParam); + } diff --git a/austin-web/src/main/java/com/java3y/austin/web/service/impl/DataServiceImpl.java b/austin-web/src/main/java/com/java3y/austin/web/service/impl/DataServiceImpl.java index 010ddf5..15f3727 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/service/impl/DataServiceImpl.java +++ b/austin-web/src/main/java/com/java3y/austin/web/service/impl/DataServiceImpl.java @@ -11,13 +11,18 @@ import com.java3y.austin.common.constant.AustinConstant; import com.java3y.austin.common.domain.SimpleAnchorInfo; import com.java3y.austin.common.enums.AnchorState; import com.java3y.austin.common.enums.ChannelType; +import com.java3y.austin.common.enums.SmsStatus; import com.java3y.austin.support.dao.MessageTemplateDao; +import com.java3y.austin.support.dao.SmsRecordDao; import com.java3y.austin.support.domain.MessageTemplate; +import com.java3y.austin.support.domain.SmsRecord; import com.java3y.austin.support.utils.RedisUtils; import com.java3y.austin.support.utils.TaskInfoUtils; import com.java3y.austin.web.constants.AmisVoConstant; import com.java3y.austin.web.service.DataService; +import com.java3y.austin.web.vo.DataParam; import com.java3y.austin.web.vo.amis.EchartsVo; +import com.java3y.austin.web.vo.amis.SmsTimeLineVo; import com.java3y.austin.web.vo.amis.UserTimeLineVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -39,6 +44,10 @@ public class DataServiceImpl implements DataService { @Autowired private MessageTemplateDao messageTemplateDao; + @Autowired + private SmsRecordDao smsRecordDao; + + @Override public UserTimeLineVo getTraceUserInfo(String receiver) { List userInfoList = redisUtils.lRange(receiver, 0, -1); @@ -134,6 +143,44 @@ public class DataServiceImpl implements DataService { } + @Override + public SmsTimeLineVo getTraceSmsInfo(DataParam dataParam) { + + ArrayList itemsVOS = new ArrayList<>(); + SmsTimeLineVo smsTimeLineVo = SmsTimeLineVo.builder().items(itemsVOS).build(); + + Integer sendDate = Integer.valueOf(DateUtil.format(new Date(dataParam.getDateTime() * 1000L) + , DatePattern.PURE_DATE_PATTERN)); + List smsRecordList = smsRecordDao.findByPhoneAndSendDate(Long.valueOf(dataParam.getReceiver()), sendDate); + + if (CollUtil.isEmpty(smsRecordList)) { + return smsTimeLineVo; + } + + Map> maps = smsRecordList.stream().collect(Collectors.groupingBy((o) -> o.getPhone() + o.getSeriesId())); + + for (Map.Entry> entry : maps.entrySet()) { + SmsTimeLineVo.ItemsVO itemsVO = SmsTimeLineVo.ItemsVO.builder().build(); + for (SmsRecord smsRecord : entry.getValue()) { + // 发送记录 messageTemplateId >0 ,回执记录 messageTemplateId =0 + if (smsRecord.getMessageTemplateId() > 0) { + itemsVO.setBusinessId(String.valueOf(smsRecord.getMessageTemplateId())); + itemsVO.setContent(smsRecord.getMsgContent()); + itemsVO.setSendType(SmsStatus.getDescriptionByStatus(smsRecord.getStatus())); + itemsVO.setSendTime(DateUtil.format(new Date(Long.valueOf(smsRecord.getCreated()*1000L)), DatePattern.NORM_DATETIME_PATTERN)); + + } else { + itemsVO.setReceiveType(SmsStatus.getDescriptionByStatus(smsRecord.getStatus())); + itemsVO.setReceiveContent(smsRecord.getReportContent()); + itemsVO.setReceiveTime(DateUtil.format(new Date(Long.valueOf(smsRecord.getUpdated()*1000L)), DatePattern.NORM_DATETIME_PATTERN)); + } + } + itemsVOS.add(itemsVO); + } + + return smsTimeLineVo; + } + /** * 如果传入的是模板ID,则生成【当天】的businessId进行查询 * 如果传入的是businessId,则按默认的businessId进行查询 @@ -150,4 +197,14 @@ public class DataServiceImpl implements DataService { } return businessId; } + + public static void main(String[] args) { + + Long time = 1653140847 * 1000L; + + String format = DateUtil.format(new Date(time), DatePattern.NORM_DATETIME_PATTERN); + + System.out.println(format + ); + } } diff --git a/austin-web/src/main/java/com/java3y/austin/web/vo/DataParam.java b/austin-web/src/main/java/com/java3y/austin/web/vo/DataParam.java index 9368baf..416bb29 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/vo/DataParam.java +++ b/austin-web/src/main/java/com/java3y/austin/web/vo/DataParam.java @@ -34,7 +34,8 @@ public class DataParam { /** * 日期时间(检索短信的条件使用) */ - private String dateTime; + private Long dateTime; + diff --git a/austin-web/src/main/java/com/java3y/austin/web/vo/amis/SmsTimeLineVo.java b/austin-web/src/main/java/com/java3y/austin/web/vo/amis/SmsTimeLineVo.java new file mode 100644 index 0000000..b008ed7 --- /dev/null +++ b/austin-web/src/main/java/com/java3y/austin/web/vo/amis/SmsTimeLineVo.java @@ -0,0 +1,67 @@ +package com.java3y.austin.web.vo.amis; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author 3y + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SmsTimeLineVo { + + /** + * items + */ + private List items; + + /** + * ItemsVO + */ + @Data + @Builder + public static class ItemsVO { + /** + * 业务ID + */ + private String businessId; + /** + * detail 发送内容 + */ + private String content; + + /** + * 发送状态 + */ + private String sendType; + + /** + * 回执状态 + */ + private String receiveType; + + /** + * 回执报告 + */ + private String receiveContent; + + /** + * 发送时间 + */ + private String sendTime; + + /** + * 回执时间 + */ + private String receiveTime; + + + } +}