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

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts: # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnChildEnum {
;
@Getter
@AllArgsConstructor
public enum TraceStatus {
DISABLE(0, "禁止"),
ENABLE(1, "启用"),
;
private final Integer code;
private final String msg;
public static Optional<TraceStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(TraceStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum WarnStatus {
DISABLE(0, "禁止"),
ENABLE(1, "启用"),
;
private final Integer code;
private final String msg;
public static Optional<WarnStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnStatus::getMsg).orElse(null);
}
}
}
...@@ -12,13 +12,13 @@ public enum VehicleWarnConfigEnum { ...@@ -12,13 +12,13 @@ public enum VehicleWarnConfigEnum {
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum WarnType { public enum WarnType {
GOTO_SEND_DELAY(1, "运单-到达货源地延误"), ARRIVE_SEND_DELAY(1, "运单-到达货源地延误"),
GOTO_SEND_TIMEOUT(2, "运单-前往货源地超时"), GOTO_SEND_TIMEOUT(2, "运单-前往货源地超时"),
GOTO_RECEIVE_DELAY(3, "运单-到达目的地延误"), ARRIVE_RECEIVE_DELAY(3, "运单-到达目的地延误"),
GOTO_RECEIVE_TIMEOUT(4, "运单-前往目的地超时"), GOTO_RECEIVE_TIMEOUT(4, "运单-前往目的地超时"),
PARK_TIMEOUT(5, "运单-停留超时"), PARK_TIMEOUT(5, "运单-停留超时"),
YES(6, "运单-敏感区停留"), SENSITIVE_AREA_PARK_TIMEOUT(6, "运单-敏感区停留"),
LOAD_TIMEOUT(7, "运单-装车超时"), LOAD_TIMEOUT(7, "运单-装车超时"),
UNLOAD_TIMEOUT(8, "运单-卸车超时"), UNLOAD_TIMEOUT(8, "运单-卸车超时"),
DELAY(9, "运单-运单延误"), DELAY(9, "运单-运单延误"),
......
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnRangEnum {
;
@Getter
@AllArgsConstructor
public enum WarnRange {
CHILD(1, "运单"),
ORDER_GOODS(2, "货单"),
ALL(3, "全部"),
;
private final Integer code;
private final String msg;
public static Optional<WarnRange> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnRange::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum Status {
ENABLE(1, "有效"),
DISABLE(2, "无效"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
}
...@@ -16,6 +16,7 @@ import lombok.ToString; ...@@ -16,6 +16,7 @@ import lombok.ToString;
@ToString @ToString
@NoArgsConstructor @NoArgsConstructor
public class TruckTraceSyncMqParam { public class TruckTraceSyncMqParam {
private String childNo; //运单编号
private String truckNo; //车牌号 private String truckNo; //车牌号
private String beginTime; //开始时间 private String beginTime; //开始时间
private String endTime; //结束时间 private String endTime; //结束时间
......
package com.clx.performance.param.mq.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class VehicleWarnChildAddMqParam {
private String childNo; //运单编号
}
package com.clx.performance.param.mq.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class VehicleWarnTruckWarnMqParam {
private String childNo; //运单编号
}
package com.clx.performance.param.mq.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 通知
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class VehicleWarnTruckWarnNoticeMqParam {
private Integer infoId; //id
}
...@@ -23,6 +23,11 @@ public class PageVehicleWarnInfoParam extends PageParam { ...@@ -23,6 +23,11 @@ public class PageVehicleWarnInfoParam extends PageParam {
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1") @ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status; private Integer status;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty(value = "开始时间", example = "") @ApiModelProperty(value = "开始时间", example = "")
private String beginTime; private String beginTime;
@ApiModelProperty(value = "结束时间", example = "") @ApiModelProperty(value = "结束时间", example = "")
......
package com.clx.performance.vo.pc.vehiclewarn; package com.clx.performance.vo.pc.vehiclewarn;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum; import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum; import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import org.apache.commons.lang3.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Objects;
/** /**
* @Author: aiqinguo * @Author: aiqinguo
...@@ -77,12 +79,27 @@ public class VehicleWarnInfoVO { ...@@ -77,12 +79,27 @@ public class VehicleWarnInfoVO {
private String takeTime; private String takeTime;
@ApiModelProperty(value = "预警时间", example = "") @ApiModelProperty(value = "预警时间", example = "")
private String warnTime; private String warnTime;
@ApiModelProperty(value = "预警暂停时间", example = "")
private String suspendTime;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1") @ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status; private Integer status;
public Integer getStatus() {
if (Objects.equals(status, VehicleWarnInfoEnum.Status.RESOLVE.getCode())) {return VehicleWarnInfoEnum.Status.RESOLVE.getCode();}
if (StringUtils.isNotBlank(suspendTime)){
if (LocalDateTimeUtil.parse(suspendTime).isBefore(LocalDateTime.now())) {
return VehicleWarnInfoEnum.Status.INIT.getCode();
} else {
return VehicleWarnInfoEnum.Status.SUSPEND.getCode();
}
}
return VehicleWarnInfoEnum.Status.INIT.getCode();
}
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "待处理") @ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "待处理")
private String statusMsg; private String statusMsg;
public String getStatusMsg() { public String getStatusMsg() {
return VehicleWarnInfoEnum.Status.getMsgByCode(status); return VehicleWarnInfoEnum.Status.getMsgByCode(getStatus());
} }
@ApiModelProperty(value = "创建人", example = "") @ApiModelProperty(value = "创建人", example = "")
private String createBy; private String createBy;
......
...@@ -13,6 +13,7 @@ import com.clx.performance.param.app.SendMobileCaptchaParam; ...@@ -13,6 +13,7 @@ import com.clx.performance.param.app.SendMobileCaptchaParam;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -80,9 +81,8 @@ public class SendMessageMachineCheckComponent { ...@@ -80,9 +81,8 @@ public class SendMessageMachineCheckComponent {
//response的code枚举:100验签通过,900验签失败 //response的code枚举:100验签通过,900验签失败
AuthenticateSigResponse response = client.getAcsResponse(request); AuthenticateSigResponse response = client.getAcsResponse(request);
resultCode = response.getCode(); resultCode = response.getCode();
// TODO
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return resultCode; return resultCode;
} }
...@@ -113,7 +113,7 @@ public class SendMessageMachineCheckComponent { ...@@ -113,7 +113,7 @@ public class SendMessageMachineCheckComponent {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
} }
} }
......
...@@ -29,4 +29,8 @@ public class ClxMessageConfig { ...@@ -29,4 +29,8 @@ public class ClxMessageConfig {
//转账支付-还款单短信模板 //转账支付-还款单短信模板
private String repaymentTemplateCode; private String repaymentTemplateCode;
//车辆报警短信模板
private String vehicleWarnTemplateCode;
//车辆报警渠道id
private Integer vehicleWarnChannelId;
} }
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: aiqingguo
* @Description: 货款往来明细 MQ
* @Date: 2023-10-12 16:27:30
* @Version: 1.0
*/
@Configuration
public class RabbitVehicleWarnConfig {
@Bean
public DirectExchange vehicleWarnDefaultExchange() {
return new DirectExchange(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue vehicleWarnDefaultDelayQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-message-ttl", 15 * 60 * 1000);
params.put("x-max-length", 5000000);
params.put("x-dead-letter-exchange", RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyVehicleWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyVehicleWarnConstants.DEFAULT_DELAY_QUEUE, true, false, false, params);
}
@Bean
public Binding vehicleWarnDefaultDelayQueueBinding() {
return BindingBuilder.bind(vehicleWarnDefaultDelayQueue()).to(vehicleWarnDefaultExchange()).with(RabbitKeyVehicleWarnConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue vehicleWarnDefaultDeadQueue() {
return new Queue(RabbitKeyVehicleWarnConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding vehicleWarnDefaultDeadQueueBinding() {
return BindingBuilder.bind(vehicleWarnDefaultDeadQueue()).to(vehicleWarnDefaultExchange()).with(RabbitKeyVehicleWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 新增
*/
@Bean
public Queue vehicleWarnChildAddQueue() {
return new Queue(RabbitKeyVehicleWarnConstants.ORDER_CHILD_ADD_QUEUE);
}
@Bean
public Binding vehicleWarnChildAddQueueBinding() {
return BindingBuilder.bind(vehicleWarnChildAddQueue()).to(vehicleWarnDefaultExchange()).with(RabbitKeyVehicleWarnConstants.ORDER_CHILD_ADD_ROUTING_KEY);
}
/**
* 车辆预警
*/
@Bean
public Queue vehicleWarnTruckWarnQueue() {
return new Queue(RabbitKeyVehicleWarnConstants.TRUCK_WARN_QUEUE);
}
@Bean
public Binding vehicleWarnTruckWarnQueueBinding() {
return BindingBuilder.bind(vehicleWarnTruckWarnQueue()).to(vehicleWarnDefaultExchange()).with(RabbitKeyVehicleWarnConstants.TRUCK_WARN_ROUTING_KEY);
}
/**
* 车辆预警
*/
@Bean
public Queue vehicleWarnNoticeQueue() {
return new Queue(RabbitKeyVehicleWarnConstants.TRUCK_WARN_NOTICE_QUEUE);
}
@Bean
public Binding vehicleWarnNoticeQueueBinding() {
return BindingBuilder.bind(vehicleWarnNoticeQueue()).to(vehicleWarnDefaultExchange()).with(RabbitKeyVehicleWarnConstants.TRUCK_WARN_NOTICE_ROUTING_KEY);
}
}
package com.clx.performance.constant;
/**
* @Author: aiqingguo
* @Description: 车辆预警-mq
* @Date: 2023-10-19 15:10:10
* @Version: 1.0
*/
public class RabbitKeyVehicleWarnConstants {
private static final String PREFIX = "clx-performance.vehicleWarn.";
private static final String EXCHANGE = ".exchange";
private static final String QUEUE = ".queue";
private static final String QUEUE_ROUTING_KEY = ".routing.key";
private static final String DELAY_QUEUE = ".delay.queue";
private static final String DELAY_ROUTING_KEY = ".delay.routing.key";
private static final String DEAD_QUEUE = ".dead.queue";
private static final String DEAD_ROUTING_KEY = ".dead.routing.key";
private RabbitKeyVehicleWarnConstants() {
}
/**
* 缺省交换机
*/
public static final String DEFAULT_EXCHANGE = PREFIX +"default"+EXCHANGE;
/**
* 缺省延迟队列
*/
public static final String DEFAULT_DELAY_QUEUE = PREFIX +"default"+DELAY_QUEUE;
public static final String DEFAULT_DELAY_ROUTING_KEY = PREFIX +"default"+DELAY_ROUTING_KEY;
public static final String DEFAULT_DEAD_QUEUE = PREFIX +"default"+DEAD_QUEUE;
public static final String DEFAULT_DEAD_ROUTING_KEY = PREFIX +"default"+DEAD_ROUTING_KEY;
/**
* 新增
*/
public static final String ORDER_CHILD_ADD_QUEUE = PREFIX +"orderChild.add"+QUEUE;
public static final String ORDER_CHILD_ADD_ROUTING_KEY = PREFIX +"orderChild.add"+QUEUE_ROUTING_KEY;
/**
* 车辆预警
*/
public static final String TRUCK_WARN_QUEUE = PREFIX +"truck.warn"+QUEUE;
public static final String TRUCK_WARN_ROUTING_KEY = PREFIX +"truck.warn"+QUEUE_ROUTING_KEY;
/**
* 车辆预警通知
*/
public static final String TRUCK_WARN_NOTICE_QUEUE = PREFIX +"truckWarn.notice"+QUEUE;
public static final String TRUCK_WARN_NOTICE_ROUTING_KEY = PREFIX +"truckWarn.notice"+QUEUE_ROUTING_KEY;
}
package com.clx.performance.controller.temp;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqHandlerService;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Author: aiqingguo
* @Description: 临时接口
* @Date: 2023-8-21 12:10:16
* @Version: 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/temp/vehicleWarn")
public class TempVehicleWarnController {
@Autowired
private VehicleWarnMqHandlerService vehicleWarnMqHandlerService;
@ApiOperation(value = "发送预警短信", notes = "<br>By:艾庆国")
@PostMapping("/sendSms")
public Result sendSms(List<String> mobileList, String warnName, String truckNo, String childNo) {
vehicleWarnMqHandlerService.sendSms(mobileList, warnName, truckNo, childNo);
return Result.ok();
}
@ApiOperation(value = "发送预警外呼", notes = "<br>By:艾庆国")
@PostMapping("/sendClink")
public Result sendClink(List<String> mobileList, String warnName, String truckNo, String childNo) {
vehicleWarnMqHandlerService.sendClink(mobileList, warnName, truckNo, childNo);
return Result.ok();
}
}
...@@ -166,4 +166,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -166,4 +166,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Page<OrderChild> getMonthAgoByUserNo(Long userNo, LocalDateTime monthAgo, PageParam param); Page<OrderChild> getMonthAgoByUserNo(Long userNo, LocalDateTime monthAgo, PageParam param);
IPage<OrderChild> pageOwnerOrderChildList(PageOwnerOrderChildListParam param); IPage<OrderChild> pageOwnerOrderChildList(PageOwnerOrderChildListParam param);
Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
} }
...@@ -538,4 +538,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -538,4 +538,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
query.orderByDesc(OrderChild :: getCreateTime); query.orderByDesc(OrderChild :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
@Override
public Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime) {
return baseMapper.loadTimeAvg(sendAddressId,receiveAddressId,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
}
@Override
public Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId, Integer sendSystemAddressId, Integer receiveSystemAddressId, String beginTime) {
return baseMapper.unloadTimeAvg(sendAddressId,receiveAddressId,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
}
} }
package com.clx.performance.dao.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnChildEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnChildMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper, VehicleWarnChild, Integer> implements VehicleWarnChildDao {
@Override
public boolean updateTraceTime(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getTraceStatus, item.getTraceStatus())
.set(VehicleWarnChild::getTraceTime, item.getTraceTime())
);
}
@Override
public boolean updateReceiveAddressDistance(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getReceiveAddressDistance, item.getReceiveAddressDistance())
);
}
@Override
public Optional<VehicleWarnChild> findByChildNo(String childNo) {
return Optional.of(childNo)
.map(item -> lQrWrapper().eq(VehicleWarnChild::getChildNo, item))
.map(super::getOne);
}
@Override
public List<VehicleWarnChild> ListTruckNoOfTrace() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.TraceStatus.ENABLE.getCode()));
}
@Override
public List<VehicleWarnChild> ListTruckNoOfWarn() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode()));
}
}
...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional; ...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public class VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> implements VehicleWarnConfigDao { public class VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> implements VehicleWarnConfigDao {
...@@ -69,6 +71,11 @@ public class VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMappe ...@@ -69,6 +71,11 @@ public class VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMappe
.map(super::getOne); .map(super::getOne);
} }
@Override
public List<VehicleWarnConfig> listByWarnType(Integer warnType) {
return list(lQrWrapper().eq(VehicleWarnConfig::getWarnType, warnType));
}
@Override @Override
public IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param) { public IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param) {
Page<VehicleWarnConfig> page = Page.of(param.getPage(), param.getPageSize()); Page<VehicleWarnConfig> page = Page.of(param.getPage(), param.getPageSize());
......
...@@ -3,6 +3,8 @@ package com.clx.performance.dao.impl.vehiclewarn; ...@@ -3,6 +3,8 @@ package com.clx.performance.dao.impl.vehiclewarn;
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.performance.dao.vehiclewarn.VehicleWarnInfoDao; import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnInfoMapper; import com.clx.performance.mapper.vehiclewarn.VehicleWarnInfoMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo; import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam; import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
...@@ -10,6 +12,10 @@ import com.msl.common.base.Optional; ...@@ -10,6 +12,10 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Repository @Repository
public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> implements VehicleWarnInfoDao { public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> implements VehicleWarnInfoDao {
...@@ -21,6 +27,49 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V ...@@ -21,6 +27,49 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
); );
} }
@Override
public boolean batchUpdateStatus(List<Integer> idList, Integer status) {
return update(lUdWrapper()
.in(VehicleWarnInfo::getId, idList)
.set(VehicleWarnInfo::getStatus, status)
);
}
@Override
public boolean updateSuspendTime(VehicleWarnInfo item, Integer warnRang) {
if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.CHILD.getCode())) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getId, item.getId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
else if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.eq(VehicleWarnInfo::getOrderGoodsNo, item.getOrderGoodsNo())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
else {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
}
@Override
public boolean updateWarnTime(VehicleWarnInfo item) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getId, item.getId())
.set(VehicleWarnInfo::getWarnTime, item.getWarnTime())
);
}
@Override @Override
public Optional<VehicleWarnInfo> findById(Integer id) { public Optional<VehicleWarnInfo> findById(Integer id) {
return Optional.of(id) return Optional.of(id)
...@@ -31,6 +80,25 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V ...@@ -31,6 +80,25 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
.map(super::getOne); .map(super::getOne);
} }
@Override
public Optional<VehicleWarnInfo> findByChildNoAndWarnConfigId(String childNo, Integer warnConfigId) {
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(VehicleWarnInfo::getChildNo, childNo)
.eq(VehicleWarnInfo::getWarnConfigId, warnConfigId)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<VehicleWarnInfo> listSuspendTimeout() {
return list(lQrWrapper()
.eq(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.SUSPEND.getCode())
.lt(VehicleWarnInfo::getSuspendTime, LocalDateTime.now())
);
}
@Override @Override
public IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param) { public IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param) {
......
package com.clx.performance.dao.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public class VehicleWarnRangeDaoImpl extends BaseDaoImpl<VehicleWarnRangMapper, VehicleWarnRang, Integer> implements VehicleWarnRangeDao {
@Override
public List<VehicleWarnRang> ListByWarnConfigId(Integer warnConfigId) {
return list(lQrWrapper()
.eq(VehicleWarnRang::getWarnConfigId, warnConfigId)
.eq(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.ENABLE.getCode())
.le(VehicleWarnRang::getWarnEndTime, LocalDateTime.now())
.orderByDesc(VehicleWarnRang::getId)
);
}
}
...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional; ...@@ -11,6 +11,8 @@ import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, VehicleWarnUser, Integer> implements VehicleWarnUserDao { public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, VehicleWarnUser, Integer> implements VehicleWarnUserDao {
...@@ -61,6 +63,13 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V ...@@ -61,6 +63,13 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
.map(super::getOne); .map(super::getOne);
} }
@Override
public List<VehicleWarnUser> listAllEnable() {
return list(lQrWrapper()
.eq(VehicleWarnUser::getDeleteStatus, VehicleWarnUserEnum.DeleteStatus.NO.getCode())
);
}
@Override @Override
public IPage<VehicleWarnUser> pageByParam(PageVehicleWarnUserParam param) { public IPage<VehicleWarnUser> pageByParam(PageVehicleWarnUserParam param) {
Page<VehicleWarnUser> page = Page.of(param.getPage(), param.getPageSize()); Page<VehicleWarnUser> page = Page.of(param.getPage(), param.getPageSize());
......
package com.clx.performance.dao.vehiclewarn;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnChildMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnChildDao extends BaseDao<VehicleWarnChildMapper, VehicleWarnChild, Integer> {
boolean updateTraceTime(VehicleWarnChild item);
boolean updateReceiveAddressDistance(VehicleWarnChild item);
Optional<VehicleWarnChild> findByChildNo(String childNo);
List<VehicleWarnChild> ListTruckNoOfTrace();
List<VehicleWarnChild> ListTruckNoOfWarn();
}
...@@ -7,6 +7,8 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam; ...@@ -7,6 +7,8 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnConfigDao extends BaseDao<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> { public interface VehicleWarnConfigDao extends BaseDao<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> {
boolean updateConfig(VehicleWarnConfig item); boolean updateConfig(VehicleWarnConfig item);
...@@ -15,6 +17,7 @@ public interface VehicleWarnConfigDao extends BaseDao<VehicleWarnConfigMapper, V ...@@ -15,6 +17,7 @@ public interface VehicleWarnConfigDao extends BaseDao<VehicleWarnConfigMapper, V
Optional<VehicleWarnConfig> findById(Integer id); Optional<VehicleWarnConfig> findById(Integer id);
Optional<VehicleWarnConfig> findByName(String name); Optional<VehicleWarnConfig> findByName(String name);
List<VehicleWarnConfig> listByWarnType(Integer warnType);
IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param); IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param);
......
...@@ -7,11 +7,21 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam; ...@@ -7,11 +7,21 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnInfoDao extends BaseDao<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> { public interface VehicleWarnInfoDao extends BaseDao<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> {
boolean updateStatus(VehicleWarnInfo item); boolean updateStatus(VehicleWarnInfo item);
boolean batchUpdateStatus(List<Integer> idList, Integer status);
boolean updateSuspendTime(VehicleWarnInfo item, Integer warnRang);
boolean updateWarnTime(VehicleWarnInfo item);
Optional<VehicleWarnInfo> findById(Integer id); Optional<VehicleWarnInfo> findById(Integer id);
Optional<VehicleWarnInfo> findByChildNoAndWarnConfigId(String childNo, Integer warnConfigId);
List<VehicleWarnInfo> listSuspendTimeout();
IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param); IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param);
......
package com.clx.performance.dao.vehiclewarn;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnRangeDao extends BaseDao<VehicleWarnRangMapper, VehicleWarnRang, Integer> {
List<VehicleWarnRang> ListByWarnConfigId(Integer warnConfigId);
}
...@@ -7,6 +7,8 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnUserParam; ...@@ -7,6 +7,8 @@ import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnUserParam;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, VehicleWarnUser, Integer> { public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, VehicleWarnUser, Integer> {
boolean updateUser(VehicleWarnUser item); boolean updateUser(VehicleWarnUser item);
...@@ -16,6 +18,8 @@ public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, Vehic ...@@ -16,6 +18,8 @@ public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, Vehic
Optional<VehicleWarnUser> findById(Integer id); Optional<VehicleWarnUser> findById(Integer id);
Optional<VehicleWarnUser> findByMobile(String mobile); Optional<VehicleWarnUser> findByMobile(String mobile);
List<VehicleWarnUser> listAllEnable();
IPage<VehicleWarnUser> pageByParam(PageVehicleWarnUserParam param); IPage<VehicleWarnUser> pageByParam(PageVehicleWarnUserParam param);
} }
package com.clx.performance.dto.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnCommonInfoDTO {
BigDecimal[] currentPosition; //当前位置
Integer sendAddressDistance; //距货源地址距离
Integer receiveAddressDistance; //距目的地址距离
Integer sendAddressTime; //距货源地址时间
Integer receiveAddressTime; //距目的地址时间
Boolean suspendStatus; //是否暂停 0:未暂停 1:暂停
private LocalDateTime lastArriveSendTime; //最晚到达货源地时间
private LocalDateTime lastArriveReceiveTime; //最晚到达目的地时间
LocalDateTime currentTime; //当前时间
private LocalDateTime transportEndTime; //拉运结束时间
}
package com.clx.performance.encryption.oldmsl; package com.clx.performance.encryption.oldmsl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.bouncycastle.util.encoders.Base64; import org.bouncycastle.util.encoders.Base64;
import javax.crypto.Cipher; import javax.crypto.Cipher;
...@@ -18,6 +20,7 @@ import java.util.Map; ...@@ -18,6 +20,7 @@ import java.util.Map;
* @date 2017年4月13日 * @date 2017年4月13日
* @description * @description
*/ */
@Slf4j
public class RSACoder { public class RSACoder {
public static final String KEY_ALGORITHM = "RSA"; public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
...@@ -67,7 +70,7 @@ public class RSACoder { ...@@ -67,7 +70,7 @@ public class RSACoder {
byte[] dataBytes = Base64.encode(signature.sign()); byte[] dataBytes = Base64.encode(signature.sign());
ret = new String(dataBytes); ret = new String(dataBytes);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
...@@ -118,7 +121,7 @@ public class RSACoder { ...@@ -118,7 +121,7 @@ public class RSACoder {
// 验证签名是否正常 // 验证签名是否正常
ret = signature.verify(Base64.decode(sign)); ret = signature.verify(Base64.decode(sign));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
...@@ -181,7 +184,7 @@ public class RSACoder { ...@@ -181,7 +184,7 @@ public class RSACoder {
cipher.init(Cipher.DECRYPT_MODE, privateKey); cipher.init(Cipher.DECRYPT_MODE, privateKey);
ret = cipher.doFinal(data); ret = cipher.doFinal(data);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
...@@ -259,7 +262,7 @@ public class RSACoder { ...@@ -259,7 +262,7 @@ public class RSACoder {
cipher.init(Cipher.DECRYPT_MODE, publicKey); cipher.init(Cipher.DECRYPT_MODE, publicKey);
ret = cipher.doFinal(data); ret = cipher.doFinal(data);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
...@@ -321,7 +324,7 @@ public class RSACoder { ...@@ -321,7 +324,7 @@ public class RSACoder {
cipher.init(Cipher.ENCRYPT_MODE, publicKey); cipher.init(Cipher.ENCRYPT_MODE, publicKey);
ret = cipher.doFinal(data); ret = cipher.doFinal(data);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
...@@ -398,7 +401,7 @@ public class RSACoder { ...@@ -398,7 +401,7 @@ public class RSACoder {
cipher.init(Cipher.ENCRYPT_MODE, privateKey); cipher.init(Cipher.ENCRYPT_MODE, privateKey);
ret = cipher.doFinal(data); ret = cipher.doFinal(data);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
return ret; return ret;
} }
......
...@@ -46,7 +46,7 @@ public class NetworkDriverAccountSyncJob { ...@@ -46,7 +46,7 @@ public class NetworkDriverAccountSyncJob {
param.setMobile(vo.getMobile()); param.setMobile(vo.getMobile());
try { try {
Thread.sleep(2000L); Thread.sleep(2000L);
} catch (InterruptedException e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
networkDriverAccountService.createNetworkDriverAccount(param); networkDriverAccountService.createNetworkDriverAccount(param);
......
...@@ -102,28 +102,4 @@ public class TruckTraceJob { ...@@ -102,28 +102,4 @@ public class TruckTraceJob {
} }
} }
/**
* 车辆轨迹同步
*/
@XxlJob("truckTraceSync")
public void truckTraceSync() {
try {
List<String> truckNoList = new ArrayList<>();
log.info("车辆轨迹同步, size:{}", truckNoList.size());
for (String truckNo : truckNoList) {
LocalDateTime now = LocalDateTime.now();
// 发送mq (同步车辆轨迹)
truckTraceMqService.truckTracSync(truckNo, LocalDateTimeUtils.formatTime(now.minusSeconds(600)), LocalDateTimeUtils.formatTime(now));
}
} catch (Exception e) {
log.warn("车辆轨迹同步失败,异常原因:{}",e);
JobLog.error("车辆轨迹同步失败,异常原因=====================", e);
}
}
} }
package com.clx.performance.job.trace;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.service.trace.TruckTraceMqService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class VehicleTraceJob {
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private TruckTraceMqService truckTraceMqService;
/**
* 车辆轨迹同步
*/
@XxlJob("truckTraceSync")
public void truckTraceSync() {
try {
List<VehicleWarnChild> list = vehicleWarnChildDao.ListTruckNoOfTrace();
log.info("车辆轨迹同步, size:{}", list.size());
for (VehicleWarnChild item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (同步车辆轨迹)
truckTraceMqService.truckTracSync(item.getTruckNo(), item.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(now));
}
} catch (Exception e) {
log.warn("车辆轨迹同步失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("车辆轨迹同步失败,异常原因=====================", e);
}
}
}
package com.clx.performance.job.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
public class VehicleWarnJob {
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
/**
* 车辆监控预警
*/
@XxlJob("vehicleWarnTruckWarn")
public void vehicleWarnTruckWarn() {
try {
List<VehicleWarnChild> list = vehicleWarnChildDao.ListTruckNoOfWarn();
log.info("车辆监控预警, size:{}", list.size());
for (VehicleWarnChild item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (车辆预警)
vehicleWarnMqService.truckWarn(item.getChildNo());
}
} catch (Exception e) {
log.warn("车辆监控预警失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("车辆监控预警失败,异常原因=====================", e);
}
}
// /**
// * 预警暂停取消
// */
// @XxlJob("vehicleWarnSuspendCancel")
// public void vehicleWarnSuspendCancel() {
//
// try {
//
// List<VehicleWarnInfo> list = vehicleWarnInfoDao.listSuspendTimeout();
// log.info("预警暂停取消, size:{}", list.size());
//
// vehicleWarnInfoDao.batchUpdateStatus(list.stream().map(item->item.getId()).collect(Collectors.toList()), VehicleWarnInfoEnum.Status.INIT.getCode());
//
// } catch (Exception e) {
// log.warn("预警暂停取消失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
// JobLog.error("预警暂停取消失败,异常原因=====================", e);
// }
// }
}
...@@ -7,6 +7,7 @@ import com.clx.performance.model.OrderGoods; ...@@ -7,6 +7,7 @@ import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.IntegralMqService; import com.clx.performance.service.IntegralMqService;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -47,7 +48,7 @@ public class RabbitOrderGoodsStatusOnHandler { ...@@ -47,7 +48,7 @@ public class RabbitOrderGoodsStatusOnHandler {
orderGoods.getSendAddressId(), orderGoods.getSendAddressShorter(), orderGoods.getSendAddressId(), orderGoods.getSendAddressShorter(),
orderGoods.getReceiveAddressId(), orderGoods.getReceiveAddressShorter()); orderGoods.getReceiveAddressId(), orderGoods.getReceiveAddressShorter());
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
} }
......
package com.clx.performance.listener.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnChildAddMqParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单新增 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class VehicleWarnChildAddListener {
@Autowired
private VehicleWarnMqHandlerService vehicleWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyVehicleWarnConstants.ORDER_CHILD_ADD_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-运单新增, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<VehicleWarnChildAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("车辆预警-运单新增 失败",e);
}
}
private void process(VehicleWarnChildAddMqParam mq){
vehicleWarnMqHandlerService.orderChildAdd(mq);
}
}
package com.clx.performance.listener.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 车辆预警 mq
* @Date: 2023-10-20 16:14:30
* @Version: 1.0
*/
@Slf4j
@Component
public class VehicleWarnDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeySettlementConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-延迟, message:{}", message);
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<MqDelay>>(){}).getData());
}catch (Exception e){
log.info("车辆预警-延迟 失败",e);
}
}
void process(MqDelay mq){
Message message = MessageBuilder.withBody(JSON.toJSONString(mq.getData()).getBytes()).build();
rabbitTemplate.send(mq.getExchange(), mq.getRouterKey(), message);
}
}
package com.clx.performance.listener.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnMqParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单新增 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class VehicleWarnTruckWarnListener {
@Autowired
private VehicleWarnMqHandlerService vehicleWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyVehicleWarnConstants.TRUCK_WARN_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-运单预警, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<VehicleWarnTruckWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("车辆预警-运单预警 失败",e);
}
}
private void process(VehicleWarnTruckWarnMqParam mq){
vehicleWarnMqHandlerService.truckWarn(mq);
}
}
package com.clx.performance.listener.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnNoticeMqParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 运单预警通知 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class VehicleWarnTruckWarnNoticeListener {
@Autowired
private VehicleWarnMqHandlerService vehicleWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyVehicleWarnConstants.TRUCK_WARN_NOTICE_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-运单预警通知, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<VehicleWarnTruckWarnNoticeMqParam>>(){}).getData());
}catch (Exception e){
log.info("车辆预警-运单预警通知 失败",e);
}
}
private void process(VehicleWarnTruckWarnNoticeMqParam mq){
vehicleWarnMqHandlerService.truckWarnNotice(mq);
}
}
...@@ -22,6 +22,7 @@ import java.util.List; ...@@ -22,6 +22,7 @@ import java.util.List;
@Mapper @Mapper
public interface OrderChildMapper extends BaseMapper<OrderChild> { public interface OrderChildMapper extends BaseMapper<OrderChild> {
String TABLE = "order_child";
/** /**
* 司机运单列表 * 司机运单列表
...@@ -85,4 +86,32 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -85,4 +86,32 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "getLossNet") @SelectProvider(type = OrderChildSqlProvider.class, method = "getLossNet")
List<Double> getLossNet(@Param("param") OrderChildReportParam param); List<Double> getLossNet(@Param("param") OrderChildReportParam param);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,load_time,arrive_send_time)) from " + TABLE +
" where load_time is not null and and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
" <if test = 'sendSystemAddressId == null'>and send_address_id = #{sendAddressId} </if> " +
" <if test = 'receiveSystemAddressId == null'>and receive_address_id = #{receiveAddressId} </if> " +
" </script>")
Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,unload_time,arrive_receive_time)) from " + TABLE +
" where unload_time is not null and and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
" <if test = 'sendSystemAddressId == null'>and send_address_id = #{sendAddressId} </if> " +
" <if test = 'receiveSystemAddressId == null'>and receive_address_id = #{receiveAddressId} </if> " +
" </script>")
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
} }
\ No newline at end of file
package com.clx.performance.mapper.vehiclewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VehicleWarnChildMapper extends BaseMapper<VehicleWarnChild> {
}
\ No newline at end of file
package com.clx.performance.mapper.vehiclewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VehicleWarnRangMapper extends BaseMapper<VehicleWarnRang> {
}
\ No newline at end of file
package com.clx.performance.model.vehiclewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 车辆预警运单表
* @Date: 2024/04/28 14:36:58
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnChild implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String childNo; //运单编号
private String orderGoodsNo; //货单编号
private String truckNo; //车牌号
private Long driverUserNo; //司机用户编号
private BigDecimal sendLongitude; //发货地址经度
private BigDecimal sendLatitude; //发货地址纬度
private BigDecimal receiveLongitude; //收货地址经度
private BigDecimal receiveLatitude; //收货地址纬度
private Integer arriveSendExpectTime; //预计到达货源地时间 (min)
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
private LocalDateTime takeTime; //接单时间
private Integer receiveAddressDistance; //距离目的地距离(m)
private LocalDateTime traceTime; //轨迹更新时间
private Integer traceStatus; //轨迹更新状态:0禁止 1启用
private Integer wanStatus; //预警更新状态:0禁用 1启用
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
\ No newline at end of file
...@@ -30,6 +30,7 @@ public class VehicleWarnInfo implements HasKey<Integer> { ...@@ -30,6 +30,7 @@ public class VehicleWarnInfo implements HasKey<Integer> {
private String warnName; //预警名称 private String warnName; //预警名称
private Integer warnType; //预警类型 private Integer warnType; //预警类型
private Integer warnLevel; //预警级别 private Integer warnLevel; //预警级别
private String orderGoodsNo; //货单编号
private String childNo; //运单编号 private String childNo; //运单编号
private Integer sendAddressId; //发货地址id private Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址 private String sendAddress; //发货地址
...@@ -42,6 +43,7 @@ public class VehicleWarnInfo implements HasKey<Integer> { ...@@ -42,6 +43,7 @@ public class VehicleWarnInfo implements HasKey<Integer> {
private String driverName; //司机姓名 private String driverName; //司机姓名
private String driverMobile; //司机手机号 private String driverMobile; //司机手机号
private LocalDateTime takeTime; //接单时间 private LocalDateTime takeTime; //接单时间
private LocalDateTime suspendTime; //预警暂停时间
private LocalDateTime warnTime; //预警时间 private LocalDateTime warnTime; //预警时间
private Integer status; //处理状态:1待处理 2已处理 3暂停预警 private Integer status; //处理状态:1待处理 2已处理 3暂停预警
private String createBy; //创建人 private String createBy; //创建人
......
package com.clx.performance.model.vehiclewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 预警范围
* @Date: 2024/05/06 15:21:27
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnRang implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private Integer warnRang; //预警屏蔽范围:1运单 2货单 3全部
private String orderNo; //货单编号
private String childNo; //运单编号
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private Integer status; //状态:1有效 2无效
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ import com.clx.performance.model.OrderChild; ...@@ -4,6 +4,7 @@ import com.clx.performance.model.OrderChild;
public interface OrderChildPostService { public interface OrderChildPostService {
void orderChildAdd(String childNo);
void orderChildArriveReceiveAddress(OrderChild orderChild); void orderChildArriveReceiveAddress(OrderChild orderChild);
void orderChildDriverConfirm(OrderChild orderChild); void orderChildDriverConfirm(OrderChild orderChild);
......
...@@ -146,7 +146,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer ...@@ -146,7 +146,7 @@ public class OrderChildPoundAuditServiceImpl implements OrderChildPoundAuditSer
orderChildPoundLogDao.saveEntity(poundLog); orderChildPoundLogDao.saveEntity(poundLog);
//保存运单日志数据 //保存运单日志数据
orderChildLogService.saveOrderChildLog(param.getChildNo(),type,OrderChildLogEnum.Type.getByCode(type).get().getMsg(), orderChildLogService.saveOrderChildLog(param.getChildNo(),type,OrderChildLogEnum.Type.getByCode(type).isPresent() ? OrderChildLogEnum.Type.getByCode(type).get().getMsg() :"",
OrderChildLogEnum.CreateType.PLATFORM.getCode(), loginUserInfo.getUserNo(),loginUserInfo.getUserName()); OrderChildLogEnum.CreateType.PLATFORM.getCode(), loginUserInfo.getUserNo(),loginUserInfo.getUserName());
} }
......
...@@ -65,6 +65,7 @@ import com.msl.user.utils.TokenUtil; ...@@ -65,6 +65,7 @@ import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
...@@ -213,7 +214,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -213,7 +214,7 @@ public class OrderChildServiceImpl implements OrderChildService {
try { try {
flag = lock.tryLock(1, 3, TimeUnit.SECONDS); flag = lock.tryLock(1, 3, TimeUnit.SECONDS);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, e.getMessage()); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, e.getMessage());
} }
if (!flag) { if (!flag) {
...@@ -240,7 +241,7 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -240,7 +241,7 @@ public class OrderChildServiceImpl implements OrderChildService {
} catch (ServiceSystemException e) { } catch (ServiceSystemException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, e.getMessage()); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, e.getMessage());
} finally { } finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) { if (lock.isLocked() && lock.isHeldByCurrentThread()) {
...@@ -432,8 +433,8 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -432,8 +433,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(), orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(),
OrderChildLogEnum.Type.CREATED.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName()); OrderChildLogEnum.Type.CREATED.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
// 发送mq 新增运单 // 司机接单后置逻辑
orderChildMqService.orderChildAdd(orderChild.getChildNo()); orderChildPostService.orderChildAdd(orderChild.getChildNo());
SaveOrderChildVO result = new SaveOrderChildVO(); SaveOrderChildVO result = new SaveOrderChildVO();
result.setChildNo(childNo); result.setChildNo(childNo);
......
...@@ -9,6 +9,7 @@ import com.clx.performance.service.IntegralMqService; ...@@ -9,6 +9,7 @@ import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildMqService; import com.clx.performance.service.OrderChildMqService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService; import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -26,6 +27,18 @@ public class OrderChildPostServiceImpl implements OrderChildPostService { ...@@ -26,6 +27,18 @@ public class OrderChildPostServiceImpl implements OrderChildPostService {
@Autowired @Autowired
private BreakContractDriverRecordService breakContractDriverRecordService; private BreakContractDriverRecordService breakContractDriverRecordService;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
@Override
public void orderChildAdd(String childNo) {
// 发送mq 新增运单
orderChildMqService.orderChildAdd(childNo);
// 发送mq (运单新增)
vehicleWarnMqService.orderChildAdd(childNo);
}
@Override @Override
public void orderChildArriveReceiveAddress(OrderChild orderChild) { public void orderChildArriveReceiveAddress(OrderChild orderChild) {
// 保存违约记录 // 保存违约记录
......
package com.clx.performance.service.impl.trace; package com.clx.performance.service.impl.trace;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dto.zjxl.TruckTraceDTO; import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnChildEnum;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper; import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.TruckTraceESPlus; import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam; import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService; import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService; import com.clx.performance.utils.zjxl.ZjxlGpsService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -22,12 +28,25 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic ...@@ -22,12 +28,25 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
@Autowired @Autowired
private ZjxlGpsService zjxlGpsService; private ZjxlGpsService zjxlGpsService;
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired @Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper; private TruckTraceESPlusMapper truckTraceESPlusMapper;
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void truckTracSync(TruckTraceSyncMqParam mq) { public void truckTracSync(TruckTraceSyncMqParam mq) {
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (orderChild.getFinishTime() != null) {
vehicleWarnChild.setTraceStatus(VehicleWarnChildEnum.TraceStatus.DISABLE.getCode());
}
vehicleWarnChild.setTraceTime(LocalDateTimeUtils.parseTime(mq.getEndTime()));
List<TruckTraceDTO> list = zjxlGpsService.getTruckTrace(mq.getTruckNo(), mq.getBeginTime(), mq.getEndTime()); List<TruckTraceDTO> list = zjxlGpsService.getTruckTrace(mq.getTruckNo(), mq.getBeginTime(), mq.getEndTime());
if (list.isEmpty()) {return;} if (list.isEmpty()) {return;}
...@@ -49,6 +68,8 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic ...@@ -49,6 +68,8 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
// 保存 // 保存
truckTraceESPlusMapper.insertBatch(esList); truckTraceESPlusMapper.insertBatch(esList);
// 更新同步时间
vehicleWarnChildDao.updateTraceTime(vehicleWarnChild);
} }
} }
...@@ -21,8 +21,9 @@ public class TruckTraceMqServiceImpl implements TruckTraceMqService { ...@@ -21,8 +21,9 @@ public class TruckTraceMqServiceImpl implements TruckTraceMqService {
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
@Override @Override
public void truckTracSync(String truckNo, String beginTime, String endTime) { public void truckTracSync(String childNo, String truckNo, String beginTime, String endTime) {
TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam(); TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam();
mq.setChildNo(childNo);
mq.setTruckNo(truckNo); mq.setTruckNo(truckNo);
mq.setBeginTime(beginTime); mq.setBeginTime(beginTime);
mq.setEndTime(endTime); mq.setEndTime(endTime);
......
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import com.clx.performance.utils.gd.GdService;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.gps.GpsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer SEC_FER_MIN = 60;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private GdService gdService;
@Autowired
private VehicleWarnRangeDao vehicleWarnRangeDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
@Override
public void vehicleWarnInfoUpdate(OrderChild orderChild, VehicleWarnInfo vehicleWarnInfo, VehicleWarnConfig vehicleWarnConfig){
// 更新
if (vehicleWarnInfo != null){
// 计算下次生效时间
LocalDateTime nextTime = vehicleWarnInfo.getWarnTime().plusMinutes(vehicleWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarnTime(vehicleWarnInfo);
return;
}
// 新增
vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnInfo.setWarnType(vehicleWarnConfig.getWarnType());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnInfo.setWarnLevel(vehicleWarnConfig.getWarnLevel());
vehicleWarnInfo.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
vehicleWarnInfo.setReceiveAddressId(orderChild.getReceiveAddressId());
vehicleWarnInfo.setReceiveAddress(orderChild.getReceiveAddress());
vehicleWarnInfo.setTruckId(orderChild.getTruckId());
vehicleWarnInfo.setTruckNo(orderChild.getTruckNo());
vehicleWarnInfo.setDriverUserNo(orderChild.getDriverUserNo());
vehicleWarnInfo.setDriverName(orderChild.getDriverName());
vehicleWarnInfo.setDriverMobile(orderChild.getDriverMobile());
vehicleWarnInfo.setTakeTime(orderChild.getPayTime());
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.saveEntity(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
}
/**
* 暂停检测
*/
@Override
public boolean suspendCheck(VehicleWarnChild vehicleWarnChild, Integer warnConfigId){
// 报警暂停
List<VehicleWarnRang> vehicleWarnRangList = vehicleWarnRangeDao.ListByWarnConfigId(warnConfigId);
if (!vehicleWarnRangList.isEmpty()){
for (VehicleWarnRang item : vehicleWarnRangList) {
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ALL.getCode())){
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())){
if (Objects.equals(vehicleWarnChild.getOrderGoodsNo(), item.getOrderNo())) {
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())){
if (Objects.equals(vehicleWarnChild.getChildNo(), item.getChildNo())) {
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
}
}
}
return false;
}
/**
* 获取当前位置
*/
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo){
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(truckNo, userNo);
return currentPosition;
}
/**
* 获取需要时间(min)
*/
@Override
public int getNeedTime(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
return gdRouteDTOS.get(0).getDuration() /SEC_FER_MIN;
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return 0;
}
/**
* 获取需要时间(min)
*/
@Override
public int getNeedTime(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return 0;}
return getNeedTime(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
/**
* 获取需要距离(m)
*/
@Override
public int getNeedDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
int needDistance = 0;
if (currentPosition == null) {return 0;}
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
needDistance = gdRouteDTOS.get(0).getDistance();
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return needDistance;
}
@Override
public Integer getDistance(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return null;}
return GpsUtil.distanceM(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnDelayWarnService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnDelayWarnServiceImpl implements VehicleWarnDelayWarnService {
// 装卸车默认时间(min)
private static final Integer LOAD_UNLOAD_TIME_DEFAULT = 60;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 运单延误
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
// 拉运结束时间
LocalDateTime transportEndTime = commonInfo.getTransportEndTime();
// 预警到达货源地时间
Integer sendAddressTime = commonInfo.getSendAddressTime();
// 装车时间
Integer loadTime = getLoadTime(orderChild.getSendAddressId(), orderChild.getReceiveAddressId(),
orderChild.getSendSystemAddressId(), orderChild.getReceiveSystemAddressId(),
commonInfo.getCurrentTime());
// 到目的地时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 卸车时间
Integer unloadTime = getUnloadTime(orderChild.getSendAddressId(), orderChild.getReceiveAddressId(),
orderChild.getSendSystemAddressId(), orderChild.getReceiveSystemAddressId(),
commonInfo.getCurrentTime());
// 计算需要的时间
Integer needTime = sendAddressTime + loadTime + expectTime + unloadTime;
// 超时
if (transportEndTime.isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doDelayTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doDelayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 获取装车平均时间(min)
*/
private Integer getLoadTime(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
LocalDateTime now){
Integer time = orderChildDao.loadTimeAvg(sendAddressId, receiveAddressId, sendSystemAddressId, receiveSystemAddressId, LocalDateTimeUtils.formatTime(now.minusDays(30)));
if (time == null) {return LOAD_UNLOAD_TIME_DEFAULT;}
return time/60;
}
/**
* 获取卸车平均时间(min)
*/
private Integer getUnloadTime(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
LocalDateTime now){
Integer time = orderChildDao.unloadTimeAvg(sendAddressId, receiveAddressId, sendSystemAddressId, receiveSystemAddressId, LocalDateTimeUtils.formatTime(now.minusDays(30)));
if (time == null) {return LOAD_UNLOAD_TIME_DEFAULT;}
return time/60;
}
}
...@@ -34,6 +34,7 @@ import java.util.List; ...@@ -34,6 +34,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService { public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
private final Integer TRUCK_TRACE_DAY_MAX = 3;
@Autowired @Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao; private VehicleWarnInfoDao vehicleWarnInfoDao;
...@@ -54,8 +55,9 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService { ...@@ -54,8 +55,9 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND); VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.SUSPEND.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo); vehicleWarnInfo.setSuspendTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, param.getWarnRang());
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog(); VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
vehicleWarnLog.setInfoId(vehicleWarnInfo.getId()); vehicleWarnLog.setInfoId(vehicleWarnInfo.getId());
...@@ -96,7 +98,7 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService { ...@@ -96,7 +98,7 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
OrderChild orderChild = orderChildDao.getByChildNo(vehicleWarnInfo.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND); OrderChild orderChild = orderChildDao.getByChildNo(vehicleWarnInfo.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
LocalDateTime beginTime = vehicleWarnInfo.getTakeTime(); LocalDateTime beginTime = vehicleWarnInfo.getTakeTime();
LocalDateTime endTime = vehicleWarnInfo.getTakeTime(); LocalDateTime endTime = LocalDateTime.now();
if (orderChild.getArriveSendTime() != null) {endTime = orderChild.getArriveSendTime();} if (orderChild.getArriveSendTime() != null) {endTime = orderChild.getArriveSendTime();}
if (orderChild.getLoadTime() != null) {endTime = orderChild.getLoadTime();} if (orderChild.getLoadTime() != null) {endTime = orderChild.getLoadTime();}
if (orderChild.getArriveReceiveTime() != null) {endTime = orderChild.getArriveReceiveTime();} if (orderChild.getArriveReceiveTime() != null) {endTime = orderChild.getArriveReceiveTime();}
...@@ -104,11 +106,22 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService { ...@@ -104,11 +106,22 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
if (orderChild.getConfirmTime() != null) {endTime = orderChild.getConfirmTime();} if (orderChild.getConfirmTime() != null) {endTime = orderChild.getConfirmTime();}
if (orderChild.getSettleTime() != null) {endTime = orderChild.getSettleTime();} if (orderChild.getSettleTime() != null) {endTime = orderChild.getSettleTime();}
if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();} if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();}
if (endTime.isAfter(beginTime.plusDays(3))) {endTime = beginTime.plusDays(3);} //最多查询3天 if (endTime.isAfter(beginTime.plusDays(TRUCK_TRACE_DAY_MAX))) {endTime = beginTime.plusDays(TRUCK_TRACE_DAY_MAX);} //最多查询3天
List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime)); List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
List<DriverTraceVO> driverTraceList = truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime)); List<DriverTraceVO> driverTraceList = truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
// 接单重车、卸车空车
for (DriverTruckTraceVO item : truckTraceList) {
item.setTruckStatus(1);
if (orderChild.getCancelTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getCancelTime())){item.setTruckStatus(0);}
}
if (orderChild.getUnloadTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getUnloadTime())){item.setTruckStatus(0);}
}
}
VehicleTraceVO result = new VehicleTraceVO(); VehicleTraceVO result = new VehicleTraceVO();
result.setDriverTraceList(driverTraceList); result.setDriverTraceList(driverTraceList);
result.setTruckTraceList(truckTraceList); result.setTruckTraceList(truckTraceList);
......
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnLoadAndUnloadWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnLoadAndUnloadWarnServiceImpl implements VehicleWarnLoadAndUnloadWarnService {
private static final Integer MIN_FER_HOUR = 60;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 装车超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void loadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.LOAD_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doLoadTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doLoadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (orderChild.getArriveSendTime().plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 到达货源地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void unloadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild){
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.UNLOAD_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doUnloadTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doUnloadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (orderChild.getArriveReceiveTime().plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.batch.AliBatchSmsMessageReq;
import com.clx.message.req.message.ClinkMessageReq;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
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.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
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.vehiclewarn.*;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
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;
@Slf4j
@Service
public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerService {
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private VehicleWarnUserDao vehicleWarnUserDao;
@Autowired
private VehicleWarnSendAddressWarnService vehicleWarnSendAddressWarnService;
@Autowired
private VehicleWarnLoadAndUnloadWarnService vehicleWarnLoadAndUnloadWarnService;
@Autowired
private VehicleWarnReceiveAddressWarnService vehicleWarnReceiveAddressWarnService;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
@Autowired
private ClxMessageConfig clxMessageConfig;
@Autowired
private ClxMessageOpenapiFeign clxMessageOpenapiFeign;
@Autowired
private VehicleWarnParkWarnService vehicleWarnParkWarnService;
@Autowired
private OrderService orderService;
@Autowired
private VehicleWarnDelayWarnService vehicleWarnDelayWarnService;
@Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 计算预计时间
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(), orderChild.getDriverUserNo());
int arriveSendExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getSendLongitude(), orderGoods.getSendLatitude());
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
VehicleWarnChild vehicleWarnChild = new VehicleWarnChild();
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderNo());
vehicleWarnChild.setChildNo(orderChild.getChildNo());
vehicleWarnChild.setTruckNo(orderChild.getTruckNo());
vehicleWarnChild.setDriverUserNo(orderChild.getDriverUserNo());
vehicleWarnChild.setSendLongitude(orderGoods.getSendLongitude());
vehicleWarnChild.setSendLatitude(orderGoods.getSendLatitude());
vehicleWarnChild.setReceiveLongitude(orderGoods.getReceiveLongitude());
vehicleWarnChild.setReceiveLatitude(orderGoods.getReceiveLatitude());
vehicleWarnChild.setArriveSendExpectTime(arriveSendExpectTime==0? null : arriveSendExpectTime);
vehicleWarnChild.setArriveReceiveExpectTime(arriveReceiveExpectTime==0? null : arriveReceiveExpectTime);
vehicleWarnChild.setTraceTime(orderChild.getPayTime());
vehicleWarnChildDao.saveEntity(vehicleWarnChild);
}
@Override
public void truckWarn(VehicleWarnTruckWarnMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnCommonInfoDTO commonInfo = new VehicleWarnCommonInfoDTO();
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveSendTime());
commonInfo.setCurrentTime(LocalDateTime.now());
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
commonInfo.setTransportEndTime(LocalDateTimeUtils.parseTime(orderInfo.getTransportEndTime()));
// 获取当前位置
commonInfo.setCurrentPosition(vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(), orderChild.getDriverUserNo()));
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
) {
// 距货源地时间
commonInfo.setSendAddressTime(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition(), vehicleWarnChild.getSendLongitude(), vehicleWarnChild.getSendLatitude()));
}
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
) {
// 距目的地时间
commonInfo.setReceiveAddressTime(vehicleWarnCommonService.getNeedTime(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
// 距目的地距离
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedDistance(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
}
// 前往货源地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
){
try {
vehicleWarnSendAddressWarnService.gotoSendAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.error("前往货源地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 到达货源地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
){
try{
vehicleWarnSendAddressWarnService.arriveSendAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.error("到达货源地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 装车超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
){
try{
vehicleWarnLoadAndUnloadWarnService.loadTimeout(orderChild, vehicleWarnChild);
}catch (Exception e){
log.error("装车超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 卸车超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
){
try{
vehicleWarnLoadAndUnloadWarnService.unloadTimeout(orderChild, vehicleWarnChild);
}catch (Exception e){
log.error("卸车超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 前往目的地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
try {
vehicleWarnReceiveAddressWarnService.gotoReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("前往目的地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 到达目的地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
try {
vehicleWarnReceiveAddressWarnService.arriveReceiveAddressTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("到达目的地超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 停留超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
try {
vehicleWarnParkWarnService.packTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("停留超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 敏感区停留超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.LOAD.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_RECEIVE.getCode())
){
try {
vehicleWarnParkWarnService.sensitiveAreaParkTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("敏感区停留超时错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 运单延误
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
){
try {
vehicleWarnDelayWarnService.delayTimeout(orderChild, vehicleWarnChild, commonInfo);
}catch (Exception e){
log.info("运单延误错误, msg:{}", ExceptionUtils.getStackTrace(e));
}
}
// 更新目的地距离
if (commonInfo.getReceiveAddressDistance() != null) {
vehicleWarnChild.setReceiveAddressDistance(commonInfo.getReceiveAddressDistance());
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
}
}
@Override
public void truckWarnNotice(VehicleWarnTruckWarnNoticeMqParam mq) {
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(mq.getInfoId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
List<String> mobileList = new ArrayList<>();
// 过滤需要通知的人员
List<VehicleWarnUser> list = vehicleWarnUserDao.listAllEnable();
for (VehicleWarnUser item : list) {
List<Integer> warnTypeList = JSON.parseArray(item.getWarmTypeJson(),Integer.class);
if (warnTypeList.contains(vehicleWarnInfo.getWarnType())){
mobileList.add(item.getMobile());
}
}
if (mobileList.isEmpty()) {return;}
log.info("车辆预警通知, id:{}, mobileList:{}", vehicleWarnInfo.getId(), JSON.toJSONString(mobileList));
if (vehicleWarnInfo.getWarnLevel() == 2){ //2级短信
sendSms(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
else if (vehicleWarnInfo.getWarnLevel() == 3) { //3级外呼
sendClink(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
}
/**
* 发送预警短信
*/
@Override
public void sendSms(List<String> mobileList, String warnName, String truckNo, String childNo) {
//触发${warnName}预警;车牌号${truckNo};运单${childNo};请尽快核实情况
AliBatchSmsMessageReq req = new AliBatchSmsMessageReq();
JSONObject jsonObject = new JSONObject();
jsonObject.set("warnName", warnName);
jsonObject.set("truckNo", truckNo);
jsonObject.set("childNo", childNo);
req.setTemplateCode(clxMessageConfig.getVehicleWarnTemplateCode());
req.setChannelId(clxMessageConfig.getChannelId());
req.setAppId(clxMessageConfig.getAppId().toString());
req.setMobileList(mobileList);
req.setContent(jsonObject.toString());
clxMessageOpenapiFeign.sendAliSmsBatch(req);
}
/**
* 发送预警外呼
*/
@Override
public void sendClink(List<String> mobileList, String warnName, String truckNo, String childNo) {
//触发{指定预警名称}预警;车牌号{车牌号};运单{运单号};请尽快核实情况
ClinkMessageReq req = new ClinkMessageReq();
StringBuilder sb = new StringBuilder();
sb.append("触发");
sb.append(warnName);
sb.append("预警;车牌号");
sb.append(truckNo);
sb.append(";运单");
sb.append(childNo);
sb.append(";请尽快核实情况");
String content = sb.toString();
req.setChannelId(clxMessageConfig.getVehicleWarnChannelId());
req.setAppId(clxMessageConfig.getAppId().toString());
req.setContent(content);
for (String mobile : mobileList) {
req.setMobile(mobile);
clxMessageOpenapiFeign.sendClink(req);
}
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
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.vehiclewarn.VehicleWarnMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class VehicleWarnMqServiceImpl implements VehicleWarnMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void orderChildAdd(String childNo) {
VehicleWarnChildAddMqParam mq = new VehicleWarnChildAddMqParam();
mq.setChildNo(childNo);
MqDelay delay = new MqDelay<>(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.ORDER_CHILD_ADD_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void truckWarn(String childNo) {
VehicleWarnTruckWarnMqParam mq = new VehicleWarnTruckWarnMqParam();
mq.setChildNo(childNo);
MqDelay delay = new MqDelay<>(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.TRUCK_WARN_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void truckWarnNotice(Integer infoId) {
VehicleWarnTruckWarnNoticeMqParam mq = new VehicleWarnTruckWarnNoticeMqParam();
mq.setInfoId(infoId);
MqDelay delay = new MqDelay<>(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.TRUCK_WARN_NOTICE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyVehicleWarnConstants.DEFAULT_EXCHANGE, RabbitKeyVehicleWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnParkWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 停留超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void packTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doParkTimeout(orderChild, vehicleWarnChild, item, parkTime);
}
}
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTimee){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (parkTimee > time){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
@Override
public void sensitiveAreaParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo) {
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.SENSITIVE_AREA_PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doSensitiveParkTimeout(orderChild, vehicleWarnChild, item, commonInfo);
}
}
private void doSensitiveParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, VehicleWarnCommonInfoDTO commonInfo){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 敏感区距离
Integer sensitiveDistance = vehicleWarnCommonService.getDistance(commonInfo.getCurrentPosition(), vehicleWarnConfig.getLongitude(), vehicleWarnConfig.getLatitude());
if (sensitiveDistance==null || sensitiveDistance > vehicleWarnConfig.getRadius()) {return;}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnReceiveAddressWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnReceiveAddressWarnService {
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 前往目的地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
// 假定当前已装车
orderChild.setLoadTime(LocalDateTime.now());
}
}
// 理论时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 计算需要的时间
Integer needTime = commonInfo.getReceiveAddressTime();
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.GOTO_RECEIVE_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doGotoReceiveAddressTimeout(orderChild, vehicleWarnChild, item, expectTime, needTime);
}
}
private void doGotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, Integer expectTime, Integer needTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
LocalDateTime loadTime = orderChild.getLoadTime();
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(expectTime)).divide(new BigDecimal("100"), 0, RoundingMode.HALF_UP).intValue();
if (loadTime.plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 到达目的地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 计算需要的时间
int needTime = commonInfo.getReceiveAddressTime();
LocalDateTime lastArriveReceiveTime = commonInfo.getLastArriveReceiveTime();
// 超时判断
LocalDateTime now = commonInfo.getCurrentTime();
if (lastArriveReceiveTime.isAfter(now.plusMinutes(needTime))) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.ARRIVE_RECEIVE_DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doArriveReceiveAddressTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doArriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.service.vehiclewarn.VehicleWarnCommonService;
import com.clx.performance.service.vehiclewarn.VehicleWarnSendAddressWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAddressWarnService {
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnCommonService vehicleWarnCommonService;
/**
* 前往货源地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
long expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.GOTO_SEND_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doGotoSendAddressTimeout(orderChild, vehicleWarnChild, item, expectTime, needTime);
}
}
private void doGotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, long expectTime, Integer needTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(expectTime)).divide(new BigDecimal("100"), 0, RoundingMode.HALF_UP).intValue();
if (orderChild.getPayTime().plusMinutes(expectTime).plusMinutes(time).isAfter(LocalDateTime.now().plusMinutes(needTime))){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
/**
* 到达货源地超时
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
// 超时判断
LocalDateTime now = LocalDateTime.now();
if (vehicleWarnChild.getTakeTime().plusMinutes(vehicleWarnChild.getArriveSendExpectTime()).isAfter(now.plusMinutes(needTime))) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.ARRIVE_SEND_DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
for (VehicleWarnConfig item : vehicleWarnConfigList) {
doArriveSendAddressTimeout(orderChild, vehicleWarnChild, item);
}
}
private void doArriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 暂停检测
boolean suspend = vehicleWarnCommonService.suspendCheck(vehicleWarnChild, vehicleWarnConfig.getId());
if (suspend) {return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
}
}
...@@ -2,7 +2,7 @@ package com.clx.performance.service.trace; ...@@ -2,7 +2,7 @@ package com.clx.performance.service.trace;
public interface TruckTraceMqService { public interface TruckTraceMqService {
void truckTracSync(String truckNo, String beginTime, String endTime); void truckTracSync(String childNo, String truckNo, String beginTime, String endTime);
} }
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import java.math.BigDecimal;
public interface VehicleWarnCommonService {
void vehicleWarnInfoUpdate(OrderChild orderChild, VehicleWarnInfo vehicleWarnInfo, VehicleWarnConfig vehicleWarnConfig);
boolean suspendCheck(VehicleWarnChild vehicleWarnChild, Integer warnConfigId);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getNeedTime(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
int getNeedTime(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
int getNeedDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
Integer getDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnDelayWarnService {
void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnLoadAndUnloadWarnService {
void loadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
void unloadTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild);
}
package com.clx.performance.service.vehiclewarn;
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 java.util.List;
public interface VehicleWarnMqHandlerService {
void orderChildAdd(VehicleWarnChildAddMqParam mq);
void truckWarn(VehicleWarnTruckWarnMqParam mq);
void truckWarnNotice(VehicleWarnTruckWarnNoticeMqParam mq);
void sendSms(List<String> mobileList, String warnName, String truckNo, String childNo);
void sendClink(List<String> mobileList, String warnName, String truckNo, String childNo);
}
package com.clx.performance.service.vehiclewarn;
public interface VehicleWarnMqService {
void orderChildAdd(String childNo);
void truckWarn(String childNo);
void truckWarnNotice(Integer infoId);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnParkWarnService {
void packTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void sensitiveAreaParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnReceiveAddressWarnService {
void gotoReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void arriveReceiveAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
package com.clx.performance.service.vehiclewarn;
import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
public interface VehicleWarnSendAddressWarnService {
void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
void arriveSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo);
}
package com.clx.performance.sqlProvider.vehiclewarn; package com.clx.performance.sqlProvider.vehiclewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam; import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -26,6 +25,9 @@ public class VehicleWarnInfoSqlProvider { ...@@ -26,6 +25,9 @@ public class VehicleWarnInfoSqlProvider {
if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");} if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");}
if (Objects.nonNull(param.getStatus())) {WHERE("status = #{param.status}");} if (Objects.nonNull(param.getStatus())) {WHERE("status = #{param.status}");}
if (StringUtils.isNotBlank(param.getSendAddress())) {WHERE("send_address like CONCAT('%',#{param.sendAddress},'%')");}
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address like CONCAT('%',#{param.receiveAddress},'%')");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");} if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");} if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论