提交 3b81e6f4 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v16.3_line_warn_20240528' into test

# Conflicts: # performance-web/src/main/java/com/clx/performance/controller/temp/TempController.java # performance-web/src/main/java/com/clx/performance/controller/temp/TempTraceController.java # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/esplus/model/DriverTraceESPlus.java # performance-web/src/main/java/com/clx/performance/mapper/OrderChildMapper.java # performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceMqHandlerServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceServiceImpl.java # performance-web/src/main/java/com/clx/performance/service/trace/TruckTraceService.java
......@@ -29,6 +29,10 @@ public enum OrderGoodsStatusEnum {
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(Integer code) {
if (code == null) {return null;}
return getByCode(code).map(Status::getName).orElse(null);
}
}
......
......@@ -35,6 +35,8 @@ public enum ResultEnum implements com.msl.common.enums.ResultEnum {
VEHICLE_WARN_USER_EXIST(1201, "联系方式已存在"),
VEHICLE_WARN_CONFIG_EXIST(1201, "配置名称已存在"),
LINE_WARN_USER_EXIST(1301, "联系方式已存在"),
LINE_WARN_CONFIG_EXIST(1302, "配置名称已存在"),
......
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnConfigEnum {
;
@Getter
@AllArgsConstructor
public enum WarnType {
TAKE(1, "接单预警"),
LOAD(2, "装车预警"),
UNLOAD(3, "卸车预警"),
CONGESTION(4, "拥堵预警"),
WEATHER(5, "天气预警"),
CHILD_ABNORMAL(6, "运单异常"),
LINE_ABNORMAL(7, "线路异常"),
;
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.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnInfoEnum {
;
@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.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnLogEnum {
;
@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);
}
}
}
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnOrderGoodsEnum {
;
@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.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnRangEnum {
;
@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);
}
}
}
......@@ -3,6 +3,9 @@ package com.clx.performance.enums.vehiclewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum VehicleWarnUserEnum {
;
......@@ -18,5 +21,22 @@ public enum VehicleWarnUserEnum {
private final String msg;
}
@Getter
@AllArgsConstructor
public enum NoticeStatus {
NO(0, "禁用"),
YES(1, "开启"),
;
private final Integer code;
private final String msg;
public static Optional<NoticeStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(NoticeStatus::getMsg).orElse(null);
}
}
}
package com.clx.performance.param.mq.linewarn;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import lombok.*;
import java.util.Arrays;
import java.util.Optional;
/**
* @Author: aiqingguo
* @Description: 通知
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class LineWarnLineReportMqParam {
private Integer sendSystemAddressId;
private Integer receiveSystemAddressId;
private Integer reportType;
private Integer estimatedTravelTime; //预计通行时间
@Getter
@AllArgsConstructor
public enum ReportType {
LINE(1, "线路异常"),
JAM(2, "拥堵预警"),
;
private final Integer code;
private final String msg;
public static Optional<ReportType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(ReportType::getMsg).orElse(null);
}
}
}
package com.clx.performance.param.mq.linewarn;
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 LineWarnLineWarnMqParam {
private String orderGoodsNo; //货单编号
}
package com.clx.performance.param.mq.linewarn;
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 LineWarnNoticeMqParam {
private Integer infoId; //id
}
package com.clx.performance.param.mq.linewarn;
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 LineWarnOrderChildWarnMqParam {
private String orderGoodsNo;
private String childNo;
}
package com.clx.performance.param.mq.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2024-5-31 13:45:10
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class LineWarnOrderGoodsAddMqParam {
private String orderGoodsNo; //货单编号
}
package com.clx.performance.param.pc.linewarn;
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 LineWarnConfigAddParam {
@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.1")
@NotNull(message = "预警间隔不能为空")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "交通增加时间(分钟)", example = "1")
private Integer congestionTime;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigDeleteUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigStatusUpdateParam {
@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.linewarn;
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 LineWarnConfigUpdateParam {
@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.1")
@NotNull(message = "预警间隔不能为空")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "交通增加时间(分钟)", example = "1")
private Integer congestionTime;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnInfoResolveUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.linewarn;
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 LineWarnInfoSuspendUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
@NotBlank(message = "预警屏蔽结束时间不能为空")
private String warnEndTime;
}
package com.clx.performance.param.pc.linewarn;
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 PageLineWarnConfigParam 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.linewarn;
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 PageLineWarnInfoParam 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 orderGoodsNo;
@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;
}
......@@ -18,6 +18,8 @@ public class PageVehicleWarnInfoParam extends PageParam {
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "货单编号", example = "1000")
private String orderGoodsNo;
@ApiModelProperty(value = "运单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
......
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 PageVehicleWarnRangeParam extends PageParam {
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3全部", example = "")
private Integer warnRang;
@ApiModelProperty(value = "暂停对象", example = "10001")
private String suspendObject;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
}
......@@ -17,4 +17,6 @@ public class PageVehicleWarnUserParam extends PageParam {
@ApiModelProperty(value = "手机", example = "13000000000")
private String mobile;
@ApiModelProperty(value = "通知状态: 0禁用 1开启", example = "1")
private Integer noticeStatus;
}
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 VehicleWarnRangeResumeUpdateParam {
@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 VehicleWarnRangeSuspendUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
@NotBlank(message = "预警屏蔽结束时间不能为空")
private String warnEndTime;
}
......@@ -17,7 +17,9 @@ public class VehicleWarnUserConfigUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "选中报警类型列表")
@ApiModelProperty(value = "运单预警类型列表")
private List<VehicleWarnUserVO.WarnTypeItem> warnTypeList;
@ApiModelProperty(value = "线路预警类型列表")
private List<VehicleWarnUserVO.WarnTypeItem> lineWarnTypeList;
}
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 VehicleWarnUserStatusUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "通知状态: 0禁用 1开启", example = "1")
@NotNull(message = "状态不能为空")
private Integer noticeStatus;
}
package com.clx.performance.vo.pc.linewarn;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @Author: aiqinguo
* @Description: 线路预警配置
* @Date: 2024/05/29 10:55:33
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class LineWarnConfigVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警方案名称", example = "接单预警")
private String warnName;
@ApiModelProperty(value = "预警类型: 1接单预警 2装车预警 3卸车预警 4拥堵预警 5天气预警 6运单异常 7线路异常", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型: 1接单预警 2装车预警 3卸车预警 4拥堵预警 5天气预警 6运单异常 7线路异常", example = "接单预警")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return LineWarnConfigEnum.WarnType.getMsgByCode(warnType);
}
@ApiModelProperty(value = "预警级别", example = "")
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.1")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "交通增加时间(分钟)", example = "1")
private Integer congestionTime;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
private Integer status;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "启用")
private String statusMsg;
public String getStatusMsg() {
return LineWarnConfigEnum.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.linewarn;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
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 LineWarnInfoVO {
@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线路异常", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型", example = "1")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return LineWarnConfigEnum.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 = "100000")
private String orderGoodsNo;
@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 = "")
private String warnTime;
@ApiModelProperty(value = "暂停时间", example = "")
private String suspendTime;
@ApiModelProperty(value = "天气", example = "暴雨")
private String weather;
@ApiModelProperty(value = "挂单数", example = "1")
private Integer pengNum;
@ApiModelProperty(value = "接单数", example = "1")
private Integer takeNum;
@ApiModelProperty(value = "到达货源地车数", example = "1")
private Integer arriveSendNum;
@ApiModelProperty(value = "装车车数", example = "1")
private Integer loadNum;
@ApiModelProperty(value = "到达目的地车数", example = "1")
private Integer arriveReceiveNum;
@ApiModelProperty(value = "卸车车数", example = "1")
private Integer unloadNum;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status;
public Integer getStatus() {
if (Objects.equals(status, LineWarnInfoEnum.Status.RESOLVE.getCode())) {return LineWarnInfoEnum.Status.RESOLVE.getCode();}
if (StringUtils.isNotBlank(suspendTime)){
if (LocalDateTimeUtil.parse(suspendTime,"yyyy-MM-dd HH:mm:ss").isBefore(LocalDateTime.now())) {
return LineWarnInfoEnum.Status.INIT.getCode();
} else {
return LineWarnInfoEnum.Status.SUSPEND.getCode();
}
}
return LineWarnInfoEnum.Status.INIT.getCode();
}
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "待处理")
private String statusMsg;
public String getStatusMsg() {
return LineWarnInfoEnum.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.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023/2/28 12:00
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class LineWarnRoutePositionVO {
@ApiModelProperty(value = "经度", example = "116.0000000000")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "39.0000000000")
private BigDecimal latitude;
@ApiModelProperty(value = "耗时(秒)", example = "278")
private Integer duration;
}
package com.clx.performance.vo.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
/**
* @Author: aiqingguo
* @Description:
* @Date: 2023/2/28 12:00
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class LineWarnRouteVO {
@ApiModelProperty("线路")
private List<LineWarnRoutePositionVO> positonList;
}
package com.clx.performance.vo.pc.linewarn;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnTraceVO {
@ApiModelProperty(value = "货单编号", example = "10000")
private String orderGoodsNo;
@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("发货地址经度")
private BigDecimal sendLongitude;
@ApiModelProperty("发货地址纬度")
private BigDecimal sendLatitude;
@ApiModelProperty("收货地址经度")
private BigDecimal receiveLongitude;
@ApiModelProperty("收货地址纬度")
private BigDecimal receiveLatitude;
@ApiModelProperty("货单状态")
private Integer orderGoodsStatus;
@ApiModelProperty("货单状态")
private String orderGoodsStatusMsg;
public String getOrderGoodsStatusMsg() {
return OrderGoodsStatusEnum.Status.getMsgByCode(orderGoodsStatus);
}
@ApiModelProperty("货单吨数")
private BigDecimal extractWeight;
@ApiModelProperty("装车吨数")
private BigDecimal loadWeight;
@ApiModelProperty("卸车吨数")
private BigDecimal unloadWeight;
@ApiModelProperty("车辆列表")
private List<LineWarnTruckTraceInfoVO> truckList;
@ApiModelProperty("推荐线路")
private LineWarnRouteVO route;
}
package com.clx.performance.vo.pc.linewarn;
import com.clx.performance.enums.OrderChildEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnTruckTraceInfoVO {
@ApiModelProperty(value = "运单编号", example = "100000")
private String childNo;
@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 = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "运单状态", example = "1")
private Integer status;
@ApiModelProperty(value = "运单状态", example = "1")
private String statusMsg;
public String getStatusMsg() {
return OrderChildEnum.Status.getMsgByCode(status);
}
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("纬度")
private BigDecimal latitude;
}
\ No newline at end of file
......@@ -48,6 +48,8 @@ public class VehicleWarnInfoVO {
if (warnLevel == 3) {return "三级";}
return null;
}
@ApiModelProperty(value = "货单编号", example = "1000")
private String orderGoodsNo;
@ApiModelProperty(value = "运单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "发货地址id", example = "1")
......
package com.clx.performance.vo.pc.vehiclewarn;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Objects;
/**
* @Author: aiqinguo
* @Description: 预警范围
* @Date: 2024/06/04 18:49:39
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class VehicleWarnRangDTO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警配置id", example = "1")
private Integer warnConfigId;
@ApiModelProperty(value = "预警名称", example = "运单预警")
private String warnName;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3全部", example = "1")
private Integer warnRang;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3全部", example = "1")
private String warnRangMsg;
public String getWarnRangMsg() {
return VehicleWarnRangEnum.WarnRange.getMsgByCode(warnRang);
}
@ApiModelProperty(value = "货单编号", example = "10000")
private String orderGoodsNo;
@ApiModelProperty(value = "运单编号", example = "10001")
private String childNo;
@ApiModelProperty(value = "暂停对象", example = "10001")
private String suspendObject;
public String getSuspendObject() {
if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.CHILD.getCode())) {return childNo;}
if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())) {return orderGoodsNo;}
return "";
}
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
private String warnEndTime;
@ApiModelProperty(value = "状态:1有效 2无效", example = "")
private Integer status;
@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.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnUserEnum;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
......@@ -29,7 +31,13 @@ public class VehicleWarnUserVO {
private String name;
@ApiModelProperty(value = "手机", example = "13000000000")
private String mobile;
@ApiModelProperty(value = "通知状态: 0禁用 1开启", example = "1")
private Integer noticeStatus;
@ApiModelProperty(value = "通知状态: 0禁用 1开启", example = "1")
private String noticeStatusMsg;
public String getNoticeStatusMsg() {
return VehicleWarnUserEnum.NoticeStatus.getMsgByCode(noticeStatus);
}
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
......@@ -37,7 +45,7 @@ public class VehicleWarnUserVO {
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
@ApiModelProperty(value = "通知配置列表")
@ApiModelProperty(value = "运单通知配置列表")
private List<WarnTypeItem> warnTypeItemList;
public List<WarnTypeItem> getWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(warnTypeJson, Integer.class);
......@@ -54,6 +62,23 @@ public class VehicleWarnUserVO {
return list;
}
@ApiModelProperty(value = "线路通知配置列表")
private List<WarnTypeItem> lineWarnTypeItemList;
public List<WarnTypeItem> getLineWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(lineWarnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
for (LineWarnConfigEnum.WarnType item : LineWarnConfigEnum.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 warnTypeJson;
......
......@@ -33,4 +33,7 @@ public class ClxMessageConfig {
private String vehicleWarnTemplateCode;
//车辆报警渠道id
private Integer vehicleWarnChannelId;
//线路报警短信模板
private String lineWarnTemplateCode;
}
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
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 RabbitLineWarnConfig {
@Bean
public DirectExchange lineWarnDefaultExchange() {
return new DirectExchange(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue lineWarnDefaultDelayQueue() {
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", RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyLineWarnConstants.DEFAULT_DELAY_QUEUE,
true, false, false, params);
}
@Bean
public Binding lineWarnDefaultDelayQueueBinding() {
return BindingBuilder.bind(lineWarnDefaultDelayQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue lineWarnDefaultDeadQueue() {
return new Queue(RabbitKeyLineWarnConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding lineWarnDefaultDeadQueueBinding() {
return BindingBuilder.bind(lineWarnDefaultDeadQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 新增
*/
@Bean
public Queue lineWarnChildAddQueue() {
return new Queue(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_QUEUE);
}
@Bean
public Binding lineWarnChildAddQueueBinding() {
return BindingBuilder.bind(lineWarnChildAddQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY);
}
/**
* 线路预警
*/
@Bean
public Queue lineWarnQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_QUEUE);
}
@Bean
public Binding lineWarnQueueBinding() {
return BindingBuilder.bind(lineWarnQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY);
}
/**
* 线路预警通知
*/
@Bean
public Queue lineWarnNoticeQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_QUEUE);
}
@Bean
public Binding lineWarnNoticeQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY);
}
/**
* 线路上报
*/
@Bean
public Queue lineWarnLineReportQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_LINE_REPORT_QUEUE);
}
@Bean
public Binding lineWarnLineReportQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_LINE_REPORT_ROUTING_KEY);
}
/**
* 异常运单
*/
@Bean
public Queue lineWarnOrderChildWarnQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_ORDER_CHILD_WARN_QUEUE);
}
@Bean
public Binding lineWarnOrderChildWarnQueueBinding() {
return BindingBuilder.bind(lineWarnOrderChildWarnQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_ORDER_CHILD_WARN_ROUTING_KEY);
}
}
package com.clx.performance.constant;
/**
* @Author: aiqingguo
* @Description: 线路预警-mq
* @Date: 2023-10-19 15:10:10
* @Version: 1.0
*/
public class RabbitKeyLineWarnConstants {
private static final String PREFIX = "clx-performance.lineWarn.";
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 RabbitKeyLineWarnConstants() {
}
/**
* 缺省交换机
*/
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_GOODS_ADD_QUEUE = PREFIX +"orderGoods.add"+QUEUE;
public static final String ORDER_GOODS_ADD_ROUTING_KEY = PREFIX +"orderGoods.add"+QUEUE_ROUTING_KEY;
/**
* 车辆预警
*/
public static final String LINE_WARN_QUEUE = PREFIX +"line.warn"+QUEUE;
public static final String LINE_WARN_ROUTING_KEY = PREFIX +"line.warn"+QUEUE_ROUTING_KEY;
/**
* 线路预警通知
*/
public static final String LINE_WARN_NOTICE_QUEUE = PREFIX +"lineWarn.notice"+QUEUE;
public static final String LINE_WARN_NOTICE_ROUTING_KEY = PREFIX +"lineWarn.notice"+QUEUE_ROUTING_KEY;
/**
* 线路上报
*/
public static final String LINE_WARN_LINE_REPORT_QUEUE = PREFIX +"lineWarn.lineReport"+QUEUE;
public static final String LINE_WARN_LINE_REPORT_ROUTING_KEY = PREFIX +"lineWarn.lineReport"+QUEUE_ROUTING_KEY;
/**
* 运单异常
*/
public static final String LINE_WARN_ORDER_CHILD_WARN_QUEUE = PREFIX +"lineWarn.orderChildWarn"+QUEUE;
public static final String LINE_WARN_ORDER_CHILD_WARN_ROUTING_KEY = PREFIX +"lineWarn.orderChildWarn"+QUEUE_ROUTING_KEY;
}
package com.clx.performance.controller.pc.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnConfigService;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
import com.msl.common.base.PageData;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
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;
import java.util.Objects;
@Slf4j
@RestController
@Validated
@Api(tags = "线路预警-预警配置")
@RequestMapping(value="/pc/lineWarnConfig")
public class LineWarnConfigController {
@Autowired
private LineWarnConfigService lineWarnConfigService;
@ApiOperation(value = "新增配置", notes = "<br>By:艾庆国")
@PostMapping("/saveConfig")
public Result<Void> saveConfig(@RequestBody @Validated LineWarnConfigAddParam param) {
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.TAKE.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.LOAD.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.UNLOAD.getCode())
){
if (Objects.isNull(param.getTimeRatio())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "时间占比不能为空");}
if (Objects.isNull(param.getTaskCompleteRatio())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "任务完成占比不能为空");}
}
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.CONGESTION.getCode())
){
if (Objects.isNull(param.getCongestionTime())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "交通增加时间不能为空");}
}
lineWarnConfigService.saveConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置", notes = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated LineWarnConfigUpdateParam param) {
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.TAKE.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.LOAD.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.UNLOAD.getCode())
){
if (Objects.isNull(param.getTimeRatio())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "时间占比不能为空");}
if (Objects.isNull(param.getTaskCompleteRatio())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "任务完成占比不能为空");}
}
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.CONGESTION.getCode())
){
if (Objects.isNull(param.getCongestionTime())){
throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "交通增加时间不能为空");}
}
lineWarnConfigService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置状态", notes = "<br>By:艾庆国")
@PostMapping("/updateStatus")
public Result<Void> updateStatus(@RequestBody @Validated LineWarnConfigStatusUpdateParam param) {
lineWarnConfigService.updateStatus(param);
return Result.ok();
}
@ApiOperation(value = "删除配置", notes = "<br>By:艾庆国")
@PostMapping("/deleteConfig")
public Result<Void> deleteConfig(@RequestBody @Validated LineWarnConfigDeleteUpdateParam param) {
lineWarnConfigService.deleteConfig(param);
return Result.ok();
}
@ApiOperation(value = "获取配置信息",notes = "<br>By:艾庆国")
@GetMapping("/getConfig")
public Result<LineWarnConfigVO> getConfig(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(lineWarnConfigService.getConfig(id));
}
@ApiOperation(value = "分页搜索配置列表",notes = "<br>By:艾庆国")
@PostMapping("/pageConfig")
public Result<PageData<LineWarnConfigVO>> pageConfig(@RequestBody @Validated PageLineWarnConfigParam param) {
IPage<LineWarnConfigVO> page = lineWarnConfigService.pageConfig(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "预警类型下拉",notes = "<br>By:艾庆国")
@GetMapping("/listWarnType")
public Result<List<LineWarnConfigVO.WarnTypeItem>> listWarnType() {
return Result.ok(lineWarnConfigService.listWarnType());
}
}
package com.clx.performance.controller.pc.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnInfoService;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
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/lineWarnInfo")
public class LineWarnInfoController {
@Autowired
private LineWarnInfoService lineWarnInfoService;
@ApiOperation(value = "更新预警暂停", notes = "<br>By:艾庆国")
@PostMapping("/updateSuspend")
public Result<Void> updateSuspend(@RequestBody @Validated LineWarnInfoSuspendUpdateParam param) {
lineWarnInfoService.updateSuspend(param);
return Result.ok();
}
@ApiOperation(value = "更新处理", notes = "<br>By:艾庆国")
@PostMapping("/updateResolve")
public Result<Void> updateConfig(@RequestBody @Validated LineWarnInfoResolveUpdateParam param) {
lineWarnInfoService.updateResolve(param);
return Result.ok();
}
@ApiOperation(value = "获取预警信息",notes = "<br>By:艾庆国")
@GetMapping("/getInfo")
public Result<LineWarnInfoVO> getInfo(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(lineWarnInfoService.getInfo(id));
}
@ApiOperation(value = "分页搜索预警信息列表",notes = "<br>By:艾庆国")
@PostMapping("/pageInfo")
public Result<PageData<LineWarnInfoVO>> pageInfo(@RequestBody @Validated PageLineWarnInfoParam param) {
IPage<LineWarnInfoVO> page = lineWarnInfoService.pageInfo(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.pc.linewarn;
import com.clx.performance.service.linewarn.LineWarnTraceService;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@Validated
@Api(tags = "线路预警-轨迹信息")
@RequestMapping(value="/pc/lineWarnInfo")
public class LineWarnTraceController {
@Autowired
private LineWarnTraceService lineWarnTraceService;
@ApiOperation(value = "获取轨迹信息",notes = "<br>By:艾庆国")
@GetMapping("/getTraceInfo")
public Result<LineWarnTraceVO> getTraceInfo(@NotNull(message = "货单编号不能为空") @Validated String orderGoodsNo) {
return Result.ok(lineWarnTraceService.getTraceInfo(orderGoodsNo));
}
}
package com.clx.performance.controller.pc.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnRangeParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnRangeResumeUpdateParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnRangeSuspendUpdateParam;
import com.clx.performance.service.vehiclewarn.VehicleWarnRangeService;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnRangDTO;
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/vehicleWarnRange")
public class VehicleWarnRangeController {
@Autowired
private VehicleWarnRangeService vehicleWarnRangeService;
@ApiOperation(value = "更新预警暂停", notes = "<br>By:艾庆国")
@PostMapping("/updateSuspend")
public Result<Void> updateSuspend(@RequestBody @Validated VehicleWarnRangeSuspendUpdateParam param) {
vehicleWarnRangeService.updateSuspend(param);
return Result.ok();
}
@ApiOperation(value = "更新预警解除", notes = "<br>By:艾庆国")
@PostMapping("/updateResume")
public Result<Void> updateResume(@RequestBody @Validated VehicleWarnRangeResumeUpdateParam param) {
vehicleWarnRangeService.updateResume(param);
return Result.ok();
}
@ApiOperation(value = "获取暂停信息",notes = "<br>By:艾庆国")
@GetMapping("/getRange")
public Result<VehicleWarnRangDTO> getRange(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(vehicleWarnRangeService.getRange(id));
}
@ApiOperation(value = "分页搜索预警暂停列表",notes = "<br>By:艾庆国")
@PostMapping("/pageRange")
public Result<PageData<VehicleWarnRangDTO>> pageRange(@RequestBody @Validated PageVehicleWarnRangeParam param) {
IPage<VehicleWarnRangDTO> page = vehicleWarnRangeService.pageRange(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
......@@ -49,7 +49,8 @@ public class VehicleWarnUserController {
@ApiOperation(value = "更新通知配置", notes = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated VehicleWarnUserConfigUpdateParam param) {
if (param.getWarnTypeList() == null) {param.setWarnTypeList(new ArrayList<>());}
if (param.getLineWarnTypeList() == null) {param.setLineWarnTypeList(new ArrayList<>());}
vehicleWarnUserService.updateConfig(param);
return Result.ok();
}
......@@ -60,6 +61,12 @@ public class VehicleWarnUserController {
vehicleWarnUserService.deleteUser(param);
return Result.ok();
}
@ApiOperation(value = "更新通知状态", notes = "<br>By:艾庆国")
@PostMapping("/updateNoticeStatus")
public Result<Void> updateNoticeStatus(@RequestBody @Validated VehicleWarnUserStatusUpdateParam param) {
vehicleWarnUserService.updateNoticeStatus(param);
return Result.ok();
}
@ApiOperation(value = "获取人员信息",notes = "<br>By:艾庆国")
@GetMapping("/getUser")
......
......@@ -4,12 +4,16 @@ import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.batch.ClinkBatchMessageReq;
import com.clx.message.req.message.ClinkMessageReq;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.open.sdk.callback.message.OrderChildSyncMessage;
import com.clx.performance.extranal.transport.TransportService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.listener.OrderChildDtsListener;
import com.clx.performance.service.TempService;
import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.service.TempService;
import com.clx.performance.service.child.FeignOrderChildService;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -69,6 +73,9 @@ public class TempController {
sb.append(childNo);
sb.append(";请尽快核实情况");
OrderChildSyncMessage message = new OrderChildSyncMessage();
message.setId(1);
orderChildDtsListener.thirdpartySync(message);
String content = sb.toString();
req.setChannelId(clxMessageConfig.getChannelId());
......
package com.clx.performance.controller.temp;
import com.clx.performance.service.linewarn.LineWarnMqService;
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;
/**
* @Author: aiqingguo
* @Description: 临时接口
* @Date: 2023-8-21 12:10:16
* @Version: 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/temp/lineWarn")
public class TempLineWarnController {
@Autowired
private LineWarnMqService lineWarnMqService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@PostMapping("/test")
public Result test() {
return Result.ok();
}
@ApiOperation(value = "运单异常", notes = "<br>By:艾庆国")
@PostMapping("/orderChildWarn")
public Result orderChildWarn(String orderGoodsNo, String childNo) {
lineWarnMqService.orderChildWarn(orderGoodsNo, childNo);
return Result.ok();
}
}
......@@ -20,6 +20,12 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
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.math.BigDecimal;
import java.util.List;
......
......@@ -2,6 +2,7 @@ package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
......@@ -172,10 +173,23 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
List<OrderChild> listByChildNoList(List<String> childNoList);
List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList);
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo);
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
List<LineWarnOrderChildStatisticsDTO>sumTakeNumByOrderGoodsNoList(List<String> orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO>sumArriveSendNumByOrderGoodsNoList(List<String> orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO>sumLoadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO>sumArriveRecieveNumByOrderGoodsNoList(List<String> orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO>sumUnloadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo);
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild;
......@@ -543,9 +544,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime) {
public Integer loadTimeAvg(Integer sendAddressId, Integer receiveAddressId, Integer sendSystemAddressId, Integer receiveSystemAddressId, String beginTime) {
return baseMapper.loadTimeAvg(sendAddressId,receiveAddressId,
sendSystemAddressId,receiveSystemAddressId,
beginTime);
......@@ -567,4 +566,53 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
public MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo) {
return baseMapper.statisticsTruckMonth(startTime,endTime,truckNo);
}
@Override
public List<OrderChild> listByOrderGoodsNoAndStatus(String orderGoodsNo, List<Integer> statusList) {
return list(lQrWrapper()
.eq(OrderChild :: getOrderGoodsNo,orderGoodsNo)
.in(OrderChild :: getStatus,statusList)
);
}
@Override
public BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumTakeWeightByOrderGoodsNo(orderGoodsNo);
}
@Override
public BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumLoadWeightByOrderGoodsNo(orderGoodsNo);
}
@Override
public BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.sumUnloadWeightByOrderGoodsNo(orderGoodsNo);
}
@Override
public List<LineWarnOrderChildStatisticsDTO> sumTakeNumByOrderGoodsNoList(List<String> orderGoodsNoList) {
return baseMapper.sumTakeNumByOrderGoodsNoList(orderGoodsNoList);
}
@Override
public List<LineWarnOrderChildStatisticsDTO> sumArriveSendNumByOrderGoodsNoList(List<String> orderGoodsNoList) {
return baseMapper.sumArriveSendNumByOrderGoodsNoList(orderGoodsNoList);
}
@Override
public List<LineWarnOrderChildStatisticsDTO> sumLoadNumByOrderGoodsNoList(List<String> orderGoodsNoList) {
return baseMapper.sumLoadNumByOrderGoodsNoList(orderGoodsNoList);
}
@Override
public List<LineWarnOrderChildStatisticsDTO> sumArriveRecieveNumByOrderGoodsNoList(List<String> orderGoodsNoList) {
return baseMapper.sumArriveRecieveNumByOrderGoodsNoList(orderGoodsNoList);
}
@Override
public List<LineWarnOrderChildStatisticsDTO> sumUnloadNumByOrderGoodsNoList(List<String> orderGoodsNoList) {
return baseMapper.sumUnloadNumByOrderGoodsNoList(orderGoodsNoList);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.mapper.linewarn.LineWarnConfigMapper;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
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 LineWarnConfigDaoImpl extends BaseDaoImpl<LineWarnConfigMapper, LineWarnConfig, Integer> implements LineWarnConfigDao {
@Override
public boolean updateConfig(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getWarnName, item.getWarnName())
.set(LineWarnConfig::getWarnType, item.getWarnType())
.set(LineWarnConfig::getWarnLevel, item.getWarnLevel())
.set(LineWarnConfig::getInterval, item.getInterval())
.set(LineWarnConfig::getTimeRatio, item.getTimeRatio())
.set(LineWarnConfig::getTaskCompleteRatio, item.getTaskCompleteRatio())
);
}
@Override
public boolean updateStatus(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getStatus, item.getStatus())
);
}
@Override
public boolean updateDelete(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getDeleteStatus, item.getDeleteStatus())
);
}
@Override
public Optional<LineWarnConfig> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(LineWarnConfig::getId, id)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<LineWarnConfig> findByName(String name) {
return Optional.of(name)
.map(item -> lQrWrapper()
.eq(LineWarnConfig::getWarnName, name)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<LineWarnConfig> listByWarnType(Integer warnType) {
return list(lQrWrapper()
.eq(LineWarnConfig::getWarnType, warnType)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.eq(LineWarnConfig::getStatus, LineWarnConfigEnum.Status.ENABLE.getCode())
);
}
@Override
public IPage<LineWarnConfig> pageByParam(PageLineWarnConfigParam param) {
Page<LineWarnConfig> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.mapper.linewarn.LineWarnInfoMapper;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
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;
@Repository
public class LineWarnInfoDaoImpl extends BaseDaoImpl<LineWarnInfoMapper, LineWarnInfo, Integer> implements LineWarnInfoDao {
@Override
public boolean updateStatus(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getId, item.getId())
.set(LineWarnInfo::getStatus, item.getStatus())
);
}
@Override
public boolean batchUpdateStatus(List<Integer> idList, Integer status) {
return update(lUdWrapper()
.in(LineWarnInfo::getId, idList)
.set(LineWarnInfo::getStatus, status)
);
}
@Override
public boolean updateSuspendTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getWarnConfigId, item.getWarnConfigId())
.ne(LineWarnInfo::getStatus, LineWarnInfoEnum.Status.RESOLVE.getCode())
.set(LineWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
@Override
public boolean updateWarnTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getId, item.getId())
.set(LineWarnInfo::getWeather, item.getWeather())
.set(LineWarnInfo::getWarnTime, item.getWarnTime())
);
}
@Override
public boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel) {
return update(lUdWrapper()
.eq(LineWarnInfo::getWarnConfigId, warnConfigId)
.set(LineWarnInfo::getWarnName, warnName)
.set(LineWarnInfo::getWarnLevel, warnLevel)
);
}
@Override
public Optional<LineWarnInfo> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(LineWarnInfo::getId, id)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<LineWarnInfo> findByOrderGoodsNoAndWarnConfigId(String orderGoodsNo, Integer warnConfigId) {
return Optional.of(orderGoodsNo)
.map(item -> lQrWrapper()
.eq(LineWarnInfo::getOrderGoodsNo, orderGoodsNo)
.eq(LineWarnInfo::getWarnConfigId, warnConfigId)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<LineWarnInfo> listSuspendTimeout() {
return list(lQrWrapper()
.eq(LineWarnInfo::getStatus, LineWarnInfoEnum.Status.SUSPEND.getCode())
.lt(LineWarnInfo::getSuspendTime, LocalDateTime.now())
);
}
@Override
public IPage<LineWarnInfo> pageByParam(PageLineWarnInfoParam param) {
Page<LineWarnInfo> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnLogDao;
import com.clx.performance.mapper.linewarn.LineWarnLogMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class LineWarnLogDaoImpl extends BaseDaoImpl<LineWarnLogMapper, LineWarnLog, Integer> implements LineWarnLogDao {
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.enums.linewarn.LineWarnOrderGoodsEnum;
import com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
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 LineWarnOrderGoodsDaoImpl extends BaseDaoImpl<LineWarnOrderGoodsMapper, LineWarnOrderGoods, Integer> implements LineWarnOrderGoodsDao {
@Override
public boolean updateWarnStatus(LineWarnOrderGoods item) {
return update(lUdWrapper()
.eq(LineWarnOrderGoods::getId, item.getId())
.set(LineWarnOrderGoods::getWarnStatus, item.getWarnStatus())
);
}
@Override
public Optional<LineWarnOrderGoods> getByOrderGoodsNo(String orderGoodsNo) {
return Optional.of(orderGoodsNo)
.map(item -> lQrWrapper()
.eq(LineWarnOrderGoods::getOrderGoodsNo, orderGoodsNo)
)
.map(super::getOne);
}
@Override
public List<LineWarnOrderGoods> ListOrderGoodsNoOfWarn() {
return list(lQrWrapper().select(LineWarnOrderGoods::getOrderGoodsNo)
.eq(LineWarnOrderGoods::getWarnStatus, LineWarnOrderGoodsEnum.WarnStatus.ENABLE.getCode())
.orderByDesc(LineWarnOrderGoods::getId)
.last("limit 10000")
);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnRangeDao;
import com.clx.performance.enums.linewarn.LineWarnRangEnum;
import com.clx.performance.mapper.linewarn.LineWarnRangMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class LineWarnRangeDaoImpl extends BaseDaoImpl<LineWarnRangMapper, LineWarnRang, Integer> implements LineWarnRangeDao {
@Override
public List<LineWarnRang> ListByWarnConfigId(Integer warnConfigId) {
return list(lQrWrapper()
.eq(LineWarnRang::getWarnConfigId, warnConfigId)
.eq(LineWarnRang::getStatus, LineWarnRangEnum.Status.ENABLE.getCode())
.orderByDesc(LineWarnRang::getId)
);
}
@Override
public boolean updateDisable(LineWarnRang item) {
return update(lUdWrapper()
.eq(LineWarnRang::getWarnConfigId, item.getWarnConfigId())
.eq(StringUtils.isNotBlank(item.getOrderGoodsNo()), LineWarnRang::getOrderGoodsNo, item.getOrderGoodsNo())
.set(LineWarnRang::getStatus, LineWarnRangEnum.Status.DISABLE.getCode())
);
}
}
......@@ -39,11 +39,21 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
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.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
if (item.getId() != null) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getId, item.getId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
else {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.eq(VehicleWarnInfo::getChildNo, item.getChildNo())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
}
else if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())) {
return update(lUdWrapper()
......
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.VehicleWarnRangeDao;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnRangeParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -33,4 +38,21 @@ public class VehicleWarnRangeDaoImpl extends BaseDaoImpl<VehicleWarnRangMapper,
.set(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.DISABLE.getCode())
);
}
@Override
public IPage<VehicleWarnRang> pageByParam(PageVehicleWarnRangeParam param) {
Page<VehicleWarnRang> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
@Override
public Optional<VehicleWarnRang> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(VehicleWarnRang::getId, id)
.last("limit 1")
)
.map(super::getOne);
}
}
......@@ -38,6 +38,15 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getWarnTypeJson, item.getWarnTypeJson())
.set(VehicleWarnUser::getLineWarnTypeJson, item.getLineWarnTypeJson())
);
}
@Override
public boolean updateNoticeStatus(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getNoticeStatus, item.getNoticeStatus())
);
}
......@@ -67,6 +76,7 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
public List<VehicleWarnUser> listAllEnable() {
return list(lQrWrapper()
.eq(VehicleWarnUser::getDeleteStatus, VehicleWarnUserEnum.DeleteStatus.NO.getCode())
.eq(VehicleWarnUser::getNoticeStatus, VehicleWarnUserEnum.NoticeStatus.YES.getCode())
);
}
......
package com.clx.performance.dao.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.linewarn.LineWarnConfigMapper;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnConfigDao extends BaseDao<LineWarnConfigMapper, LineWarnConfig, Integer> {
boolean updateConfig(LineWarnConfig item);
boolean updateStatus(LineWarnConfig item);
boolean updateDelete(LineWarnConfig item);
Optional<LineWarnConfig> findById(Integer id);
Optional<LineWarnConfig> findByName(String name);
List<LineWarnConfig> listByWarnType(Integer warnType);
IPage<LineWarnConfig> pageByParam(PageLineWarnConfigParam param);
}
package com.clx.performance.dao.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.linewarn.LineWarnInfoMapper;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnInfoDao extends BaseDao<LineWarnInfoMapper, LineWarnInfo, Integer> {
boolean updateStatus(LineWarnInfo item);
boolean batchUpdateStatus(List<Integer> idList, Integer status);
boolean updateSuspendTime(LineWarnInfo item);
boolean updateWarnTime(LineWarnInfo item);
boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel);
Optional<LineWarnInfo> findById(Integer id);
Optional<LineWarnInfo> findByOrderGoodsNoAndWarnConfigId(String orderGoodsNo, Integer warnConfigId);
List<LineWarnInfo> listSuspendTimeout();
IPage<LineWarnInfo> pageByParam(PageLineWarnInfoParam param);
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnLogMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.msl.common.dao.BaseDao;
public interface LineWarnLogDao extends BaseDao<LineWarnLogMapper, LineWarnLog, Integer> {
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnOrderGoodsDao extends BaseDao<LineWarnOrderGoodsMapper, LineWarnOrderGoods, Integer> {
boolean updateWarnStatus(LineWarnOrderGoods item);
Optional<LineWarnOrderGoods> getByOrderGoodsNo(String orderGoodsNo);
List<LineWarnOrderGoods> ListOrderGoodsNoOfWarn();
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnRangMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnRangeDao extends BaseDao<LineWarnRangMapper, LineWarnRang, Integer> {
List<LineWarnRang> ListByWarnConfigId(Integer warnConfigId);
boolean updateDisable(LineWarnRang item);
}
package com.clx.performance.dao.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnRangeParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
......@@ -10,4 +13,8 @@ public interface VehicleWarnRangeDao extends BaseDao<VehicleWarnRangMapper, Vehi
List<VehicleWarnRang> ListByWarnConfigId(Integer warnConfigId);
boolean updateDisable(VehicleWarnRang item);
IPage<VehicleWarnRang> pageByParam(PageVehicleWarnRangeParam param);
Optional<VehicleWarnRang> findById(Integer id);
}
......@@ -14,6 +14,7 @@ public interface VehicleWarnUserDao extends BaseDao<VehicleWarnUserMapper, Vehic
boolean updateUser(VehicleWarnUser item);
boolean deleteUser(VehicleWarnUser item);
boolean updateWarnType(VehicleWarnUser item);
boolean updateNoticeStatus(VehicleWarnUser item);
Optional<VehicleWarnUser> findById(Integer id);
Optional<VehicleWarnUser> findByMobile(String mobile);
......
package com.clx.performance.dto.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class LineWarnCommonInfoDTO {
String orderGoodsNo; //货单编号
private BigDecimal taskWeight; //任务数量
private int loadTimeAvg; //平均装车时间(min)
private int unloadTimeAvg; //平均卸车时间(min)
private LocalDateTime transportEndTime; //拉运结束时间
private LocalDateTime pendingOrderTime; //挂单时间
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
}
package com.clx.performance.dto.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class LineWarnOrderChildStatisticsDTO {
private String orderGoodsNo; //货单编号
private Integer num; //车数
}
......@@ -2,9 +2,6 @@ package com.clx.performance.esplus.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
......
package com.clx.performance.extranal.order;
public interface InternalReportService {
Boolean checkLineJam(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime,
Integer duration);
Boolean checkLineAbnormal(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime);
}
package com.clx.performance.extranal.order.impl;
import com.clx.order.feign.InternalReportFeign;
import com.clx.performance.extranal.order.InternalReportService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class InternalReportServiceImpl implements InternalReportService {
@Autowired
private InternalReportFeign internalReportFeign;
@Override
public Boolean checkLineJam(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime,
Integer duration) {
return Optional.of(internalReportFeign.checkLineJam(sendSystemAddressId,
receiveSystemAddressId,beginTime,duration))
.filter(Result::succeed)
.map(Result::getData)
.orElse(false);
}
@Override
public Boolean checkLineAbnormal(Integer sendSystemAddressId,
Integer receiveSystemAddressId,
String beginTime) {
return Optional.of(internalReportFeign.checkLineAbnormal(sendSystemAddressId,
receiveSystemAddressId,beginTime))
.filter(Result::succeed)
.map(Result::getData)
.orElse(false);
}
}
package com.clx.performance.job.linewarn;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import com.clx.performance.service.linewarn.LineWarnMqService;
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 LineWarnJob {
@Autowired
private LineWarnOrderGoodsDao lineWarnOrderGoodsDao;
@Autowired
private LineWarnMqService lineWarnMqService;
/**
* 线路监控预警
*/
@XxlJob("lineWarnWarn")
public void lineWarnWarn() {
try {
List<LineWarnOrderGoods> list = lineWarnOrderGoodsDao.ListOrderGoodsNoOfWarn();
log.info("线路监控预警, size:{}", list.size());
for (LineWarnOrderGoods item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (线路预警)
lineWarnMqService.lineWarn(item.getOrderGoodsNo());
}
} catch (Exception e) {
log.warn("线路监控预警失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("线路监控预警失败,异常原因=====================", e);
}
}
}
package com.clx.performance.listener.linewarn;
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.RabbitKeyLineWarnConstants;
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 LineWarnDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyLineWarnConstants.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.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
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 LineWarnLineWarnListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.LINE_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<LineWarnLineWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单预警 失败",e);
}
}
private void process(LineWarnLineWarnMqParam mq){
lineWarnMqHandlerService.lineWarn(mq);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnOrderChildWarnMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
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 LineWarnOrderChildWarnListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.LINE_WARN_ORDER_CHILD_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<LineWarnOrderChildWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-运单异常预警 失败",e);
}
}
private void process(LineWarnOrderChildWarnMqParam mq){
lineWarnMqHandlerService.orderChildWarn(mq);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
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 LineWarnOrderGoodsAddListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.ORDER_GOODS_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<LineWarnOrderGoodsAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单新增 失败",e);
}
}
private void process(LineWarnOrderGoodsAddMqParam mq){
lineWarnMqHandlerService.orderGoodsAdd(mq);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
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 LineWarnTruckNoticeListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.LINE_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<LineWarnNoticeMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-预警通知 失败",e);
}
}
private void process(LineWarnNoticeMqParam mq){
lineWarnMqHandlerService.notice(mq);
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.mapper;
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.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
......@@ -114,6 +115,45 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
" </script>")
Integer unloadTimeAvg(Integer sendAddressId, Integer receiveAddressId,
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(10,20,30,40,50,60,70,80,90,100)")
BigDecimal sumTakeWeightByOrderGoodsNo(String orderGoodsNo);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(50,60,70,80,90,100)")
BigDecimal sumLoadWeightByOrderGoodsNo(String orderGoodsNo);
@Select("select sum(weight) from order_child where order_goods_no=#{orderGoodsNo} and status in(80,90,100)")
BigDecimal sumUnloadWeightByOrderGoodsNo(String orderGoodsNo);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(10,20,30,40,50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumTakeNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(40,50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumArriveSendNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(50,60,70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumLoadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(70,80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumArriveRecieveNumByOrderGoodsNoList(List<String> orderGoodsNoList);
@Select("<script>select order_goods_no, count(*) num from order_child where status in(80,90,100) " +
" and order_goods_no in <foreach collection='list' item='item' open='(' separator=',' close=')'>#{item}</foreach> " +
" group by order_goods_no " +
"</script>")
List<LineWarnOrderChildStatisticsDTO>sumUnloadNumByOrderGoodsNoList(List<String> orderGoodsNoList);
Integer sendSystemAddressId, Integer receiveSystemAddressId,
String beginTime);
......
package com.clx.performance.mapper.linewarn;
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.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import com.clx.performance.sqlProvider.linewarn.LineWarnConfigSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface LineWarnConfigMapper extends BaseMapper<LineWarnConfig> {
String TABLE = "line_warn_config";
/**
* @see LineWarnConfigSqlProvider#pageByParam(Page, PageLineWarnConfigParam)
*/
@SelectProvider(type = LineWarnConfigSqlProvider.class, method = "pageByParam")
IPage<LineWarnConfig> pageByParam(@Param("page") Page page, @Param("param") PageLineWarnConfigParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
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.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.clx.performance.sqlProvider.linewarn.LineWarnInfoSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface LineWarnInfoMapper extends BaseMapper<LineWarnInfo> {
String TABLE = "line_warn_config";
/**
* @see LineWarnInfoSqlProvider#pageByParam(Page, PageLineWarnInfoParam)
*/
@SelectProvider(type = LineWarnInfoSqlProvider.class, method = "pageByParam")
IPage<LineWarnInfo> pageByParam(@Param("page") Page page, @Param("param") PageLineWarnInfoParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnLogMapper extends BaseMapper<LineWarnLog> {
String TABLE = "line_warn_log";
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnOrderGoodsMapper extends BaseMapper<LineWarnOrderGoods> {
String TABLE = "line_warn_order_goods";
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnRangMapper extends BaseMapper<LineWarnRang> {
}
\ 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.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnRangeParam;
import com.clx.performance.sqlProvider.vehiclewarn.VehicleWarnInfoSqlProvider;
import com.clx.performance.sqlProvider.vehiclewarn.VehicleWarnRangeSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface VehicleWarnRangMapper extends BaseMapper<VehicleWarnRang> {
String TABLE = "vehicle_warn_range";
/**
* @see VehicleWarnRangeSqlProvider#pageByParam(Page, PageVehicleWarnRangeParam)
*/
@SelectProvider(type = VehicleWarnRangeSqlProvider.class, method = "pageByParam")
IPage<VehicleWarnRang> pageByParam(@Param("page") Page page, @Param("param") PageVehicleWarnRangeParam param);
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
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/05/29 10:55:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String warnName; //预警方案名称
private Integer warnType; //预警类型
private Integer warnLevel; //预警级别
@TableField("`interval`")
private BigDecimal interval; //预警间隔(小时)
private BigDecimal timeRatio; //时间占比(%)
private BigDecimal taskCompleteRatio; //任务完成占比
private Integer congestionTime; //拥堵时间(分钟)
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer status; //状态:1启用 2禁用
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
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/05/30 13:30:04
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnInfo 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 Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址
private Integer receiveAddressId; //收货地址id
private String receiveAddress; //收货地址
private LocalDateTime suspendTime; //预警暂停时间
private String weather; //天气
private LocalDateTime warnTime; //预警时间
private Integer status; //处理状态:1待处理 2已处理 3暂停预警
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
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/05/30 13:56:09
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer infoId; //预警信息id
private Integer type; //类型:1暂停预警 2处理预警
private String orderGoodsNo; //货单编号
private String warnName; //预警名称
private LocalDateTime warnTime; //预警时间
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private String content; //内容
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
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/05/30 13:31:44
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnOrderGoods implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String orderGoodsNo; //货单编号
private LocalDateTime transportEndTime; //拉运结束时间
private LocalDateTime pendingOrderTime; //挂单时间
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
private Integer pengNum; //挂单数
private Integer takeNum; //接单数
private Integer arriveSendNum; //到达货源地车数
private Integer loadNum; //装车车数
private Integer arriveReceiveNum; //到达目的地车数
private Integer unloadNum; //卸车车数
private LocalDateTime lastLineReportTime; //上次线路上报时间
private Integer status; //状态
private Integer warnStatus; //预警使能:0禁用 1启用
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
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/05/30 14:09:22
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnRang implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private String orderGoodsNo; //货单编号
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private Integer status; //状态:1有效 2无效
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
......@@ -31,6 +31,7 @@ public class VehicleWarnUser implements HasKey<Integer> {
private String warnTypeJson; //预警配置
private String lineWarnTypeJson; //线路预警配置
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer noticeStatus; //通知状态: 0禁用 1开启
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnMqService;
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;
@Slf4j
@Service
public class LineWarnCommonServiceImpl implements LineWarnCommonService {
private final static int MIN_FER_HOUR = 60;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnMqService lineWarnMqService;
@Override
public void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig){
lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, null);
}
@Override
public void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig, String weather){
// 更新
if (lineWarnInfo != null){
// 计算下次生效时间
LocalDateTime nextTime = lineWarnInfo.getWarnTime().plusMinutes(lineWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
lineWarnInfo.setWeather(weather);
lineWarnInfo.setWarnTime(LocalDateTime.now());
lineWarnInfoDao.updateWarnTime(lineWarnInfo);
// 发送mq (预警通知)
lineWarnMqService.lineWarnNotice(lineWarnInfo.getId());
return;
}
// 新增
lineWarnInfo = new LineWarnInfo();
lineWarnInfo.setWarnConfigId(lineWarnConfig.getId());
lineWarnInfo.setWarnType(lineWarnConfig.getWarnType());
lineWarnInfo.setWarnName(lineWarnConfig.getWarnName());
lineWarnInfo.setWarnLevel(lineWarnConfig.getWarnLevel());
lineWarnInfo.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
lineWarnInfo.setSendAddressId(orderGoods.getSendAddressId());
lineWarnInfo.setSendAddress(orderGoods.getSendAddressShorter());
lineWarnInfo.setReceiveAddressId(orderGoods.getReceiveAddressId());
lineWarnInfo.setReceiveAddress(orderGoods.getReceiveAddressShorter());
lineWarnInfo.setWeather(weather);
lineWarnInfo.setWarnTime(LocalDateTime.now());
lineWarnInfoDao.saveEntity(lineWarnInfo);
// 发送mq (预警通知)
lineWarnMqService.lineWarnNotice(lineWarnInfo.getId());
}
}
package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnConfigService;
import com.clx.performance.struct.linewarn.LineWarnConfigStruct;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
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 LineWarnConfigServiceImpl implements LineWarnConfigService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnConfigStruct lineWarnConfigStruct;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(LineWarnConfigAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Optional<LineWarnConfig> optional = lineWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.LINE_WARN_CONFIG_EXIST);
}
LineWarnConfig lineWarnConfig = new LineWarnConfig();
lineWarnConfig.setWarnName(param.getWarnName());
lineWarnConfig.setWarnType(param.getWarnType());
lineWarnConfig.setWarnLevel(param.getWarnLevel());
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfig.setCongestionTime(param.getCongestionTime());
lineWarnConfig.setCreateBy(loginUserInfo.getUserName());
lineWarnConfigDao.saveEntity(lineWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateConfig(LineWarnConfigUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (!Objects.equals(lineWarnConfig.getWarnName(), param.getWarnName())){
Optional<LineWarnConfig> optional = lineWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.LINE_WARN_CONFIG_EXIST);
}
}
lineWarnConfig.setWarnName(param.getWarnName());
lineWarnConfig.setWarnType(param.getWarnType());
lineWarnConfig.setWarnLevel(param.getWarnLevel());
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfig.setCongestionTime(param.getCongestionTime());
lineWarnConfigDao.updateConfig(lineWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateStatus(LineWarnConfigStatusUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnConfig.setStatus(param.getStatus());
lineWarnConfigDao.updateStatus(lineWarnConfig);
}
@Override
public void deleteConfig(LineWarnConfigDeleteUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnConfig.setDeleteStatus(LineWarnConfigEnum.DeleteStatus.YES.getCode());
lineWarnConfigDao.updateDelete(lineWarnConfig);
}
@Override
public LineWarnConfigVO getConfig(Integer id) {
return lineWarnConfigStruct.convert(lineWarnConfigDao.findById(id).orNull());
}
@Override
public IPage<LineWarnConfigVO> pageConfig(PageLineWarnConfigParam param) {
return lineWarnConfigStruct.convertPage(lineWarnConfigDao.pageByParam(param));
}
@Override
public List<LineWarnConfigVO.WarnTypeItem> listWarnType() {
List<LineWarnConfigVO.WarnTypeItem> list = new ArrayList<>();
for (LineWarnConfigEnum.WarnType item : LineWarnConfigEnum.WarnType.values()) {
list.add(new LineWarnConfigVO.WarnTypeItem(item.getCode(), item.getMsg()));
}
return list;
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.extranal.order.InternalReportService;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnCongestionWarnService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnCongestionWarnServiceImpl implements LineWarnCongestionWarnService {
// 默认监控时间
private static final int DEFAULT_TIME = 5;
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private InternalReportService internalReportService;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Override
public void congestionWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
LocalDateTime beginTime = LocalDateTime.now().minusMinutes(DEFAULT_TIME);
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.CONGESTION.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doCongestionWarn(orderGoods, item, beginTime);
}
}
private void doCongestionWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime beginTime){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 检测是否拥堵
Boolean flag = internalReportService.checkLineJam(orderGoods.getSendSystemAddressId(),
orderGoods.getReceiveSystemAddressId(),
LocalDateTimeUtils.formatTime(beginTime), lineWarnConfig.getCongestionTime());
if (!flag) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dao.linewarn.LineWarnLogDao;
import com.clx.performance.dao.linewarn.LineWarnRangeDao;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.enums.linewarn.LineWarnLogEnum;
import com.clx.performance.enums.linewarn.LineWarnRangEnum;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.clx.performance.param.pc.linewarn.LineWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.linewarn.LineWarnInfoSuspendUpdateParam;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.clx.performance.service.linewarn.LineWarnInfoService;
import com.clx.performance.struct.linewarn.LineWarnInfoStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
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;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class LineWarnInfoServiceImpl implements LineWarnInfoService {
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnLogDao lineWarnLogDao;
@Autowired
private LineWarnRangeDao lineWarnRangeDao;
@Autowired
private LineWarnInfoStruct lineWarnInfoStruct;
@Autowired
private OrderChildDao orderChildDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void updateSuspend(LineWarnInfoSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
LineWarnInfo lineWarnInfo = lineWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnInfo.setSuspendTime(endTime);
lineWarnInfoDao.updateSuspendTime(lineWarnInfo);
LineWarnLog lineWarnLog = new LineWarnLog();
lineWarnLog.setInfoId(lineWarnInfo.getId());
lineWarnLog.setType(LineWarnLogEnum.Type.SUSPEND.getCode());
lineWarnLog.setContent(LineWarnLogEnum.Type.SUSPEND.getMsg());
lineWarnLog.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnLog.setWarnName(lineWarnInfo.getWarnName());
lineWarnLog.setWarnEndTime(endTime);
lineWarnLog.setWarnTime(lineWarnInfo.getWarnTime());
lineWarnLog.setCreateBy(loginUserInfo.getUserName());
lineWarnLogDao.saveEntity(lineWarnLog);
LineWarnRang lineWarnRang = new LineWarnRang();
lineWarnRang.setWarnConfigId(lineWarnInfo.getWarnConfigId());
lineWarnRang.setWarnName(lineWarnInfo.getWarnName());
lineWarnRang.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnRang.setWarnEndTime(endTime);
lineWarnRang.setStatus(LineWarnRangEnum.Status.ENABLE.getCode());
lineWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
lineWarnRangeDao.updateDisable(lineWarnRang);
// 新增新数据
lineWarnRangeDao.saveEntity(lineWarnRang);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateResolve(LineWarnInfoResolveUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LineWarnInfo lineWarnInfo = lineWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnInfo.setStatus(LineWarnInfoEnum.Status.RESOLVE.getCode());
lineWarnInfoDao.updateStatus(lineWarnInfo);
LineWarnLog lineWarnLog = new LineWarnLog();
lineWarnLog.setInfoId(lineWarnInfo.getId());
lineWarnLog.setType(LineWarnLogEnum.Type.RESOLVE.getCode());
lineWarnLog.setContent(LineWarnLogEnum.Type.RESOLVE.getMsg());
lineWarnLog.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnLog.setWarnName(lineWarnInfo.getWarnName());
lineWarnLog.setWarnTime(lineWarnInfo.getWarnTime());
lineWarnLog.setCreateBy(loginUserInfo.getUserName());
lineWarnLogDao.saveEntity(lineWarnLog);
}
@Override
public LineWarnInfoVO getInfo(Integer id) {
return lineWarnInfoStruct.convert(lineWarnInfoDao.findById(id).orNull());
}
@Override
public IPage<LineWarnInfoVO> pageInfo(PageLineWarnInfoParam param) {
Page<LineWarnInfoVO> page = lineWarnInfoStruct.convertPage(lineWarnInfoDao.pageByParam(param));
// 更新车数统计数据
List<String> orderGoodsNoList = page.getRecords().stream().map(item -> item.getOrderGoodsNo()).collect(Collectors.toList());
if (!orderGoodsNoList.isEmpty()) {
List<LineWarnOrderChildStatisticsDTO> takeList = orderChildDao.sumTakeNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> sendList = orderChildDao.sumArriveSendNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> loadList = orderChildDao.sumLoadNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> receiveList = orderChildDao.sumArriveRecieveNumByOrderGoodsNoList(orderGoodsNoList);
List<LineWarnOrderChildStatisticsDTO> unloadList = orderChildDao.sumUnloadNumByOrderGoodsNoList(orderGoodsNoList);
Map<String, LineWarnOrderChildStatisticsDTO> takeMap = takeList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> sendMap = sendList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> loadMap = loadList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> receiveMap = receiveList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
Map<String, LineWarnOrderChildStatisticsDTO> unloadMap = unloadList.stream().collect(Collectors.toMap(item -> item.getOrderGoodsNo(), item -> item));
for (LineWarnInfoVO item : page.getRecords()) {
item.setTakeNum(takeMap.get(item.getOrderGoodsNo()).getNum());
item.setArriveSendNum(sendMap.get(item.getOrderGoodsNo()).getNum());
item.setLoadNum(loadMap.get(item.getOrderGoodsNo()).getNum());
item.setArriveReceiveNum(receiveMap.get(item.getOrderGoodsNo()).getNum());
item.setUnloadNum(unloadMap.get(item.getOrderGoodsNo()).getNum());
}
}
return page;
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.extranal.order.InternalReportService;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnLineWarnService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnLineWarnServiceImpl implements LineWarnLineWarnService {
// 默认监控时间
private static final int DEFAULT_TIME = 5;
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private InternalReportService internalReportService;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Override
public void lineAbnormalWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
LocalDateTime beginTime = LocalDateTime.now().minusMinutes(DEFAULT_TIME);
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.LINE_ABNORMAL.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doLineAbnormalWarn(orderGoods, item, beginTime);
}
}
private void doLineAbnormalWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime beginTime){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 检测线路是否异常
Boolean flag = internalReportService.checkLineAbnormal(orderGoods.getSendSystemAddressId(),
orderGoods.getReceiveSystemAddressId(),
LocalDateTimeUtils.formatTime(beginTime));
if (!flag) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnLoadWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void loadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
int unloadTimeAvg = lineWarnCommonInfo.getUnloadTimeAvg();
Integer arriveReceiveExpectTime = lineWarnCommonInfo.getArriveReceiveExpectTime();
long totalTime = Duration.between(lineWarnCommonInfo.getPendingOrderTime(),
lineWarnCommonInfo.getTransportEndTime()).toMinutes();
int needTime = unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
// 任务量
BigDecimal taskWeight = lineWarnCommonInfo.getTaskWeight();
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
BigDecimal weight = orderChildDao.sumLoadWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
if (weight != null){
taskCompleteRatio = weight.divide(taskWeight, 4, BigDecimal.ROUND_UP).movePointRight(2);
}
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.LOAD.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doTakeWarn(orderGoods, item,lineWarnCommonInfo.getPendingOrderTime(), difTime, taskCompleteRatio);
}
}
private void doTakeWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime pendingOrderTime,
long difTime, BigDecimal taskCompleteRatio){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnMqService;
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 LineWarnMqServiceImpl implements LineWarnMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void orderGoodsAdd(String orderGoodsNo) {
LineWarnOrderGoodsAddMqParam mq = new LineWarnOrderGoodsAddMqParam();
mq.setOrderGoodsNo(orderGoodsNo);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void lineWarn(String orderGoodsNo) {
LineWarnLineWarnMqParam mq = new LineWarnLineWarnMqParam();
mq.setOrderGoodsNo(orderGoodsNo);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void lineWarnNotice(Integer infoId) {
LineWarnNoticeMqParam mq = new LineWarnNoticeMqParam();
mq.setInfoId(infoId);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void lineReport(Integer sendSystemAddressId, Integer receiveSystemAddressId,
Integer reportType, Integer estimatedTravelTime) {
LineWarnLineReportMqParam mq = new LineWarnLineReportMqParam();
mq.setSendSystemAddressId(sendSystemAddressId);
mq.setReceiveSystemAddressId(receiveSystemAddressId);
mq.setReportType(reportType);
mq.setEstimatedTravelTime(estimatedTravelTime);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE,
RabbitKeyLineWarnConstants.LINE_WARN_LINE_REPORT_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE,
RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void orderChildWarn(String orderGoodsNo, String childNo) {
LineWarnOrderChildWarnMqParam mq = new LineWarnOrderChildWarnMqParam();
mq.setOrderGoodsNo(orderGoodsNo);
mq.setChildNo(childNo);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE,
RabbitKeyLineWarnConstants.LINE_WARN_ORDER_CHILD_WARN_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE,
RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnOrderChildWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnOrderChildWarnServiceImpl implements LineWarnOrderChildWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Override
public void orderChildWarn(OrderGoods orderGoods) {
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.UNLOAD.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doOrderChildWarn(orderGoods, item);
}
}
private void doOrderChildWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnTakeWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
// 默认时间
private static final int DEFAULT_TIME = 60;
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void takeWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
int loadTimeAvg = lineWarnCommonInfo.getLoadTimeAvg();
int unloadTimeAvg = lineWarnCommonInfo.getUnloadTimeAvg();
Integer arriveReceiveExpectTime = lineWarnCommonInfo.getArriveReceiveExpectTime();
long totalTime = Duration.between(lineWarnCommonInfo.getPendingOrderTime(),
lineWarnCommonInfo.getTransportEndTime()).toMinutes();
int needTime = DEFAULT_TIME+loadTimeAvg+unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
// 任务量
BigDecimal taskWeight = lineWarnCommonInfo.getTaskWeight();
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
BigDecimal weight = orderChildDao.sumTakeWeightByOrderGoodsNo(orderGoods.getOrderGoodsNo());
if (weight != null){
taskCompleteRatio = weight.divide(taskWeight, 4, BigDecimal.ROUND_UP).movePointRight(2);
}
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.TAKE.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doTakeWarn(orderGoods, item,lineWarnCommonInfo.getPendingOrderTime(), difTime, taskCompleteRatio);
}
}
private void doTakeWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime pendingOrderTime,
long difTime, BigDecimal taskCompleteRatio){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.gd.GdPosDTO;
import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.linewarn.LineWarnTraceService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.struct.linewarn.LineWarnInfoStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.gd.GdUtils;
import com.clx.performance.vo.pc.linewarn.LineWarnRoutePositionVO;
import com.clx.performance.vo.pc.linewarn.LineWarnRouteVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTruckTraceInfoVO;
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.Arrays;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnTraceServiceImpl implements LineWarnTraceService {
// 最近位置时间
private static final Integer LAST_POSITION_TIME = 5;
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private OrderGoodsStruct orderGoodsStruct;
@Autowired
private OrderChildStruct orderChildStruct;
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private GdUtils gdUtils;
@Autowired
private LineWarnInfoStruct lineWarnInfoStruct;
@Override
public LineWarnTraceVO getTraceInfo(String orderGoodsNo) {
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(orderGoodsNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
LineWarnTraceVO result = orderGoodsStruct.convertLineWarnTraceVO(orderGoods);
// 装卸吨数
BigDecimal loadWeight = orderChildDao.sumLoadWeightByOrderGoodsNo(orderGoodsNo);
BigDecimal unloadWeight = orderChildDao.sumUnloadWeightByOrderGoodsNo(orderGoodsNo);
result.setLoadWeight(loadWeight==null? BigDecimal.ZERO : loadWeight);
result.setUnloadWeight(unloadWeight==null? BigDecimal.ZERO : unloadWeight);
// 车辆信息
List<OrderChild> orderChildList = orderChildDao.listByOrderGoodsNoAndStatus(orderGoods.getOrderGoodsNo(),
Arrays.asList(
OrderChildEnum.Status.CREATED.getCode(),
OrderChildEnum.Status.PAY.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode()
)
);
List<LineWarnTruckTraceInfoVO> truckList = orderChildStruct.convertLineWarnTruckTraceInfoVO(orderChildList);
LocalDateTime now = LocalDateTime.now();
// 查询最近位置
for (LineWarnTruckTraceInfoVO item : truckList) {
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(item.getTruckNo(),
item.getDriverUserNo(), LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME)));
if (currentPosition != null){
item.setLongitude(currentPosition[0]);
item.setLatitude(currentPosition[1]);
}
if (Objects.equals(item.getStatus(), OrderChildEnum.Status.CREATED.getCode())
|| Objects.equals(item.getStatus(), OrderChildEnum.Status.PAY.getCode())
|| Objects.equals(item.getStatus(), OrderChildEnum.Status.GO_TO_SEND.getCode())
|| Objects.equals(item.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())
){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());
}
else{
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
}
}
// 推荐线路
List<LineWarnRoutePositionVO> positionList = lineWarnInfoStruct
.convertLineWarnRoutePositionVO(gdUtils.getRoute(orderGoods.getSendLongitude(),
orderGoods.getSendLatitude(), orderGoods.getReceiveLongitude(),
orderGoods.getReceiveLatitude()));
LineWarnRouteVO route = new LineWarnRouteVO();
route.setPositonList(positionList);
result.setRoute(route);
result.setTruckList(truckList);
return result;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论