提交 81736e74 authored 作者: jiangwujie's avatar jiangwujie

feature(电子围栏): 短信通知逻辑实现

上级 f4c03ff7
...@@ -35,5 +35,13 @@ public class ClxMessageConfig { ...@@ -35,5 +35,13 @@ public class ClxMessageConfig {
private Integer vehicleWarnChannelId; private Integer vehicleWarnChannelId;
//线路报警短信模板 //线路报警短信模板
private String lineWarnTemplateCode; private String lineWarnTemplateCode;
/**
* 上传装货信息短信模板
*/
private String uploadLoadInfo;
/**
* 提示监装信息短信模板
*/
private String noticeSupervision;
} }
package com.clx.performance.service.impl; package com.clx.performance.service.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.message.AliSmsMessageReq;
import com.clx.order.enums.OrderEnum; import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.ResultEnum; import com.clx.order.enums.ResultEnum;
import com.clx.order.enums.*; import com.clx.order.enums.*;
...@@ -14,6 +17,7 @@ import com.clx.order.vo.pc.carrier.InvoicingCompanyVO; ...@@ -14,6 +17,7 @@ import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO; import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent; import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderChildLoanComponent; import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.config.TencentCloudApiOcrConfig; import com.clx.performance.config.TencentCloudApiOcrConfig;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
...@@ -247,6 +251,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -247,6 +251,10 @@ public class OrderChildServiceImpl implements OrderChildService {
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService; private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
@Autowired @Autowired
private DriverNoticeConfigService driverNoticeConfigService; private DriverNoticeConfigService driverNoticeConfigService;
@Autowired
private ClxMessageOpenapiFeign clxMessageOpenapiFeign;
@Autowired
private ClxMessageConfig messageConfig;
@PostConstruct @PostConstruct
public void init(){ public void init(){
...@@ -3155,8 +3163,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3155,8 +3163,8 @@ public class OrderChildServiceImpl implements OrderChildService {
//查询平台车辆的定位信息 //查询平台车辆的定位信息
Map<String, TruckTraceDTO> truckTraceMap = redisTemplate.opsForHash().entries( Map<String, TruckTraceDTO> truckTraceMap = redisTemplate.opsForHash().entries(
RedisConstants.ZJXL_TRUCK_TRACE_LIST); RedisConstants.ZJXL_TRUCK_TRACE_LIST);
//查询平台到达货源地的订单 //查询平台(到达货源地、已装货)的订单
List<Integer> list = Collections.singletonList(OrderChildEnum.Status.ARRIVE_SEND.getCode()); List<Integer> list = Arrays.asList(OrderChildEnum.Status.ARRIVE_SEND.getCode(), OrderChildEnum.Status.LOAD.getCode());
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.now();
LocalDateTime startTime = endTime.minusMonths(1); LocalDateTime startTime = endTime.minusMonths(1);
List<OrderChild> orderChildList = orderChildDao.listOrderChild(list, startTime, endTime); List<OrderChild> orderChildList = orderChildDao.listOrderChild(list, startTime, endTime);
...@@ -3192,21 +3200,97 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -3192,21 +3200,97 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
//距离 //距离
Integer distance = route.getDistance(); Integer distance = route.getDistance();
//超出货源地x公里范围了,且通知状态为未通知 // 超出货源地+通知触发距离
if (distance >= driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) { if (distance > driverNoticeConfigVO.getNoticeTriggerDistanceMeter()) {
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode()) if (Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode())
&& Objects.equals(child.getExitNoticeStatus(), OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode())
) { ) {
//超出货源地x公里范围了,且通知状态为未通知
// 到达货源地
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())) {
sendLoadSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo());
}
// todo 监装位置
String supervisionAddress = "";
// 已装货
if (Objects.equals(child.getStatus(), OrderChildEnum.Status.LOAD.getCode())) {
sendSupervisionSms(child.getDriverMobile(), child.getTruckNo(), child.getChildNo(), supervisionAddress);
}
// 修改 通知状态 为已通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOTIFIED.getCode());
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode());
} }
// orderChild.getExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTICE.getCode());
} else {
// 未超出货源地+通知触发距离
// 驶入货源地+通知触发距离范围内了
if (Objects.equals(child.getEnterExitSendStatus(), OrderChildEnum.EnterExitSendStatus.DRIVE_OUT.getCode())) {
//驶入货源地x公里范围了,且通知状态为已通知
// 修改 通知状态 为未通知
child.setExitNoticeStatus(OrderChildEnum.ExitNoticeStatus.NOT_NOTIFIED.getCode());
// 状态改为驶入货源地
child.setEnterExitSendStatus(OrderChildEnum.EnterExitSendStatus.DRIVE_IN.getCode());
}
} }
} }
} }
} }
/**
* 发送上传装货信息短信
* ①判断运单是否装车完成,如未完成,发送短信给运单关联司机,
* 【当前车牌号${truckNo},运单${childNo}未上传装车信息,请上传后再驶离货源地,如需帮助请联系客服。】
* truckNo:当前运单关联车牌号
* childNo:运单单号
*
* @param mobile 手机号
* @param truckNo 当前运单关联车牌号
* @param childNo 运单单号
*/
private void sendLoadSms(String mobile, String truckNo, String childNo) {
AliSmsMessageReq req = new AliSmsMessageReq();
// 模板CODE
//SMS_470795021
req.setTemplateCode(messageConfig.getUploadLoadInfo());
JSONObject jsonObject = new JSONObject();
jsonObject.set("truckNo", truckNo);
jsonObject.set("childNo", childNo);
req.setChannelId(messageConfig.getChannelId());
req.setAppId(messageConfig.getAppId().toString());
req.setMobile(mobile);
req.setContent(jsonObject.toString());
req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req);
}
/**
* 发送监装提示信息
* ②判断如运单装车完成,且运单有监装任务(未取消),如该监装任务(任务类型为【监装任务】)中该车辆未完成监装,发送短信给对应司机,
* 【当前车牌号${truckNo},运单${childNo}需要进行现场监装,请您前往${supervision_address}进行配合,如需帮助请联系客服。】
* truckNo:当前运单关联车牌号
* childNo:运单单号
* supervision_address:监装地址(取运单关联的监装【任务地址】)
*
* @param mobile 手机号
* @param truckNo 当前运单关联车牌号
* @param childNo 运单单号
*/
private void sendSupervisionSms(String mobile, String truckNo, String childNo, String supervisionAddress) {
AliSmsMessageReq req = new AliSmsMessageReq();
//模板CODE
//SMS_470740013
req.setTemplateCode(messageConfig.getNoticeSupervision());
JSONObject jsonObject = new JSONObject();
jsonObject.set("truckNo", truckNo);
jsonObject.set("childNo", childNo);
jsonObject.set("supervision_address", supervisionAddress);
req.setChannelId(messageConfig.getChannelId());
req.setAppId(messageConfig.getAppId().toString());
req.setMobile(mobile);
req.setContent(jsonObject.toString());
req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req);
}
private BigDecimal[] getTruckLocation(String truckNo ,BigDecimal longitude, BigDecimal latitude) { private BigDecimal[] getTruckLocation(String truckNo ,BigDecimal longitude, BigDecimal latitude) {
TruckLocationDTO truckLocationDTO = null; TruckLocationDTO truckLocationDTO = null;
try { try {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论