提交 eacde75c authored 作者: 刘海泉's avatar 刘海泉

提交站内信线路预警和运单预警代码

上级 9b8b402a
......@@ -3,6 +3,8 @@ package com.clx.performance.dto;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @ClassName InternalMessageDTO
* @Description
......@@ -13,12 +15,18 @@ import lombok.Setter;
@Getter
@Setter
public class InternalMessageDTO {
//站内信大类业务code
private String businessType;
//站内信模版业务详情自定义Code (业务原始Code或自定义code)
private Integer typeCode;
//内容参数
List<String> variableList;
//站内信模版业务详情Code
private String businessTypeDetailCode;
//站内信模版内容
private String content;
//站内信点对点的用户
private Long userNo;
private String productCode;
}
......@@ -7,7 +7,7 @@ import java.util.List;
public interface SendInternalMessageService {
//发送站内信的业务Code
void sendInternalMessageMq(String businessType, Integer typeCode, List<String> variableList, Long userNo);
void sendInternalMessageMq(String productCode,String businessType, Integer typeCode, List<String> variableList, Long userNo);
//发送承运站内信
void sendCarrierInternalMessage(InternalMessageDTO internalMessageDTO);
......
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ConfiguredOpenProperties;
import com.clx.performance.dto.InternalMessageDTO;
import com.clx.performance.enums.InternalMessageTemplateEnum;
......@@ -21,15 +22,19 @@ import com.msl.user.vo.user.external.PageProductUserVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
import static com.clx.performance.constant.RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_EXCHANGE;
import static com.clx.performance.constant.RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_ROUTING_KEY;
/**
* @ClassName SendInternalMessageServiceImpl
* @Description
......@@ -55,33 +60,43 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
//发送站内信的业务Code
@Override
public void sendInternalMessageMq(String businessType, Integer typeCode, List<String> variableList, Long userNo){
/* InternalMessageDTO dto = new InternalMessageDTO();
dto.setBusinessTypeDetailCode(businessTypeDetailCode);
dto.setContent(content);
public void sendInternalMessageMq(String productCode,String businessType, Integer typeCode, List<String> variableList, Long userNo){
InternalMessageDTO dto = new InternalMessageDTO();
dto.setBusinessType(businessType);
dto.setTypeCode(typeCode);
dto.setVariableList(variableList);
dto.setUserNo(userNo);
log.info("发送站内信消息开始,站内信业务Code:{},消息内容:{}", businessTypeDetailCode,JSON.toJSONString(dto));
dto.setProductCode(productCode);
log.info("发送站内信消息开始,站内信业务类型{},实际业务Code:{},消息内容:{}", businessType,typeCode,JSON.toJSONString(dto));
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(dto)).getBytes()).build();
rabbitTemplate.send(SEND_CARRIER_INTERNAL_MESSAGE_EXCHANGE,
SEND_CARRIER_INTERNAL_MESSAGE_ROUTING_KEY, body);
log.info("发送站内信消息结束,站内信业务Code:{}", businessTypeDetailCode);*/
log.info("发送站内信消息结束,站内信业务类型{},实际业务Code:{},", businessType,typeCode);
}
public InternalMessageDTO buildMqData(String businessType, Integer typeCode, List<String> variableList, Long userNo){
return null;
}
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("爱情");
list.add("在这里");
String str = "你的%s在那里%s";
//查找字符在字符串出现的次数
public static int countCharTimes(String mainStr,String subStr){
// 声明一个要返回的变量
int count = 0;
// 声明一个初始的下标,从初始位置开始查找
int index = 0;
// 获取主数据的长度
int mainStrLength = mainStr.length();
// 获取要查找的数据长度
int subStrLength = subStr.length();
// 如果要查找的数据长度大于主数据的长度则返回0
if (subStrLength > mainStrLength){
return 0;
}
// 循环使用indexOf查找出现的下标,如果出现一次则count++
String result = String.format(str, list.toArray());
System.out.println(result);
while ((index = mainStr.indexOf(subStr, index)) != -1) {
count++;
index += subStrLength;
}
return count;
}
......@@ -96,12 +111,27 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
@Override
public void sendCarrierInternalMessage(InternalMessageDTO internalMessageDTO) {
Map<Integer, String> businessRelationMap = InternalMessageTemplateEnum.businessTypeMap.get(
internalMessageDTO.getBusinessType());
if(MapUtils.isEmpty(businessRelationMap)){
log.warn("通过业务类型:{}, 在businessTypeMap 未找到对应的映射关系",internalMessageDTO.getBusinessType());
return;
}
String businessTypeDetailCode = businessRelationMap.get(internalMessageDTO.getTypeCode());
if(StringUtils.isBlank(businessTypeDetailCode)){
log.warn("通过详细业务类型:{}, businessRelationMap 未找到对应的站内信详细业务类型关系",internalMessageDTO.getTypeCode());
return;
}
Optional<InternalMessageTemplateEnum.TemplateType> templateTypeOptional = InternalMessageTemplateEnum.TemplateType.getByBusinessTypeDetailCode(
internalMessageDTO.getBusinessTypeDetailCode());
businessTypeDetailCode);
if(templateTypeOptional.isEmpty()){
log.error("通过站内信业务详情Code未找到对应的枚举类型,code:{}",internalMessageDTO.getBusinessTypeDetailCode());
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"发送站内信失败");
log.error("通过站内信业务详情Code未找到对应的枚举类型,code:{}",businessTypeDetailCode);
return;
}
InternalMessageTemplateEnum.TemplateType templateType = templateTypeOptional.get();
......@@ -117,14 +147,14 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
//发送站内信
DefaultMessageRoute messageRoute = new DefaultMessageRoute();
//TODO 自己定义,提供给消息中心
messageRoute.put("product-code",InternalMessageTemplateEnum.PlatformType.CARRIER.getCode());
messageRoute.put("product-code",internalMessageDTO.getProductCode());
message.setMessageRoute(messageRoute);
//直接指定内容
DefaultMessageContent defaultMessageContent = new DefaultMessageContent();
defaultMessageContent.setTitle(templateType.getBusinessDetailType().getTitle());
defaultMessageContent.setContext(internalMessageDTO.getContent());
defaultMessageContent.setContext(replaceContent(templateType.getBusinessDetailType().getContent(),internalMessageDTO.getVariableList()));
HashMap<String,Object> data = new HashMap<>();
data.put("businessDetailTypeCode",templateType.getBusinessDetailType().getCode());
......@@ -137,9 +167,17 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
//组装发送人 指定接收人
SpecifiesRecipient messageRecipient = new SpecifiesRecipient();
List<Long> list = getPlatformUser();
List<Long> list;
if(Objects.nonNull(internalMessageDTO.getUserNo())){
list = new ArrayList<>();
list.add(internalMessageDTO.getUserNo());
}else{
list = getPlatformUser(internalMessageDTO.getProductCode());
}
if(CollectionUtils.isEmpty(list)){
log.error("查询承运平台下全部用户返回为空");
log.error("=======================发送站内信的用户列表为空==========================");
return;
}
messageRecipient.setUsers(list);
message.setMessageRecipient(messageRecipient);
......@@ -153,9 +191,9 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
public List<Long> getPlatformUser(){
public List<Long> getPlatformUser(String productCode){
PageProductUsersParam param = new PageProductUsersParam();
param.setProductCode(InternalMessageTemplateEnum.PlatformType.CARRIER.getCode());
param.setProductCode(productCode);
param.setPage(1);
param.setPageSize(10000);
log.info("开始查询承运平台下的所有用户信息");
......@@ -171,6 +209,16 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
}
}
//构建站内信中的内容,替换变量
private String replaceContent(String content,List<String> list){
int times = countCharTimes(content, "%s");
if(times != list.size()){
log.error("替换的变量和字符串中需要的变量数量不一致");
return null;
}
return String.format(content, list.toArray());
}
}
......@@ -14,6 +14,7 @@ import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.InternalMessageTemplateEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnOrderGoodsEnum;
......@@ -26,6 +27,7 @@ import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderChildWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import com.clx.performance.service.SendInternalMessageService;
import com.clx.performance.service.linewarn.*;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.gd.GdUtils;
......@@ -37,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
......@@ -83,6 +86,8 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
private VehicleWarnUserDao vehicleWarnUserDao;
@Autowired
private ClxMessageOpenapiFeign clxMessageOpenapiFeign;
@Autowired
SendInternalMessageService sendInternalMessageService;
@Transactional(rollbackFor = Exception.class)
......@@ -212,6 +217,14 @@ public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
}
}
//发送站内信mq
sendInternalMessageService.sendInternalMessageMq(InternalMessageTemplateEnum.PlatformType.CARRIER.getCode(),
InternalMessageTemplateEnum.BusinessType.LINE_WARN.getCode(),
vehicleWarnInfo.getWarnType(), Collections.singletonList(vehicleWarnInfo.getOrderGoodsNo()),null);
if (mobileList.isEmpty()) {return;}
log.info("线路预警通知, id:{}, mobileList:{}", vehicleWarnInfo.getId(), JSON.toJSONString(mobileList));
......
......@@ -343,7 +343,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
//发送站内信mq
sendInternalMessageService.sendInternalMessageMq(InternalMessageTemplateEnum.BusinessType.CHILD_WARN.getCode(),
sendInternalMessageService.sendInternalMessageMq(InternalMessageTemplateEnum.PlatformType.CARRIER.getCode(),
InternalMessageTemplateEnum.BusinessType.CHILD_WARN.getCode(),
vehicleWarnInfo.getWarnType(), Collections.singletonList(vehicleWarnInfo.getChildNo()),null);
List<String> mobileList = new ArrayList<>();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论