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

Merge remote-tracking branch 'origin/master_jdk17' into v29.3_carrier_messsage_20240116

# Conflicts: # clx-performance-web/pom.xml
......@@ -115,7 +115,8 @@ public class RabbitKeyConstants {
//同步履约进度表消息----订单部分
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_INFO_QUEUE = "clx_order.sync.performance.progress.for.order.info.queue";
//发送订单状态通知短信queue
public static final String SEND_ORDER_STATUS_NOTICE_SMS_QUEUE = "clx_order.send.order.status.notice.sms.queue";
//货单同步履约进度表queue
......
......@@ -49,6 +49,7 @@ public class VehicleWarnUserController {
@Operation(summary = "更新通知配置", description = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated VehicleWarnUserConfigUpdateParam param) {
if (param.getOrderWarnTypeList() == null) {param.setOrderWarnTypeList(new ArrayList<>());}
if (param.getWarnTypeList() == null) {param.setWarnTypeList(new ArrayList<>());}
if (param.getLineWarnTypeList() == null) {param.setLineWarnTypeList(new ArrayList<>());}
vehicleWarnUserService.updateConfig(param);
......
......@@ -37,6 +37,7 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
public boolean updateWarnType(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getOrderWarnTypeJson, item.getOrderWarnTypeJson())
.set(VehicleWarnUser::getWarnTypeJson, item.getWarnTypeJson())
.set(VehicleWarnUser::getLineWarnTypeJson, item.getLineWarnTypeJson())
);
......
package com.clx.performance.listener;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ConfiguredOpenProperties;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.msl.common.open.ConfiguredOpenClient;
import com.msl.common.result.Result;
import com.msl.message.sdk.action.MessageAction;
import com.msl.message.sms.api.sms.SmsMessage;
import com.msl.message.sms.api.sms.content.SmsMessageContentImpl;
import com.msl.message.sms.api.sms.recipient.SmsMessageRecipientImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static com.clx.performance.enums.OrderEnum.Status.*;
import static com.msl.message.sms.api.enums.RecipientTypeEnum.USER_MOBILE;
@Slf4j
@Component
@AllArgsConstructor
public class SendOrderStatusNoticeSmsListener {
private static final Map<Integer,String> CODE_MAP = new HashMap<>();
private final ConfiguredOpenClient configuredOpenClient;
private final VehicleWarnUserDao vehicleWarnUserDao;
private final ConfiguredOpenProperties properties;
private final OrderFeign orderFeign;
public static final Integer CANCEL_REASON_CODE = 1000000;
static {
CODE_MAP.put(WAIT_QUOTATION.getCode(),"orderWaitQuotation");
CODE_MAP.put(PLATFORM_UNDERTAKING.getCode(),"orderPlatformUndertaking");
CODE_MAP.put(SUCCESS.getCode(),"orderSuccess");
CODE_MAP.put(COMPLETED.getCode(),"orderCompleted");
CODE_MAP.put(CANCELED.getCode(),"orderCanceled");
CODE_MAP.put(CANCEL_REASON_CODE,"orderCanceledHaveReason");
}
@RabbitListener(queues = RabbitKeyConstants.SEND_ORDER_STATUS_NOTICE_SMS_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到发送订单状态通知短信,消息内容{}", new String(message.getBody()));
OrderInfoMessage order = JSONUtil.toBean(new String(message.getBody()),
new TypeReference<MqWrapper<OrderInfoMessage>>() {
},false).getData();
String targets = getTargets(order.getOrderStatus());
log.info("获取需要发送短信的手机号列表:{}",targets);
if(StringUtils.isBlank(targets)){
return;
}
SmsMessage smsMessage = new SmsMessage();
//设置消息内容
SmsMessageContentImpl smsMessageContent= new SmsMessageContentImpl();
Integer code = getCode(order.getOrderNo(), order.getOrderStatus());
//模版code
smsMessageContent.setCode(CODE_MAP.get(code));
//模版参数
Map<String, Object> params = new HashMap<>();
params.put("sendAddressShorter",order.getSendAddressShorter());
params.put("receiveAddressShorter",order.getReveiveAddressShorter());
params.put("orderNo",order.getOrderNo());
params.put("cancelReason",getCancelReason(order.getOrderNo(),code));
smsMessageContent.setParams(params);
//设置消息接收人
SmsMessageRecipientImpl smsMessageRecipient = new SmsMessageRecipientImpl();
smsMessageRecipient.setUserType(USER_MOBILE.getCode());
smsMessageRecipient.setTargets(targets);
smsMessage.setContent(smsMessageContent);
smsMessage.setRecipient(smsMessageRecipient);
//从消息中心注册获取的通道key
smsMessage.setAccessKey(properties.getAccessKey());
//向消息中心发送消息
log.info("订单状态提醒发送短信开始,请求参数:{}", JSON.toJSONString(smsMessage));
Result<Object> result = configuredOpenClient.doAction(new MessageAction(smsMessage));
log.info("订单状态提醒发送短信结束,响应结果:{}", JSON.toJSONString(result));
}catch (Exception e){
log.info("监听到发送订单状态通知短信发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
private String getTargets(int code){
return vehicleWarnUserDao.listAllEnable()
.stream()
.filter(item -> JSONUtil.toList(item.getOrderWarnTypeJson(), Integer.class).contains(code))
.map(VehicleWarnUser::getMobile)
.collect(Collectors.joining(","));
}
public Integer getCode(String orderNo,int orderStatus){
if(Objects.equals(orderStatus,CANCELED.getCode())){
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
//判断是否煤源的订单,煤源的订单需要查询取消原因
if(Objects.equals(orderInfoFeign.getType(), OrderEnum.OrderType.COAL_SOURCE.getCode())){
return CANCEL_REASON_CODE;
}
}
return orderStatus;
}
public String getCancelReason(String orderNo,int code){
if(Objects.equals(code,CANCEL_REASON_CODE)){
log.info("通过订单号查询订单取消原因,订单号:{}",orderNo);
Result<String> orderCancelReason = orderFeign.getOrderCancelReason(orderNo);
log.info("通过订单号查询订单取消原因,订单号:{},响应结果:{}",orderNo,orderCancelReason);
if(orderCancelReason.succeed()){
return orderCancelReason.getData();
}
}
return null;
}
}
......@@ -28,6 +28,7 @@ public class VehicleWarnUser implements HasKey<Integer> {
private Integer id; //id
private String name; //姓名
private String mobile; //手机
private String orderWarnTypeJson; //订单通知配置
private String warnTypeJson; //预警配置
private String lineWarnTypeJson; //线路预警配置
private Integer deleteStatus; //删除状态: 0-否;1-是
......
......@@ -46,6 +46,7 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.VEHICLE_WARN_USER_EXIST);
}
List<Integer> warnTypeList = Arrays.stream(VehicleWarnConfigEnum.WarnType.values())
.map(item -> item.getCode()).collect(Collectors.toList());
List<Integer> lineWarnTypeList = Arrays.stream(LineWarnConfigEnum.WarnType.values())
......@@ -54,6 +55,7 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
VehicleWarnUser vehicleWarnUser = new VehicleWarnUser();
vehicleWarnUser.setName(param.getName());
vehicleWarnUser.setMobile(param.getMobile());
vehicleWarnUser.setOrderWarnTypeJson(JSON.toJSONString(new ArrayList<>()));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setLineWarnTypeJson(JSON.toJSONString(lineWarnTypeList));
vehicleWarnUser.setCreateBy(loginUserInfo.getUserName());
......@@ -83,14 +85,19 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
VehicleWarnUser vehicleWarnUser = vehicleWarnUserDao
.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
List<Integer> orderWarnTypeList = param.getOrderWarnTypeList().stream()
.filter(item -> Objects.equals(item.getEnable(), 1))
.map(VehicleWarnUserVO.WarnTypeItem::getWarnType).collect(Collectors.toList());
List<Integer> warnTypeList = param.getWarnTypeList().stream()
.filter(item -> Objects.equals(item.getEnable(), 1))
.map(item->item.getWarnType()).collect(Collectors.toList());
.map(VehicleWarnUserVO.WarnTypeItem::getWarnType).collect(Collectors.toList());
List<Integer> lineWarnTypeList = param.getLineWarnTypeList().stream()
.filter(item -> Objects.equals(item.getEnable(), 1))
.map(item->item.getWarnType()).collect(Collectors.toList());
.map(VehicleWarnUserVO.WarnTypeItem::getWarnType).collect(Collectors.toList());
vehicleWarnUser.setOrderWarnTypeJson(JSON.toJSONString(orderWarnTypeList));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setLineWarnTypeJson(JSON.toJSONString(lineWarnTypeList));
vehicleWarnUserDao.updateWarnType(vehicleWarnUser);
......
package com.openapi.sdk.util;
import javax.net.ssl.*;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class HttpsUtils {
public HttpsUtils() {
}
public static String doPost(String url, int connentTimeout, int readTimeout) throws Exception {
HttpURLConnection conn = null;
InputStreamReader isReader = null;
StringBuffer result = new StringBuffer();
try {
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setConnectTimeout(connentTimeout);
conn.setReadTimeout(readTimeout);
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
char[] bfchar = new char[2048];
int length = 0;
while((length = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, length);
result.append(temp);
}
} catch (Exception var17) {
System.err.println("发送 POST 请求出现异常!" + var17.getMessage());
throw var17;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var16) {
System.err.println("关闭数据流出错了!\n" + var16.getMessage() + "\n");
throw var16;
}
}
return result.toString();
}
public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws Exception {
InputStreamReader isReader = null;
HttpURLConnection conn = null;
DataOutputStream dos = null;
StringBuffer result = new StringBuffer();
try {
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Length", String.valueOf(param.getBytes("UTF-8").length));
conn.setRequestMethod("POST");
conn.setConnectTimeout(connectTimeout);
conn.setRequestProperty("charset", "UTF-8");
conn.setReadTimeout(readTimeout);
conn.connect();
dos = new DataOutputStream(conn.getOutputStream());
int length = 0;
int totalLength = param.length();
while(length < totalLength) {
int endLength = length + 1024;
if (endLength > totalLength) {
endLength = totalLength;
}
dos.write(param.substring(length, endLength).getBytes("UTF-8"));
length = endLength;
dos.flush();
}
dos.close();
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
char[] bfchar = new char[2048];
int rlength = 0;
while((rlength = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, rlength);
result.append(temp);
}
return result.toString();
} catch (Exception var21) {
System.err.println("发送 POST 请求出现异常!" + var21.getMessage() + "e:" + var21);
throw var21;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var20) {
System.err.println("关闭数据流出错了!\n" + var20.getMessage() + "\n");
throw var20;
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception var19) {
System.err.println("关闭连接出错了!\n" + var19.getMessage() + "\n");
throw var19;
}
}
}
private static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init((KeyManager[])null, trustAllCerts, (SecureRandom)null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager, X509TrustManager {
miTM() {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) {
return true;
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
}
}
......@@ -71,4 +71,22 @@ public enum VehicleWarnConfigEnum {
}
}
@Getter
@AllArgsConstructor
public enum OrderWarnType {
PENDING_QUOTATION(0, "订单待报价"),
ACCEPTED(3, "订单已承接"),
COMPLETED(9, "订单完成"),
FINISHED(12, "订单完结"),
CANCELED(4, "订单取消");
private final Integer code;
private final String msg;
public static Optional<OrderWarnType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(OrderWarnType::getMsg).orElse(null);
}
}
}
......@@ -17,6 +17,8 @@ public class VehicleWarnUserConfigUpdateParam {
@Schema(description = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@Schema(description = "订单预警类型列表")
private List<VehicleWarnUserVO.WarnTypeItem> orderWarnTypeList;
@Schema(description = "运单预警类型列表")
private List<VehicleWarnUserVO.WarnTypeItem> warnTypeList;
@Schema(description = "线路预警类型列表")
......
......@@ -12,6 +12,7 @@ import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Author: aiqinguo
......@@ -45,12 +46,36 @@ public class VehicleWarnUserVO {
@Schema(description = "修改时间", example = "")
private String modifiedTime;
@Schema(description = "订单通知配置列表")
private List<WarnTypeItem> orderWarnTypeItemList;
public List<WarnTypeItem> getOrderWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(orderWarnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
if(Objects.isNull(warnTypeList)){
return list;
}
for (VehicleWarnConfigEnum.OrderWarnType item : VehicleWarnConfigEnum.OrderWarnType.values()) {
if (warnTypeList.contains(item.getCode())){
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 1));
}
else {
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 0));
}
}
return list;
}
@Schema(description = "运单通知配置列表")
private List<WarnTypeItem> warnTypeItemList;
public List<WarnTypeItem> getWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(warnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
if(Objects.isNull(warnTypeList)){
return list;
}
for (VehicleWarnConfigEnum.WarnType item : VehicleWarnConfigEnum.WarnType.values()) {
if (warnTypeList.contains(item.getCode())){
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 1));
......@@ -68,6 +93,9 @@ public class VehicleWarnUserVO {
List<Integer> warnTypeList = JSON.parseArray(lineWarnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
if(Objects.isNull(warnTypeList)){
return list;
}
for (LineWarnConfigEnum.WarnType item : LineWarnConfigEnum.WarnType.values()) {
if (warnTypeList.contains(item.getCode())){
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 1));
......@@ -79,6 +107,9 @@ public class VehicleWarnUserVO {
return list;
}
@JsonIgnore
@Schema(description = "订单通知配置", example = "", hidden = true)
private String orderWarnTypeJson;
@JsonIgnore
@Schema(description = "预警配置", example = "", hidden = true)
private String warnTypeJson;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论