提交 be3f81ee authored 作者: 艾庆国's avatar 艾庆国

Merge branch 'v14.4_vehicle_warn_20240425' into test

# Conflicts: # performance-web/pom.xml # performance-web/src/main/java/com/clx/performance/controller/temp/TempController.java
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ResultEnum implements com.msl.common.enums.ResultEnum {
/**
* 系统
*/
SIGN_NULL(1001, "签名不存在"),
SIGN_ERROR(1002, "签名错误"),
TIMESTAMP_ERROR(1003, "请求不在时间范围内"),
INCREMENT_ERROR(1004, "编码生成失败"),
HTTP_ERROR(1005, "HTTP请求失败"),
LOCK_ERROR(1006,"加锁失败"),
TRY_LOCK_ERROR(1007,"操作频繁,请稍后重试"),
FEIGN_ERROR(1008, "服务调用失败"),
PARAM_ERROR(1009, "参数缺失"),
DATA_ERROR(1010, "数据错误"),
/**
* 通用
*/
FILE_LIMIT_ERROR(1104, "文件过大"),
REPEAT_OPERATION(1105, "重复操作"),
DATA_NOT_FIND(1106, "数据不存在"),
DATA_REPEAT(1107, "数据重复"),
VEHICLE_WARN_USER_EXIST(1201, "联系方式已存在"),
VEHICLE_WARN_CONFIG_EXIST(1201, "配置名称已存在"),
;
private final int code;
private final String msg;
}
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);
}
}
}
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnConfigEnum {
;
@Getter
@AllArgsConstructor
public enum WarnType {
ARRIVE_SEND_DELAY(1, "运单-到达货源地延误"),
GOTO_SEND_TIMEOUT(2, "运单-前往货源地超时"),
ARRIVE_RECEIVE_DELAY(3, "运单-到达目的地延误"),
GOTO_RECEIVE_TIMEOUT(4, "运单-前往目的地超时"),
PARK_TIMEOUT(5, "运单-停留超时"),
SENSITIVE_AREA_PARK_TIMEOUT(6, "运单-敏感区停留"),
LOAD_TIMEOUT(7, "运单-装车超时"),
UNLOAD_TIMEOUT(8, "运单-卸车超时"),
DELAY(9, "运单-运单延误"),
;
private final Integer code;
private final String msg;
public static Optional<WarnType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum DeleteStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
public static Optional<DeleteStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(DeleteStatus::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);
}
}
}
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnInfoEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
INIT(1, "待处理"),
RESOLVE(2, "已处理"),
SUSPEND(3, "暂停预警"),
;
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);
}
}
}
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnLogEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
SUSPEND(1, "暂停预警"),
RESOLVE(2, "处理预警"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Type::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum WarnRang {
CHILD(1, "本运单不再提示该预警"),
ORDER(2, "相同货单不再提示该预警"),
NONE(3, "不再提示该预警"),
;
private final Integer code;
private final String msg;
public static Optional<WarnRang> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnRang::getMsg).orElse(null);
}
}
}
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);
}
}
}
package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
public enum VehicleWarnUserEnum {
;
@Getter
@AllArgsConstructor
public enum DeleteStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
}
}
package com.clx.performance.param.mq.trace;
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 TruckTraceSyncMqParam {
private String childNo; //运单编号
private String truckNo; //车牌号
private String beginTime; //开始时间
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
}
package com.clx.performance.param.pc.vehiclewarn;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageVehicleWarnConfigParam extends PageParam {
@ApiModelProperty(value = "预警方案名称", example = "方案1")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
private Integer status;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
}
package com.clx.performance.param.pc.vehiclewarn;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageVehicleWarnInfoParam extends PageParam {
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "运单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
}
package com.clx.performance.param.pc.vehiclewarn;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageVehicleWarnUserParam extends PageParam {
@ApiModelProperty(value = "姓名", example = "张三")
private String name;
@ApiModelProperty(value = "手机", example = "13000000000")
private String mobile;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnConfigAddParam {
@ApiModelProperty(value = "预警方案名称", example = "方案1")
@NotBlank(message = "预警方案名称不能为空")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
@NotNull(message = "预警类型不能为空")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
@NotNull(message = "预警级别不能为空")
private Integer warnLevel;
@ApiModelProperty(value = "预警间隔(小时)", example = "1.2")
private BigDecimal interval;
@ApiModelProperty(value = "超时比例(%)", example = "12.3")
private BigDecimal timeoutRatio;
@ApiModelProperty(value = "经度", example = "123.45")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "12.34")
private BigDecimal latitude;
@ApiModelProperty(value = "地址", example = "北京")
private String address;
@ApiModelProperty(value = "半径(米)", example = "100")
private Integer radius;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnConfigDeleteUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnConfigStatusUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnConfigUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警方案名称", example = "方案1")
@NotBlank(message = "预警方案名称不能为空")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
@NotNull(message = "预警类型不能为空")
private Integer warnType;
@ApiModelProperty(value = "预警级别: 1一级 2二级 3三级", example = "1")
@NotNull(message = "预警级别不能为空")
private Integer warnLevel;
@ApiModelProperty(value = "预警间隔(小时)", example = "1.2")
private BigDecimal interval;
@ApiModelProperty(value = "超时比例(%)", example = "12.3")
private BigDecimal timeoutRatio;
@ApiModelProperty(value = "经度", example = "123.45")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "12.34")
private BigDecimal latitude;
@ApiModelProperty(value = "地址", example = "北京")
private String address;
@ApiModelProperty(value = "半径(米)", example = "123")
private Integer radius;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnInfoResolveUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotBlank(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnInfoSuspendUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotBlank(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3无预警", example = "1")
private Integer warnRang;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
private String warnEndTime;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnUserAddParam {
@ApiModelProperty(value = "姓名", example = "张三")
@NotBlank(message = "姓名不能为空")
private String name;
@ApiModelProperty(value = "手机", example = "13000000000")
@NotBlank(message = "手机不能为空")
private String mobile;
}
package com.clx.performance.param.pc.vehiclewarn;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnUserVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnUserConfigUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "选中报警类型列表")
private List<VehicleWarnUserVO.WarnTypeItem> warnTypeList;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnUserDeleteParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.vehiclewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnUserUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "姓名", example = "张三")
@NotBlank(message = "姓名不能为空")
private String name;
@ApiModelProperty(value = "手机", example = "13000000000")
@NotBlank(message = "手机不能为空")
private String mobile;
}
package com.clx.performance.param.temp;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class DriverTraceAddParam {
@ApiModelProperty(value = "车辆轨迹列表")
private List<DriverTraceItem> traceList;
@Setter
@Getter
@ToString
@NoArgsConstructor
public static class DriverTraceItem{
@ApiModelProperty(value = "用户编码", example = "10000")
private Long userNo;
@ApiModelProperty(value = "1-正常上传,2-离线上传", example = "1")
private Integer dataType;
@ApiModelProperty(value = "位置 [123.45, 12.34]")
private BigDecimal[] location;
@ApiModelProperty(value = "时间")
private String gpsTime;
}
}
package com.clx.performance.param.temp;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class TruckTraceAddParam {
@ApiModelProperty(value = "车辆轨迹列表")
private List<TruckTraceItem> traceList;
@Setter
@Getter
@ToString
@NoArgsConstructor
public static class TruckTraceItem{
@ApiModelProperty(value = "车辆编号", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "正北方向夹角", example = "12.34")
private BigDecimal angle;
@ApiModelProperty(value = "速度", example = "12.34")
private BigDecimal speed;
@ApiModelProperty(value = "里程", example = "12.34")
private BigDecimal mileage;
@ApiModelProperty(value = "海拔", example = "12.34")
private BigDecimal height;
@ApiModelProperty(value = "位置 [123.45, 12.34]")
private BigDecimal[] location;
@ApiModelProperty(value = "时间")
private String gpsTime;
}
}
package com.clx.performance.vo.pc.trace;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class DriverTraceVO {
@ApiModelProperty(value = "经度")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度")
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间")
private String gpsTime;
@ApiModelProperty(value = "速度")
private BigDecimal speed;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
}
package com.clx.performance.vo.pc.trace;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class DriverTruckTraceVO {
@ApiModelProperty(value = "正北方向夹角", example = "12.34")
private BigDecimal angle;
@ApiModelProperty(value = "GPS 速度", example = "12.34")
private BigDecimal speed;
@ApiModelProperty(value = "里程", example = "12.34")
private BigDecimal mileage;
@ApiModelProperty(value = "海拔", example = "12.34")
private BigDecimal height;
@ApiModelProperty(value = "经度", example = "123.45")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "12.34")
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间")
private String gpsTime;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
}
package com.clx.performance.vo.pc.vehiclewarn;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 车辆轨迹
* @Date: 2024/04/25 17:09:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleTraceVO {
@ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList;
}
\ No newline at end of file
package com.clx.performance.vo.pc.vehiclewarn;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import java.math.BigDecimal;
/**
* @Author: aiqinguo
* @Description: 车辆预警配置
* @Date: 2024/04/25 14:09:40
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnConfigVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警方案名称", example = "方案1")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型", example = "1")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return VehicleWarnConfigEnum.WarnType.getMsgByCode(warnType);
}
@ApiModelProperty(value = "预警级别: 1一级 2二级 3三级", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "预警级别", example = "一级")
private String warnLevelMsg;
public String getWarnLevelMsg() {
if (warnLevel == 1) {return "一级";}
if (warnLevel == 2) {return "二级";}
if (warnLevel == 3) {return "三级";}
return null;
}
@ApiModelProperty(value = "预警间隔(小时)", example = "1.2")
private BigDecimal interval;
@ApiModelProperty(value = "超时比例(%)", example = "12.3")
private BigDecimal timeoutRatio;
@ApiModelProperty(value = "经度", example = "123.45")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "12.34")
private BigDecimal latitude;
@ApiModelProperty(value = "地址", example = "北京")
private String address;
@ApiModelProperty(value = "半径(米)", example = "123")
private Integer radius;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
private Integer status;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "启用")
private String statusMsg;
public String getStatusMsg() {
return VehicleWarnConfigEnum.Status.getMsgByCode(status);
}
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
@Getter
@Setter
@NoArgsConstructor
public static class WarnTypeItem {
@ApiModelProperty(value = "报警类型", example = "1")
private Integer warnType;
@ApiModelProperty(value = "报警类型名称", example = "超时")
private String warnTypeName;
public WarnTypeItem(Integer warnType, String warnTypeName) {
this.warnType = warnType;
this.warnTypeName = warnTypeName;
}
}
}
\ No newline at end of file
package com.clx.performance.vo.pc.vehiclewarn;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* @Author: aiqinguo
* @Description: 车辆预警信息表
* @Date: 2024/04/25 17:09:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnInfoVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警id", example = "1")
private Integer warnId;
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型", example = "1")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return VehicleWarnConfigEnum.WarnType.getMsgByCode(warnType);
}
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "预警级别", example = "一级")
private String warnLevelMsg;
public String getWarnLevelMsg() {
if (warnLevel == 1) {return "一级";}
if (warnLevel == 2) {return "二级";}
if (warnLevel == 3) {return "三级";}
return null;
}
@ApiModelProperty(value = "运单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "发货地址id", example = "1")
private Integer sendAddressId;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址id", example = "2")
private Integer receiveAddressId;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty(value = "运单状态", example = "1")
private Integer childStatus;
@ApiModelProperty(value = "运单状态", example = "1")
private String childStatusMsg;
public String getChildStatusMsg() {
return OrderChildEnum.Status.getMsgByCode(childStatus);
}
@ApiModelProperty(value = "车辆ID", example = "1")
private Integer truckId;
@ApiModelProperty(value = "车牌号", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "司机用户编号", example = "100000")
private Long driverUserNo;
@ApiModelProperty(value = "司机姓名", example = "张三")
private String driverName;
@ApiModelProperty(value = "司机手机号", example = "13000000000")
private String driverMobile;
@ApiModelProperty(value = "接单时间", example = "")
private String takeTime;
@ApiModelProperty(value = "预警时间", example = "")
private String warnTime;
@ApiModelProperty(value = "预警暂停时间", example = "")
private String suspendTime;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
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 = "待处理")
private String statusMsg;
public String getStatusMsg() {
return VehicleWarnInfoEnum.Status.getMsgByCode(getStatus());
}
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 预警日志
* @Date: 2024/04/26 11:21:25
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnLogVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "预警信息id", example = "1")
private Integer infoId;
@ApiModelProperty(value = "类型:1暂停预警 2处理预警", example = "1")
private Integer type;
@ApiModelProperty(value = "运单编号", example = "100000")
private String childNo;
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警时间", example = "")
private String warnTime;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3无预警", example = "1")
private Integer warnRang;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
private LocalDateTime warnEndTime;
@ApiModelProperty(value = "内容", example = "预警处理")
private String content;
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc.vehiclewarn;
import com.alibaba.fastjson.JSON;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 车辆预警通知人员表
* @Date: 2024/04/25 13:24:56
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnUserVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "姓名", example = "张三")
private String name;
@ApiModelProperty(value = "手机", example = "13000000000")
private String mobile;
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
@ApiModelProperty(value = "通知配置列表")
private List<WarnTypeItem> warnTypeItemList;
public List<WarnTypeItem> getWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(warmTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
for (VehicleWarnConfigEnum.WarnType item : VehicleWarnConfigEnum.WarnType.values()) {
if (warnTypeList.contains(item.getCode())){
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 1));
}
else {
list.add(new WarnTypeItem(item.getCode(), item.getMsg(), 0));
}
}
return list;
}
@JsonIgnore
@ApiModelProperty(value = "预警配置", example = "", hidden = true)
private String warmTypeJson;
@Getter
@Setter
@NoArgsConstructor
public static class WarnTypeItem {
@ApiModelProperty(value = "报警类型", example = "1")
private Integer warnType;
@ApiModelProperty(value = "报警类型名称", example = "超时")
private String warnTypeName;
@ApiModelProperty(value = "使能:0禁用 1启用", example = "1")
private Integer enable;
public WarnTypeItem(Integer warnType, String warnTypeName, Integer enable) {
this.warnType = warnType;
this.warnTypeName = warnTypeName;
this.enable = enable;
}
}
}
\ No newline at end of file
......@@ -101,6 +101,16 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
......@@ -273,6 +283,26 @@
<groupId>com.clx.cy</groupId>
<artifactId>open-sdk</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.14.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.14.0</version>
</dependency>
<dependency>
<groupId>org.dromara.easy-es</groupId>
<artifactId>easy-es-boot-starter</artifactId>
<version>2.0.0-beta7</version>
</dependency>
</dependencies>
......
package com.clx.performance;
import com.msl.common.config.ViewScan;
import org.dromara.easyes.starter.register.EsMapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
......@@ -18,6 +19,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@ComponentScan({"com.clx.performance.*", "com.msl.*"})
@EnableFeignClients(basePackages = {"com.msl.*", "com.clx.performance.*", "com.clx.order.*", "com.clx.user.*", "com.clx.message.*"})
@ViewScan(basePackage = "com.clx.user.view")
@EsMapperScan("com.clx.performance.esplus.mapper")
public class PerformanceApplication {
public static void main(String[] args) {
......
......@@ -29,4 +29,8 @@ public class ClxMessageConfig {
//转账支付-还款单短信模板
private String repaymentTemplateCode;
//车辆报警短信模板
private String vehicleWarnTemplateCode;
//车辆报警渠道id
private Integer vehicleWarnChannelId;
}
package com.clx.performance.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HeaderElement;
import org.apache.http.HeaderElementIterator;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.message.BasicHeaderElementIterator;
import org.apache.http.protocol.HTTP;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class EsCustomizer implements RestClientBuilderCustomizer {
@Autowired
private EsPoolProperties esPoolProperties;
/**
* Customize the {@link RestClientBuilder}.
* <p>
* Possibly overrides customizations made with the {@code "spring.elasticsearch.rest"}
* configuration properties namespace. For more targeted changes, see
* {@link #customize(HttpAsyncClientBuilder)} and
* {@link #customize(RequestConfig.Builder)}.
*
* @param builder the builder to customize
*/
@Override
public void customize(RestClientBuilder builder) {
}
/**
* Customize the {@link HttpAsyncClientBuilder}.
*
* @param builder the builder
* @since 2.3.0
*/
@Override
public void customize(HttpAsyncClientBuilder builder) {
builder.setMaxConnTotal(esPoolProperties.getMaxTotal())
.setMaxConnPerRoute(esPoolProperties.getMaxPerRoute())
.setKeepAliveStrategy((response, context) -> {
final HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
final HeaderElement he = it.nextElement();
final String param = he.getName();
final String value = he.getValue();
if (value != null && "timeout".equalsIgnoreCase(param)) {
try {
return Long.parseLong(value) * 1000;
} catch (final NumberFormatException ignore) {
log.error("", ignore);
}
}
}
return esPoolProperties.getKeepAlive().toMillis();
});
}
}
package com.clx.performance.config;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
@ConfigurationProperties(prefix = "spring.elasticsearch")
@Configuration
@Getter
@Setter
@RefreshScope
public class EsPoolProperties {
/**
* 连接存活时间
*/
private Duration keepAlive = Duration.of(120, ChronoUnit.SECONDS);
/**
* 连接池最大连接数
*/
private int maxTotal = 30;
/**
* 单节点最大连接数
*/
private int maxPerRoute = 10;
}
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyTraceConstants;
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 RabbitTraceConfig {
@Bean
public DirectExchange traceDefaultExchange() {
return new DirectExchange(RabbitKeyTraceConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue traceDefaultDelayQueue() {
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", RabbitKeyTraceConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyTraceConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyTraceConstants.DEFAULT_DELAY_QUEUE, true, false, false, params);
}
@Bean
public Binding traceDefaultDelayQueueBinding() {
return BindingBuilder.bind(traceDefaultDelayQueue()).to(traceDefaultExchange()).with(RabbitKeyTraceConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue traceDefaultDeadQueue() {
return new Queue(RabbitKeyTraceConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding traceDefaultDeadQueueBinding() {
return BindingBuilder.bind(traceDefaultDeadQueue()).to(traceDefaultExchange()).with(RabbitKeyTraceConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 统计更新
*/
@Bean
public Queue traceTruckTraceSyncQueue() {
return new Queue(RabbitKeyTraceConstants.TRUCK_TRACE_SYNC_QUEUE);
}
@Bean
public Binding traceTruckTraceSyncQueueBinding() {
return BindingBuilder.bind(traceTruckTraceSyncQueue()).to(traceDefaultExchange()).with(RabbitKeyTraceConstants.TRUCK_TRACE_SYNC_ROUTING_KEY);
}
}
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 RabbitKeyTraceConstants {
private static final String PREFIX = "clx-performance.trace.";
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 RabbitKeyTraceConstants() {
}
/**
* 缺省交换机
*/
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 TRUCK_TRACE_SYNC_QUEUE = PREFIX +"truck.trace.update"+QUEUE;
public static final String TRUCK_TRACE_SYNC_ROUTING_KEY = PREFIX +"truck.trace.update"+QUEUE_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.pc.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.vehiclewarn.*;
import com.clx.performance.service.vehiclewarn.VehicleWarnConfigService;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnConfigVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
@Slf4j
@RestController
@Validated
@Api(tags = "车辆预警-预警配置")
@RequestMapping(value="/pc/owner/vehicleWarnConfig")
public class VehicleWarnConfigController {
@Autowired
private VehicleWarnConfigService vehicleWarnConfigService;
@ApiOperation(value = "新增配置", notes = "<br>By:艾庆国")
@PostMapping("/saveConfig")
@UnitCovert(result = false)
public Result<Void> saveConfig(@RequestBody @Validated VehicleWarnConfigAddParam param) {
vehicleWarnConfigService.saveConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置", notes = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated VehicleWarnConfigUpdateParam param) {
vehicleWarnConfigService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置状态", notes = "<br>By:艾庆国")
@PostMapping("/updateStatus")
public Result<Void> updateStatus(@RequestBody @Validated VehicleWarnConfigStatusUpdateParam param) {
vehicleWarnConfigService.updateStatus(param);
return Result.ok();
}
@ApiOperation(value = "删除配置", notes = "<br>By:艾庆国")
@PostMapping("/deleteConfig")
public Result<Void> deleteConfig(@RequestBody @Validated VehicleWarnConfigDeleteUpdateParam param) {
vehicleWarnConfigService.deleteConfig(param);
return Result.ok();
}
@ApiOperation(value = "获取配置信息",notes = "<br>By:艾庆国")
@GetMapping("/getConfig")
public Result<VehicleWarnConfigVO> getConfig(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(vehicleWarnConfigService.getConfig(id));
}
@ApiOperation(value = "分页搜索配置列表",notes = "<br>By:艾庆国")
@PostMapping("/pageConfig")
public Result<PageData<VehicleWarnConfigVO>> pageConfig(@RequestBody @Validated PageVehicleWarnConfigParam param) {
IPage<VehicleWarnConfigVO> page = vehicleWarnConfigService.pageConfig(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "预警类型下拉",notes = "<br>By:艾庆国")
@GetMapping("/listWarnType")
public Result<List<VehicleWarnConfigVO.WarnTypeItem>> listWarnType() {
return Result.ok(vehicleWarnConfigService.listWarnType());
}
}
package com.clx.performance.controller.pc.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoSuspendUpdateParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnInfoService;
import com.clx.performance.vo.pc.vehiclewarn.VehicleTraceVO;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnInfoVO;
import com.msl.common.base.PageData;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@Validated
@Api(tags = "车辆预警-预警信息")
@RequestMapping(value="/pc/owner/vehicleWarnInfo")
public class VehicleWarnInfoController {
@Autowired
private VehicleWarnInfoService vehicleWarnInfoService;
@ApiOperation(value = "更新预警暂停", notes = "<br>By:艾庆国")
@PostMapping("/updateSuspend")
public Result<Void> updateSuspend(@RequestBody @Validated VehicleWarnInfoSuspendUpdateParam param) {
vehicleWarnInfoService.updateSuspend(param);
return Result.ok();
}
@ApiOperation(value = "更新处理", notes = "<br>By:艾庆国")
@PostMapping("/updateResolve")
public Result<Void> updateConfig(@RequestBody @Validated VehicleWarnInfoResolveUpdateParam param) {
vehicleWarnInfoService.updateResolve(param);
return Result.ok();
}
@ApiOperation(value = "获取轨迹",notes = "<br>By:艾庆国")
@GetMapping("/getTrace")
public Result<VehicleTraceVO> getTrace(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(vehicleWarnInfoService.getTrace(id));
}
@ApiOperation(value = "获取预警信息",notes = "<br>By:艾庆国")
@GetMapping("/getInfo")
public Result<VehicleWarnInfoVO> getInfo(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(vehicleWarnInfoService.getInfo(id));
}
@ApiOperation(value = "分页搜索预警信息列表",notes = "<br>By:艾庆国")
@PostMapping("/pageInfo")
public Result<PageData<VehicleWarnInfoVO>> pageInfo(@RequestBody @Validated PageVehicleWarnInfoParam param) {
IPage<VehicleWarnInfoVO> page = vehicleWarnInfoService.pageInfo(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.pc.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.vehiclewarn.*;
import com.clx.performance.service.vehiclewarn.VehicleWarnUserService;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnUserVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
@Slf4j
@RestController
@Validated
@Api(tags = "车辆预警-预警通知人员")
@RequestMapping(value="/pc/owner/vehicleWarnUser")
public class VehicleWarnUserController {
@Autowired
private VehicleWarnUserService vehicleWarnUserService;
@ApiOperation(value = "新增人员", notes = "<br>By:艾庆国")
@PostMapping("/saveUser")
@UnitCovert(result = false)
public Result<Void> saveUser(@RequestBody @Validated VehicleWarnUserAddParam param) {
vehicleWarnUserService.saveUser(param);
return Result.ok();
}
@ApiOperation(value = "更新用户", notes = "<br>By:艾庆国")
@PostMapping("/updateUser")
public Result<Void> updateUser(@RequestBody @Validated VehicleWarnUserUpdateParam param) {
vehicleWarnUserService.updateUser(param);
return Result.ok();
}
@ApiOperation(value = "更新通知配置", notes = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated VehicleWarnUserConfigUpdateParam param) {
vehicleWarnUserService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "删除用户", notes = "<br>By:艾庆国")
@PostMapping("/deleteUser")
public Result<Void> deleteUser(@RequestBody @Validated VehicleWarnUserDeleteParam param) {
vehicleWarnUserService.deleteUser(param);
return Result.ok();
}
@ApiOperation(value = "获取人员信息",notes = "<br>By:艾庆国")
@GetMapping("/getUser")
public Result<VehicleWarnUserVO> getUser(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(vehicleWarnUserService.getUser(id));
}
@ApiOperation(value = "分页搜索人员列表",notes = "<br>By:艾庆国")
@PostMapping("/pageUser")
public Result<PageData<VehicleWarnUserVO>> pageUser(@RequestBody @Validated PageVehicleWarnUserParam param) {
IPage<VehicleWarnUserVO> page = vehicleWarnUserService.pageUser(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.temp;
import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
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.RequestBody;
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/trace")
public class TempTraceController {
@Autowired
private TruckTraceService truckTraceService;
@ApiOperation(value = "车辆轨迹同步", notes = "<br>By:艾庆国")
@PostMapping("/truckTraceSync")
public Result truckTraceSync(@RequestBody TruckTraceAddParam param) {
truckTraceService.truckTraceSave(param);
return Result.ok();
}
@ApiOperation(value = "查询车辆轨迹", notes = "<br>By:艾庆国")
@PostMapping("/listTruckTraceByTime")
public Result<List<DriverTruckTraceVO>> listTruckTraceByTime(String truckNo, String beginTime, String endTime) {
return Result.ok(truckTraceService.listTruckTraceByTime(truckNo,beginTime,endTime));
}
@ApiOperation(value = "司机轨迹同步", notes = "<br>By:艾庆国")
@PostMapping("/driverTraceSync")
public Result driverTraceSync(@RequestBody DriverTraceAddParam param) {
truckTraceService.driverTraceSave(param);
return Result.ok();
}
@ApiOperation(value = "查询司机轨迹", notes = "<br>By:艾庆国")
@PostMapping("/listDriverTraceByTime")
public Result<List<DriverTraceVO>> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
return Result.ok(truckTraceService.listDriverTraceByTime(userNo,beginTime,endTime));
}
}
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
Page<OrderChild> getMonthAgoByUserNo(Long userNo, LocalDateTime monthAgo, PageParam 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);
}
......@@ -539,4 +539,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
query.orderByDesc(OrderChild :: getCreateTime);
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()));
}
}
package com.clx.performance.dao.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnConfigMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam;
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 VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> implements VehicleWarnConfigDao {
@Override
public boolean updateConfig(VehicleWarnConfig item) {
return update(lUdWrapper()
.eq(VehicleWarnConfig::getId, item.getId())
.set(VehicleWarnConfig::getWarnName, item.getWarnName())
.set(VehicleWarnConfig::getWarnType, item.getWarnType())
.set(VehicleWarnConfig::getWarnLevel, item.getWarnLevel())
.set(VehicleWarnConfig::getInterval, item.getInterval())
.set(VehicleWarnConfig::getTimeoutRatio, item.getTimeoutRatio())
.set(VehicleWarnConfig::getLongitude, item.getLongitude())
.set(VehicleWarnConfig::getLatitude, item.getLatitude())
.set(VehicleWarnConfig::getAddress, item.getAddress())
.set(VehicleWarnConfig::getRadius, item.getRadius())
);
}
@Override
public boolean updateStatus(VehicleWarnConfig item) {
return update(lUdWrapper()
.eq(VehicleWarnConfig::getId, item.getId())
.set(VehicleWarnConfig::getStatus, item.getStatus())
);
}
@Override
public boolean updateDelete(VehicleWarnConfig item) {
return update(lUdWrapper()
.eq(VehicleWarnConfig::getId, item.getId())
.set(VehicleWarnConfig::getDeleteStatus, item.getDeleteStatus())
);
}
@Override
public Optional<VehicleWarnConfig> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(VehicleWarnConfig::getId, id)
.eq(VehicleWarnConfig::getDeleteStatus, VehicleWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<VehicleWarnConfig> findByName(String name) {
return Optional.of(name)
.map(item -> lQrWrapper()
.eq(VehicleWarnConfig::getWarnName, name)
.eq(VehicleWarnConfig::getDeleteStatus, VehicleWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<VehicleWarnConfig> listByWarnType(Integer warnType) {
return list(lQrWrapper().eq(VehicleWarnConfig::getWarnType, warnType));
}
@Override
public IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param) {
Page<VehicleWarnConfig> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Repository
public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> implements VehicleWarnInfoDao {
@Override
public boolean updateStatus(VehicleWarnInfo item) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getId, item.getId())
.set(VehicleWarnInfo::getStatus, item.getStatus())
);
}
@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
public Optional<VehicleWarnInfo> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(VehicleWarnInfo::getId, id)
.last("limit 1")
)
.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
public IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param) {
Page<VehicleWarnInfo> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class VehicleWarnLogDaoImpl extends BaseDaoImpl<VehicleWarnLogMapper, VehicleWarnLog, Integer> implements VehicleWarnLogDao {
@Override
public Optional<VehicleWarnLog> findById(Integer id) {
return null;
}
}
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)
);
}
}
package com.clx.performance.dao.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnUserEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnUserMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnUserParam;
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 VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, VehicleWarnUser, Integer> implements VehicleWarnUserDao {
@Override
public boolean updateUser(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getName, item.getName())
.set(VehicleWarnUser::getMobile, item.getMobile())
);
}
@Override
public boolean deleteUser(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getDeleteStatus, item.getDeleteStatus())
);
}
@Override
public boolean updateWarnType(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getWarmTypeJson, item.getWarmTypeJson())
);
}
@Override
public Optional<VehicleWarnUser> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(VehicleWarnUser::getId, id)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<VehicleWarnUser> findByMobile(String mobile) {
return Optional.of(mobile)
.map(item -> lQrWrapper()
.eq(VehicleWarnUser::getMobile, mobile)
.eq(VehicleWarnUser::getDeleteStatus, VehicleWarnUserEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<VehicleWarnUser> listAllEnable() {
return list(lQrWrapper()
.eq(VehicleWarnUser::getDeleteStatus, VehicleWarnUserEnum.DeleteStatus.NO.getCode())
);
}
@Override
public IPage<VehicleWarnUser> pageByParam(PageVehicleWarnUserParam param) {
Page<VehicleWarnUser> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
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();
}
package com.clx.performance.dao.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnConfigMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnConfigDao extends BaseDao<VehicleWarnConfigMapper, VehicleWarnConfig, Integer> {
boolean updateConfig(VehicleWarnConfig item);
boolean updateStatus(VehicleWarnConfig item);
boolean updateDelete(VehicleWarnConfig item);
Optional<VehicleWarnConfig> findById(Integer id);
Optional<VehicleWarnConfig> findByName(String name);
List<VehicleWarnConfig> listByWarnType(Integer warnType);
IPage<VehicleWarnConfig> pageByParam(PageVehicleWarnConfigParam param);
}
package com.clx.performance.dao.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnInfoMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnInfoDao extends BaseDao<VehicleWarnInfoMapper, VehicleWarnInfo, Integer> {
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> findByChildNoAndWarnConfigId(String childNo, Integer warnConfigId);
List<VehicleWarnInfo> listSuspendTimeout();
IPage<VehicleWarnInfo> pageByParam(PageVehicleWarnInfoParam param);
}
package com.clx.performance.dao.vehiclewarn;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
public interface VehicleWarnLogDao extends BaseDao<VehicleWarnLogMapper, VehicleWarnLog, Integer> {
Optional<VehicleWarnLog> findById(Integer id);
}
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);
}
package com.clx.performance.dao.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnUserMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnUserParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, VehicleWarnUser, Integer> {
boolean updateUser(VehicleWarnUser item);
boolean deleteUser(VehicleWarnUser item);
boolean updateWarnType(VehicleWarnUser item);
Optional<VehicleWarnUser> findById(Integer id);
Optional<VehicleWarnUser> findByMobile(String mobile);
List<VehicleWarnUser> listAllEnable();
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.esplus.mapper;
import com.clx.performance.esplus.model.DriverTraceESPlus;
import org.dromara.easyes.core.kernel.BaseEsMapper;
public interface DriverTraceESPlusMapper extends BaseEsMapper<DriverTraceESPlus> {
}
\ No newline at end of file
package com.clx.performance.esplus.mapper;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import org.dromara.easyes.core.kernel.BaseEsMapper;
public interface TruckTraceESPlusMapper extends BaseEsMapper<TruckTraceESPlus> {
}
\ No newline at end of file
package com.clx.performance.esplus.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;
import java.math.BigDecimal;
@Data
@IndexName("clx_trace_driver_trace_index1")
public class DriverTraceESPlus {
@IndexId(type= IdType.UUID)
private String id;
@ApiModelProperty("用户编号")
private Long userNo;
@ApiModelProperty("1-正常上传,2-离线上传")
private Integer dataType;
@IndexField(fieldType = FieldType.GEO_POINT)
private BigDecimal[] location; //位置
@ApiModelProperty("速度")
private BigDecimal speed;
@IndexField(fieldType = FieldType.DATE)
private String positionTime;
@IndexField(fieldType = FieldType.DATE)
private String createTime;
@IndexField(fieldType = FieldType.DATE)
private String modifiedTime;
}
\ No newline at end of file
package com.clx.performance.esplus.model;
import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;
import java.math.BigDecimal;
@Data
@IndexName(value = "clx_truck_trace")
public class TruckTraceESPlus {
@IndexId(type= IdType.UUID)
private String id;
@IndexField(fieldType = FieldType.KEYWORD)
private String truckNo; //车辆编号
private BigDecimal angle; //agl
private BigDecimal speed; //速度
private BigDecimal mileage; //里程
private BigDecimal height; //海拔
private BigDecimal[] location; //位置
@IndexField(fieldType = FieldType.DATE)
private String gpsTime; //时间
private String createTime;
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.clx.performance.job;
import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.service.trace.TruckTraceMqService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.user.feign.UserClxFeign;
......@@ -34,6 +35,9 @@ public class TruckTraceJob {
@Autowired
RedisTemplate redisTemplate;
@Autowired
private TruckTraceMqService truckTraceMqService;
/**
* 驾驶证过期
......@@ -98,5 +102,4 @@ public class TruckTraceJob {
}
}
}
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);
// }
// }
}
package com.clx.performance.listener.trace;
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.RabbitKeyTraceConstants;
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 10:30:49
* @Version: 1.0
*/
@Slf4j
@Component
public class TraceDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyTraceConstants.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.trace;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyTraceConstants;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
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 TruckTraceSyncListener {
@Autowired
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@RabbitListener(queues = RabbitKeyTraceConstants.TRUCK_TRACE_SYNC_QUEUE)
public void process(Message message) {
try{
log.info("轨迹, 车辆轨迹同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<TruckTraceSyncMqParam>>(){}).getData());
}catch (Exception e){
log.info("轨迹, 车辆轨迹同步失败",e);
}
}
private void process(TruckTraceSyncMqParam mq){
truckTraceMqHandlerService.truckTracSync(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.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;
@Mapper
public interface OrderChildMapper extends BaseMapper<OrderChild> {
String TABLE = "order_child";
/**
* 司机运单列表
......@@ -85,4 +86,32 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "getLossNet")
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.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnConfigParam;
import com.clx.performance.sqlProvider.vehiclewarn.VehicleWarnConfigSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface VehicleWarnConfigMapper extends BaseMapper<VehicleWarnConfig> {
String TABLE = "vehicle_warn_config";
/**
* @see VehicleWarnConfigSqlProvider#pageByParam(Page, PageVehicleWarnConfigParam)
*/
@SelectProvider(type = VehicleWarnConfigSqlProvider.class, method = "pageByParam")
IPage<VehicleWarnConfig> pageByParam(@Param("page") Page page, @Param("param") PageVehicleWarnConfigParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.vehiclewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.sqlProvider.vehiclewarn.VehicleWarnInfoSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface VehicleWarnInfoMapper extends BaseMapper<VehicleWarnInfo> {
String TABLE = "vehicle_warn_info";
/**
* @see VehicleWarnInfoSqlProvider#pageByParam(Page, PageVehicleWarnInfoParam)
*/
@SelectProvider(type = VehicleWarnInfoSqlProvider.class, method = "pageByParam")
IPage<VehicleWarnInfo> pageByParam(@Param("page") Page page, @Param("param") PageVehicleWarnInfoParam param);
}
\ 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.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VehicleWarnLogMapper extends BaseMapper<VehicleWarnLog> {
String TABLE = "vehicle_warn_log";
}
\ 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.mapper.vehiclewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnUserParam;
import com.clx.performance.sqlProvider.vehiclewarn.VehicleWarnUserSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface VehicleWarnUserMapper extends BaseMapper<VehicleWarnUser> {
String TABLE = "vehicle_warn_user";
/**
* @see VehicleWarnUserSqlProvider#pageByParam(Page, PageVehicleWarnUserParam)
*/
@SelectProvider(type = VehicleWarnUserSqlProvider.class, method = "pageByParam")
IPage<VehicleWarnUser> pageByParam(@Param("page") Page page, @Param("param") PageVehicleWarnUserParam param);
}
\ 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
package com.clx.performance.model.vehiclewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
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/25 13:24:56
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String warnName; //预警方案名称
private Integer warnType; //预警类型
private Integer warnLevel; //预警级别
@TableField(value = "`interval`")
private BigDecimal interval; //预警间隔(小时)
private BigDecimal timeoutRatio; //超时比例(%)
private BigDecimal longitude; //经度
private BigDecimal latitude; //纬度
private String address; //地址
private Integer radius; //半径(米)
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer status; //状态:1启用 2禁用
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
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.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 车辆预警信息表
* @Date: 2024/04/25 13:24:56
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnInfo implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private Integer warnType; //预警类型
private Integer warnLevel; //预警级别
private String orderGoodsNo; //货单编号
private String childNo; //运单编号
private Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址
private Integer receiveAddressId; //收货地址id
private String receiveAddress; //收货地址
private Integer childStatus; //运单状态
private Integer truckId; //车辆ID
private String truckNo; //车牌号
private Long driverUserNo; //司机用户编号
private String driverName; //司机姓名
private String driverMobile; //司机手机号
private LocalDateTime takeTime; //接单时间
private LocalDateTime suspendTime; //预警暂停时间
private LocalDateTime warnTime; //预警时间
private Integer status; //处理状态:1待处理 2已处理 3暂停预警
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
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/04/26 10:32:01
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer infoId; //预警信息id
private Integer type; //类型:1暂停预警 2处理预警
private String childNo; //运单编号
private String warnName; //预警名称
private LocalDateTime warnTime; //预警时间
private Integer warnRang; //预警屏蔽范围:1运单 2货单 3无预警
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private String content; //内容
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
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
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.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 车辆预警通知人员表
* @Date: 2024/04/25 13:24:56
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class VehicleWarnUser implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String name; //姓名
private String mobile; //手机
private String warmTypeJson; //预警配置
private Integer deleteStatus; //删除状态: 0-否;1-是
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
......@@ -4,6 +4,7 @@ import com.clx.performance.model.OrderChild;
public interface OrderChildPostService {
void orderChildAdd(String childNo);
void orderChildArriveReceiveAddress(OrderChild orderChild);
void orderChildDriverConfirm(OrderChild orderChild);
......
......@@ -427,8 +427,8 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChildLogService.saveDriverOrderChildLog(childNo, OrderChildLogEnum.Type.CREATED.getCode(),
OrderChildLogEnum.Type.CREATED.getMsg(), loginUserInfo.getUserNo(), loginUserInfo.getUserName());
// 发送mq 新增运单
orderChildMqService.orderChildAdd(orderChild.getChildNo());
// 司机接单后置逻辑
orderChildPostService.orderChildAdd(orderChild.getChildNo());
SaveOrderChildVO result = new SaveOrderChildVO();
result.setChildNo(childNo);
......
......@@ -9,6 +9,7 @@ import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildMqService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.service.vehiclewarn.VehicleWarnMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -26,6 +27,18 @@ public class OrderChildPostServiceImpl implements OrderChildPostService {
@Autowired
private BreakContractDriverRecordService breakContractDriverRecordService;
@Autowired
private VehicleWarnMqService vehicleWarnMqService;
@Override
public void orderChildAdd(String childNo) {
// 发送mq 新增运单
orderChildMqService.orderChildAdd(childNo);
// 发送mq (运单新增)
vehicleWarnMqService.orderChildAdd(childNo);
}
@Override
public void orderChildArriveReceiveAddress(OrderChild orderChild) {
// 保存违约记录
......
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.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnChildEnum;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
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.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
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.ArrayList;
import java.util.List;
@Slf4j
@Service
public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerService {
@Autowired
private ZjxlGpsService zjxlGpsService;
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
@Transactional(rollbackFor = Exception.class)
@Override
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());
if (list.isEmpty()) {return;}
List<TruckTraceESPlus> esList = new ArrayList<>();
for (TruckTraceDTO item : list) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(item.getTruckNo());
es.setAngle(item.getAngle());
es.setHeight(item.getHeight());
es.setLocation(new BigDecimal[]{item.getLocation()[0], item.getLocation()[1]});
es.setGpsTime(item.getGpsTime());
es.setMileage(item.getMileage());
es.setSpeed(item.getSpeed());
esList.add(es);
}
// 保存
truckTraceESPlusMapper.insertBatch(esList);
// 更新同步时间
vehicleWarnChildDao.updateTraceTime(vehicleWarnChild);
}
}
package com.clx.performance.service.impl.trace;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyTraceConstants;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqService;
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 TruckTraceMqServiceImpl implements TruckTraceMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void truckTracSync(String childNo, String truckNo, String beginTime, String endTime) {
TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam();
mq.setChildNo(childNo);
mq.setTruckNo(truckNo);
mq.setBeginTime(beginTime);
mq.setEndTime(endTime);
MqDelay delay = new MqDelay<>(RabbitKeyTraceConstants.DEFAULT_EXCHANGE, RabbitKeyTraceConstants.TRUCK_TRACE_SYNC_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyTraceConstants.DEFAULT_EXCHANGE, RabbitKeyTraceConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
package com.clx.performance.service.impl.trace;
import com.clx.performance.esplus.mapper.DriverTraceESPlusMapper;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.DriverTraceESPlus;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.struct.trace.DriverTraceStruct;
import com.clx.performance.struct.trace.TruckTraceStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import lombok.extern.slf4j.Slf4j;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class TruckTraceServiceImpl implements TruckTraceService {
// 停留速度
private static final Integer PARK_SPEED = 5;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
@Autowired
private DriverTraceESPlusMapper driverTraceESPlusMapper;
@Autowired
private TruckTraceStruct truckTraceStruct;
@Autowired
private DriverTraceStruct driverTraceStruct;
@Override
public List<DriverTruckTraceVO> listTruckTraceByTime(String truckNo, String beginTime, String endTime) {
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
);
List<DriverTruckTraceVO> traceList = truckTraceStruct.convert(list);
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
}
}
return traceList;
}
@Override
public List<DriverTraceVO> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
List<DriverTraceESPlus> list = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
);
List<DriverTraceVO> traceList = driverTraceStruct.convert(list);
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
}
}
return traceList;
}
@Override
public void truckTraceSave(TruckTraceAddParam param){
List<TruckTraceESPlus> list = new ArrayList<>();
for (TruckTraceAddParam.TruckTraceItem item : param.getTraceList()) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(item.getTruckNo());
es.setAngle(item.getAngle());
es.setHeight(item.getHeight());
es.setLocation(item.getLocation());
es.setGpsTime(item.getGpsTime());
es.setMileage(item.getMileage());
es.setSpeed(item.getSpeed());
es.setCreateTime(LocalDateTimeUtils.formatTime());
list.add(es);
}
truckTraceESPlusMapper.insertBatch(list);
}
@Override
public void driverTraceSave(DriverTraceAddParam param){
List<DriverTraceESPlus> list = new ArrayList<>();
for (DriverTraceAddParam.DriverTraceItem item : param.getTraceList()) {
DriverTraceESPlus es = new DriverTraceESPlus();
es.setUserNo(item.getUserNo());
es.setDataType(item.getDataType());
es.setLocation(item.getLocation());
es.setPositionTime(item.getGpsTime());
es.setCreateTime(LocalDateTimeUtils.formatTime());
es.setModifiedTime(es.getCreateTime());
list.add(es);
}
driverTraceESPlusMapper.insertBatch(list);
}
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
return list.get(0).getLocation();
}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
return list1.get(0).getLocation();
}
return null;
}
@Override
public int getParkTime(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
.limit(1)
);
if (!list.isEmpty()){
list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, list.get(0).getGpsTime())
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(0).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime())).toMinutes();
}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.eq(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, list1.get(0).getPositionTime())
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime())).toMinutes();
}
return 0;
}
}
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.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.param.pc.vehiclewarn.*;
import com.clx.performance.service.vehiclewarn.VehicleWarnConfigService;
import com.clx.performance.struct.vehiclewarn.VehicleWarnConfigStruct;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnConfigVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
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.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnConfigServiceImpl implements VehicleWarnConfigService {
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
private VehicleWarnConfigStruct vehicleWarnConfigStruct;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(VehicleWarnConfigAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Optional<VehicleWarnConfig> optional = vehicleWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.VEHICLE_WARN_CONFIG_EXIST);
}
VehicleWarnConfig vehicleWarnConfig = new VehicleWarnConfig();
vehicleWarnConfig.setWarnName(param.getWarnName());
vehicleWarnConfig.setWarnType(param.getWarnType());
vehicleWarnConfig.setWarnLevel(param.getWarnLevel());
vehicleWarnConfig.setInterval(param.getInterval());
vehicleWarnConfig.setTimeoutRatio(param.getTimeoutRatio());
vehicleWarnConfig.setLongitude(param.getLongitude());
vehicleWarnConfig.setLatitude(param.getLatitude());
vehicleWarnConfig.setAddress(param.getAddress());
vehicleWarnConfig.setRadius(param.getRadius());
vehicleWarnConfig.setCreateBy(loginUserInfo.getUserName());
vehicleWarnConfigDao.saveEntity(vehicleWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateConfig(VehicleWarnConfigUpdateParam param) {
VehicleWarnConfig vehicleWarnConfig = vehicleWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (!Objects.equals(vehicleWarnConfig.getWarnName(), param.getWarnName())){
Optional<VehicleWarnConfig> optional = vehicleWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.VEHICLE_WARN_CONFIG_EXIST);
}
}
vehicleWarnConfig.setWarnName(param.getWarnName());
vehicleWarnConfig.setWarnType(param.getWarnType());
vehicleWarnConfig.setWarnLevel(param.getWarnLevel());
vehicleWarnConfig.setInterval(param.getInterval());
vehicleWarnConfig.setTimeoutRatio(param.getTimeoutRatio());
vehicleWarnConfig.setLongitude(param.getLongitude());
vehicleWarnConfig.setLatitude(param.getLatitude());
vehicleWarnConfig.setAddress(param.getAddress());
vehicleWarnConfig.setRadius(param.getRadius());
vehicleWarnConfigDao.updateConfig(vehicleWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateStatus(VehicleWarnConfigStatusUpdateParam param) {
VehicleWarnConfig vehicleWarnConfig = vehicleWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnConfig.setStatus(param.getStatus());
vehicleWarnConfigDao.updateStatus(vehicleWarnConfig);
}
@Override
public void deleteConfig(VehicleWarnConfigDeleteUpdateParam param) {
VehicleWarnConfig vehicleWarnConfig = vehicleWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnConfig.setDeleteStatus(VehicleWarnConfigEnum.DeleteStatus.YES.getCode());
vehicleWarnConfigDao.updateDelete(vehicleWarnConfig);
}
@Override
public VehicleWarnConfigVO getConfig(Integer id) {
return vehicleWarnConfigStruct.convert(vehicleWarnConfigDao.findById(id).orNull());
}
@Override
public IPage<VehicleWarnConfigVO> pageConfig(PageVehicleWarnConfigParam param) {
return vehicleWarnConfigStruct.convertPage(vehicleWarnConfigDao.pageByParam(param));
}
@Override
public List<VehicleWarnConfigVO.WarnTypeItem> listWarnType() {
List<VehicleWarnConfigVO.WarnTypeItem> list = new ArrayList<>();
for (VehicleWarnConfigEnum.WarnType item : VehicleWarnConfigEnum.WarnType.values()) {
list.add(new VehicleWarnConfigVO.WarnTypeItem(item.getCode(), item.getMsg()));
}
return list;
}
}
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;
}
}
package com.clx.performance.service.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnLogEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoSuspendUpdateParam;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.service.vehiclewarn.VehicleWarnInfoService;
import com.clx.performance.struct.vehiclewarn.VehicleWarnInfoStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.clx.performance.vo.pc.vehiclewarn.VehicleTraceVO;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnInfoVO;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
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;
@Slf4j
@Service
public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
private final Integer TRUCK_TRACE_DAY_MAX = 3;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnLogDao vehicleWarnLogDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private VehicleWarnInfoStruct vehicleWarnInfoStruct;
@Autowired
private TruckTraceService truckTraceService;
@Transactional(rollbackFor = Exception.class)
@Override
public void updateSuspend(VehicleWarnInfoSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnInfo.setSuspendTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, param.getWarnRang());
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
vehicleWarnLog.setInfoId(vehicleWarnInfo.getId());
vehicleWarnLog.setType(VehicleWarnLogEnum.Type.SUSPEND.getCode());
vehicleWarnLog.setContent(VehicleWarnLogEnum.Type.SUSPEND.getMsg());
vehicleWarnLog.setChildNo(vehicleWarnInfo.getChildNo());
vehicleWarnLog.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnLog.setWarnRang(param.getWarnRang());
vehicleWarnLog.setWarnEndTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnLog.setCreateBy(loginUserInfo.getUserName());
vehicleWarnLogDao.saveEntity(vehicleWarnLog);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateResolve(VehicleWarnInfoResolveUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnInfo.setStatus(VehicleWarnInfoEnum.Status.RESOLVE.getCode());
vehicleWarnInfoDao.updateStatus(vehicleWarnInfo);
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
vehicleWarnLog.setInfoId(vehicleWarnInfo.getId());
vehicleWarnLog.setType(VehicleWarnLogEnum.Type.RESOLVE.getCode());
vehicleWarnLog.setContent(VehicleWarnLogEnum.Type.RESOLVE.getMsg());
vehicleWarnLog.setChildNo(vehicleWarnInfo.getChildNo());
vehicleWarnLog.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnLog.setCreateBy(loginUserInfo.getUserName());
vehicleWarnLogDao.saveEntity(vehicleWarnLog);
}
@Override
public VehicleTraceVO getTrace(Integer id) {
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(id).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderChild orderChild = orderChildDao.getByChildNo(vehicleWarnInfo.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
LocalDateTime beginTime = vehicleWarnInfo.getTakeTime();
LocalDateTime endTime = LocalDateTime.now();
if (orderChild.getArriveSendTime() != null) {endTime = orderChild.getArriveSendTime();}
if (orderChild.getLoadTime() != null) {endTime = orderChild.getLoadTime();}
if (orderChild.getArriveReceiveTime() != null) {endTime = orderChild.getArriveReceiveTime();}
if (orderChild.getUnloadTime() != null) {endTime = orderChild.getUnloadTime();}
if (orderChild.getConfirmTime() != null) {endTime = orderChild.getConfirmTime();}
if (orderChild.getSettleTime() != null) {endTime = orderChild.getSettleTime();}
if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();}
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<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();
result.setDriverTraceList(driverTraceList);
result.setTruckTraceList(truckTraceList);
return result;
}
@Override
public VehicleWarnInfoVO getInfo(Integer id) {
return vehicleWarnInfoStruct.convert(vehicleWarnInfoDao.findById(id).orNull());
}
@Override
public IPage<VehicleWarnInfoVO> pageInfo(PageVehicleWarnInfoParam param) {
return vehicleWarnInfoStruct.convertPage(vehicleWarnInfoDao.pageByParam(param));
}
}
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);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论