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

增加站内信相关代码

上级 e532ca02
......@@ -13,5 +13,6 @@ public class ConfiguredOpenProperties {
private String gatewayUrl;
private String appId;
private String appKey;
private String accessKey;
private String smsAccessKey;
private String carrierInternalMessageAccessKey;
}
......@@ -300,5 +300,32 @@ public class RabbitBeanConfig {
/**
* 发送承运站内信
*/
@Bean
public Queue sendCarrierInternalMessageQueue() {
return new Queue(RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_QUEUE,
true, false, false);
}
/**
* 发送承运站内信
**/
@Bean
public DirectExchange sendCarrierInternalMessageExchange() {
return new DirectExchange(RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_EXCHANGE);
}
/**
*发送承运站内信
*/
@Bean
public Binding sendCarrierInternalMessageBind() {
return BindingBuilder.bind(sendCarrierInternalMessageQueue()).to(sendCarrierInternalMessageExchange())
.with(RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_ROUTING_KEY);
}
}
......@@ -150,4 +150,16 @@ public class RabbitKeyConstants {
//保存货单调价记录routing_key
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY = "clx_performance.save.order.goods.adjustment.price.routing.key";
//发送承运端站内信queue
public static final String SEND_CARRIER_INTERNAL_MESSAGE_QUEUE = "clx_performance.send.carrier.internal.message.queue";
//发送承运端站内信exchange
public static final String SEND_CARRIER_INTERNAL_MESSAGE_EXCHANGE = "clx_performance.send.carrier.internal.message.exchange";
//发送承运端站内信routing_key
public static final String SEND_CARRIER_INTERNAL_MESSAGE_ROUTING_KEY = "clx_performance.send.carrier.internal.message..routing.key";
}
package com.clx.performance.dto;
import com.clx.performance.enums.InternalMessageTemplateEnum;
import lombok.Getter;
import lombok.Setter;
......@@ -15,8 +14,8 @@ import lombok.Setter;
@Setter
public class InternalMessageDTO {
//站内信模版枚举
private InternalMessageTemplateEnum.TemplateType templateType;
//站内信模版业务详情Code
private String businessTypeDetailCode;
//站内信模版内容
private String content;
//站内信点对点的用户
......
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dto.InternalMessageDTO;
import com.clx.performance.service.SendInternalMessageService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 处理货单取消吨数回填
*/
@Slf4j
@Component
@AllArgsConstructor
public class SendCarrierInternalMessageListener {
private final SendInternalMessageService sendInternalMessageService;
@RabbitListener(queues = RabbitKeyConstants.SEND_CARRIER_INTERNAL_MESSAGE_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到承运发送站内信开始,消息内容{}", new String(message.getBody()));
InternalMessageDTO data = JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<InternalMessageDTO>>() {
}).getData();
sendInternalMessageService.sendCarrierInternalMessage(data);
}catch (Exception e){
log.info("监听到承运发送站内信发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
......@@ -108,7 +108,7 @@ public class SendOrderStatusNoticeSmsListener {
smsMessage.setRecipient(smsMessageRecipient);
//从消息中心注册获取的通道key
smsMessage.setAccessKey(properties.getAccessKey());
smsMessage.setAccessKey(properties.getSmsAccessKey());
//向消息中心发送消息
......
package com.clx.performance.service;
import com.clx.performance.dto.InternalMessageDTO;
import java.util.List;
public interface SendInternalMessageService {
//发送站内信的业务Code
void sendInternalMessageMq(String businessType, Integer typeCode, List<String> variableList, Long userNo);
//发送承运站内信
void sendCarrierInternalMessage(InternalMessageDTO internalMessageDTO);
}
......@@ -2,9 +2,12 @@ package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.performance.config.ConfiguredOpenProperties;
import com.clx.performance.dto.InternalMessageDTO;
import com.clx.performance.enums.InternalMessageTemplateEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.service.SendInternalMessageService;
import com.msl.common.base.PageData;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.open.ConfiguredOpenClient;
import com.msl.common.result.Result;
import com.msl.message.in.app.api.content.DefaultMessageContent;
......@@ -18,10 +21,13 @@ import com.msl.user.vo.user.external.PageProductUserVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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.stream.Collectors;
/**
......@@ -41,9 +47,44 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
private final ConfiguredOpenClient configuredOpenClient;
private final ConfiguredOpenProperties configuredOpenProperties;
private final UserFeign userFeign;
private final RabbitTemplate rabbitTemplate;
//发送站内信的业务Code
@Override
public void sendInternalMessageMq(String businessType, Integer typeCode, List<String> variableList, Long userNo){
/* InternalMessageDTO dto = new InternalMessageDTO();
dto.setBusinessTypeDetailCode(businessTypeDetailCode);
dto.setContent(content);
dto.setUserNo(userNo);
log.info("发送站内信消息开始,站内信业务Code:{},消息内容:{}", businessTypeDetailCode,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);*/
}
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";
String result = String.format(str, list.toArray());
System.out.println(result);
}
//TODO 后续修改Nacos的短信和站内信的 accessKey ,进行区分
public final String accessKey = "CARRIER_INTERNAL_MESSAGE";
/**
......@@ -51,16 +92,27 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
* socket推送JSON实例:{"productCode":"trade-client-app","functionKey":"CLX-SMB-SALES","userKey":"1021138417641676869","deliverToCompany":1,"companyKey":"1121232210178818117","userTag":null,"message":{"bizType":"in_app","body":{"id":16674,"messageNo":"1292033698861125","accessKey":"CLX-SMB-SALES","companyNo":"1121232210178818117","userNo":"1021138417641676869","messageGroup":"2","messageSign":"4","messageGroupName":"交易提醒","messageSignName":"交易提醒","showType":"3","showPriority":null,"validityLimitTime":"2024-07-25 15:12:04","showStatus":null,"showTime":null,"receivePage":null,"jumpPage":null,"markdownFlag":null,"status":null,"statusName":null,"readTime":null,"executedTime":null,"textVo":{"title":"需求发布成功","subtitle":"您好,当前企业有销售需求发布成功,请及时关注;【喜喜煤】/【7700kcal】/【700.00吨】/【123.85元/吨】,发布人:【陈小云】","content":null,"dataJson":"{\"unitPrice\":\"123.85\",\"calorificValue\":7700,\"demandId\":932,\"inAppSendType\":3,\"inAppSendTypeName\":\"消息通知\",\"jumpPageAppParam\":{\"id\":\"932\",\"underFlag\":\"1\"},\"coalType\":\"喜喜煤\",\"publisher\":\"陈小云\",\"jumpPageAppUrl\":\"/ReleaseDetailsPage\",\"tonnage\":\"700.00\",\"page\":\"message_code:demand_publish_success_sales\",\"extraShowInfoList\":[{\"unit\":\"\",\"code\":\"coalType\",\"name\":\"煤种\",\"value\":\"喜喜煤\"},{\"unit\":\"kcal\",\"code\":\"calorificValue\",\"name\":\"热值\",\"value\":7700},{\"unit\":\"吨\",\"code\":\"tonnage\",\"name\":\"吨数\",\"value\":\"700.00\"},{\"unit\":\"元/吨\",\"code\":\"unitPrice\",\"name\":\"单价\",\"value\":\"123.85\"},{\"unit\":\"\",\"code\":\"publisher\",\"name\":\"发布人姓名\",\"value\":\"陈小云\"}]}"},"createTime":null},"bodyType":3}}
*/
//发送司机站内信
public void sendCarrierInternalMessage(InternalMessageTemplateEnum.TemplateType templateType,String content) {
//发送承运站内信
@Override
public void sendCarrierInternalMessage(InternalMessageDTO internalMessageDTO) {
Optional<InternalMessageTemplateEnum.TemplateType> templateTypeOptional = InternalMessageTemplateEnum.TemplateType.getByBusinessTypeDetailCode(
internalMessageDTO.getBusinessTypeDetailCode());
if(templateTypeOptional.isEmpty()){
log.error("通过站内信业务详情Code未找到对应的枚举类型,code:{}",internalMessageDTO.getBusinessTypeDetailCode());
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"发送站内信失败");
}
InternalMessageTemplateEnum.TemplateType templateType = templateTypeOptional.get();
InAppDefaultMessage message = new InAppDefaultMessage();
//消息
message.setMessageGroup(templateType.getMessageType().getCode());
message.setMessageGroupName(templateType.getMessageType().getName());
message.setMessageSign(templateType.getBusinessType().getCode());
message.setMessageSignName(templateType.getBusinessType().getName());
//TODO 自己定义,提供给消息中心
message.setAccessKey(accessKey);
message.setAccessKey(configuredOpenProperties.getCarrierInternalMessageAccessKey());
//发送站内信
DefaultMessageRoute messageRoute = new DefaultMessageRoute();
......@@ -72,7 +124,7 @@ public class SendInternalMessageServiceImpl implements SendInternalMessageServic
//直接指定内容
DefaultMessageContent defaultMessageContent = new DefaultMessageContent();
defaultMessageContent.setTitle(templateType.getBusinessDetailType().getTitle());
defaultMessageContent.setContext(content);
defaultMessageContent.setContext(internalMessageDTO.getContent());
HashMap<String,Object> data = new HashMap<>();
data.put("businessDetailTypeCode",templateType.getBusinessDetailType().getCode());
......
......@@ -13,6 +13,7 @@ import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.InternalMessageTemplateEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
......@@ -27,6 +28,7 @@ import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnChildAddMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnNoticeMqParam;
import com.clx.performance.service.SendInternalMessageService;
import com.clx.performance.service.linewarn.LineWarnMqService;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.service.vehiclewarn.*;
......@@ -38,9 +40,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
@Slf4j
@Service
......@@ -82,6 +82,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@Autowired
private LineWarnMqService lineWarnMqService;
@Autowired
private SendInternalMessageService sendInternalMessageService;
@Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
......@@ -330,6 +332,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
}
@Override
public void truckWarnNotice(VehicleWarnTruckWarnNoticeMqParam mq) {
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao
......@@ -338,6 +341,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
// 发送mq(运单异常)
lineWarnMqService.orderChildWarn(vehicleWarnInfo.getOrderGoodsNo(), vehicleWarnInfo.getChildNo());
//发送站内信mq
sendInternalMessageService.sendInternalMessageMq(InternalMessageTemplateEnum.BusinessType.CHILD_WARN.getCode(),
vehicleWarnInfo.getWarnType(), Collections.singletonList(vehicleWarnInfo.getChildNo()),null);
List<String> mobileList = new ArrayList<>();
// 过滤需要通知的人员
......
package com.clx.performance.enums;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class InternalMessageTemplateEnum {
//运单预警map
public static Map<Integer,String> CHILD_WARN_MAP = new HashMap<>();
//线路预警map
public static Map<Integer,String> LINE_WARN_MAP = new HashMap<>();
//待报价订单map
public static Map<Integer,String> WAIT_QUOTATION_ORDER_MAP = new HashMap<>();
//待审核事项map
public static Map<Integer,String> WAIT_APPROVED_ITEM_MAP = new HashMap<>();
//待创建货单map
public static Map<Integer,String> WAIT_CREATE_ORDER_GOODS_MAP = new HashMap<>();
//订单通知map
public static Map<Integer,String> ORDER_NOTICE_MAP = new HashMap<>();
//投诉通知map
public static Map<Integer,String> COMPLAINT_NOTICE_MAP = new HashMap<>();
//司机上报map
public static Map<Integer,String> DRIVER_REPORT_MAP = new HashMap<>();
//内部上报map
public static Map<Integer,String> INTERNAL_REPORT_MAP = new HashMap<>();
//key:businessType value: key:具体实际业务类型的code, value:BusinessTypeDetail的code
public static Map<String, Map<Integer,String>> businessTypeMap = new HashMap<>();
static {
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.ARRIVE_SEND_DELAY.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.GOTO_SEND_TIMEOUT.getCode(),BusinessTypeDetail.GOTO_SEND_TIMEOUT.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.ARRIVE_RECEIVE_DELAY.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.GOTO_RECEIVE_TIMEOUT.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.PARK_TIMEOUT.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.LOAD_TIMEOUT.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
CHILD_WARN_MAP.put(VehicleWarnConfigEnum.WarnType.UNLOAD_TIMEOUT.getCode(),BusinessTypeDetail.ARRIVE_SEND_DELAY.getCode());
businessTypeMap.put(BusinessType.CHILD_WARN.getCode(),CHILD_WARN_MAP);
businessTypeMap.put(BusinessType.LINE_WARN.getCode(),LINE_WARN_MAP);
businessTypeMap.put(BusinessType.WAIT_QUOTATION_ORDER.getCode(),WAIT_QUOTATION_ORDER_MAP);
businessTypeMap.put(BusinessType.WAIT_APPROVED_ITEM.getCode(),WAIT_APPROVED_ITEM_MAP);
businessTypeMap.put(BusinessType.WAIT_CREATE_ORDER_GOODS.getCode(),WAIT_CREATE_ORDER_GOODS_MAP);
businessTypeMap.put(BusinessType.ORDER_NOTICE.getCode(),ORDER_NOTICE_MAP);
businessTypeMap.put(BusinessType.COMPLAINT_NOTICE.getCode(),COMPLAINT_NOTICE_MAP);
businessTypeMap.put(BusinessType.DRIVER_REPORT.getCode(),DRIVER_REPORT_MAP);
businessTypeMap.put(BusinessType.INTERNAL_REPORT.getCode(),INTERNAL_REPORT_MAP);
}
@Getter
@AllArgsConstructor
public enum TemplateType {
GO_TO_SEND_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.GO_TO_SEND_TIMEOUT),
ARRIVE_SEND_DELAY(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.ARRIVE_SEND_DELAY),
GOTO_SEND_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.GOTO_SEND_TIMEOUT),
ARRIVE_RECEIVE_DELAY(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.ARRIVE_RECEIVE_DELAY),
GOTO_RECEIVE_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.GOTO_RECEIVE_TIMEOUT),
PARK_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.PARK_TIMEOUT),
LOAD_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.LOAD_TIMEOUT),
UNLOAD_TIMEOUT(PlatformType.CARRIER, MessageType.WARN, BusinessType.CHILD_WARN,BusinessTypeDetail.UNLOAD_TIMEOUT),
;
private final PlatformType platform; //承运平台 司机APP
private final MessageType messageType; //预警、待办、通知、上报
private final BusinessType businessType; //业务大类 运单预警
private final BusinessTypeDetail businessDetailType; //业务详细分类 前往目的地超时等
public static Optional<TemplateType> getByBusinessTypeDetailCode(String businessTypeDetailCode) {
return Arrays.stream(values()).filter(e -> e.businessDetailType.code.equals(businessTypeDetailCode)).findFirst();
}
}
......@@ -26,12 +95,18 @@ public class InternalMessageTemplateEnum {
public enum BusinessTypeDetail {
ARRIVE_SEND_DELAY("GO_TO_SEND_TIMEOUT", "预警通知:到达货源地延误"),
GO_TO_SEND_TIMEOUT("GO_TO_SEND_TIMEOUT", "预警通知:前往货源地超时"),
ARRIVE_SEND_DELAY("ARRIVE_SEND_DELAY", "预警通知:到达货源地延误","运单%s,到达货源地延误,请尽快处理。"),
GOTO_SEND_TIMEOUT("GO_TO_SEND_TIMEOUT", "预警通知:前往货源地超时","运单%s,前往货源地超时,请尽快处理。"),
ARRIVE_RECEIVE_DELAY("ARRIVE_RECEIVE_DELAY", "预警通知:到达目的地延误","运单%s,到达目的地延误,请尽快处理。"),
GOTO_RECEIVE_TIMEOUT("GOTO_RECEIVE_TIMEOUT", "预警通知:前往目的地超时","运单%s,到达目的地超时,请尽快处理。"),
PARK_TIMEOUT("PARK_TIMEOUT", "预警通知:前往货源地超时","运单%s,停留超时,请尽快处理。"),
LOAD_TIMEOUT("LOAD_TIMEOUT", "预警通知:前往货源地超时","运单%s,装车超时,请尽快处理。"),
UNLOAD_TIMEOUT("UNLOAD_TIMEOUT", "预警通知:前往货源地超时","运单%s,卸车超时,请尽快处理。"),
;
private final String code;
private final String title;
private final String content;
public static Optional<BusinessTypeDetail> getByCode(String code) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论