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

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

# Conflicts: # performance-web/src/main/java/com/clx/performance/controller/temp/TempTraceController.java # performance-web/src/main/java/com/clx/performance/esplus/model/DriverTraceESPlus.java # performance-web/src/main/java/com/clx/performance/service/impl/trace/TruckTraceMqHandlerServiceImpl.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);
}
}
......
......@@ -39,6 +39,7 @@ public enum ResultEnum implements com.msl.common.enums.ResultEnum {
LINE_WARN_CONFIG_EXIST(1302, "配置名称已存在"),
;
private final int code;
private final String msg;
......
......@@ -15,8 +15,8 @@ public enum LineWarnConfigEnum {
TAKE(1, "接单预警"),
LOAD(2, "装车预警"),
UNLOAD(3, "卸车预警"),
JAM(4, "拥堵预警 "),
CONGESTION(4, "拥堵预警"),
WEATHER(5, "天气预警"),
CHILD_ABNORMAL(6, "运单异常"),
LINE_ABNORMAL(7, "线路异常"),
......
......@@ -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);
}
}
}
......@@ -20,7 +20,8 @@ public class LineWarnLineReportMqParam {
private Integer sendSystemAddressId;
private Integer receiveSystemAddressId;
private Integer reportType; //1线路异常 2拥堵预警
private Integer reportType;
private Integer estimatedTravelTime; //预计通行时间
@Getter
@AllArgsConstructor
......
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;
}
......@@ -31,5 +31,7 @@ public class LineWarnConfigAddParam {
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "交通增加时间(分钟)", example = "1")
private Integer congestionTime;
}
......@@ -35,5 +35,6 @@ public class LineWarnConfigUpdateParam {
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "交通增加时间(分钟)", example = "1")
private Integer congestionTime;
}
......@@ -18,8 +18,8 @@ public class PageLineWarnInfoParam extends PageParam {
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "单编号", example = "1000")
private String orderGoodsNo;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status;
......
......@@ -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;
}
......@@ -49,6 +49,8 @@ public class LineWarnConfigVO {
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;
......
......@@ -30,7 +30,7 @@ public class LineWarnInfoVO {
private Integer warnId;
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
@ApiModelProperty(value = "预警类型: 1接单预警 2装车预警 3卸车预警 4拥堵预警 5天气预警 6运单异常 7线路异常", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型", example = "1")
private String warnTypeMsg;
......@@ -61,11 +61,25 @@ public class LineWarnInfoVO {
@ApiModelProperty(value = "运单状态", example = "1")
private Integer childStatus;
@ApiModelProperty(value = "预警时间", example = "")
private String warnTime;
@ApiModelProperty(value = "预警暂停时间", example = "")
@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;
......
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;
}
......@@ -32,11 +32,13 @@ public class RabbitLineWarnConfig {
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);
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);
return BindingBuilder.bind(lineWarnDefaultDelayQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
......@@ -45,7 +47,8 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnDefaultDeadQueueBinding() {
return BindingBuilder.bind(lineWarnDefaultDeadQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
return BindingBuilder.bind(lineWarnDefaultDeadQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
}
......@@ -58,7 +61,8 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnChildAddQueueBinding() {
return BindingBuilder.bind(lineWarnChildAddQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY);
return BindingBuilder.bind(lineWarnChildAddQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY);
}
/**
......@@ -70,7 +74,8 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnQueueBinding() {
return BindingBuilder.bind(lineWarnQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY);
return BindingBuilder.bind(lineWarnQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY);
}
/**
* 线路预警通知
......@@ -81,7 +86,8 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnNoticeQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY);
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange())
.with(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY);
}
/**
......@@ -93,7 +99,21 @@ public class RabbitLineWarnConfig {
}
@Bean
public Binding lineWarnLineReportQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.LINE_WARN_LINE_REPORT_ROUTING_KEY);
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);
}
}
......@@ -57,4 +57,10 @@ public class RabbitKeyLineWarnConstants {
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;
}
......@@ -40,8 +40,15 @@ public class LineWarnConfigController {
|| 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.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);
......@@ -56,10 +63,16 @@ public class LineWarnConfigController {
|| 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.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();
}
......
......@@ -41,12 +41,6 @@ public class LineWarnInfoController {
return Result.ok();
}
// @ApiOperation(value = "获取轨迹",notes = "<br>By:艾庆国")
// @GetMapping("/getTrace")
// public Result<VehicleTraceVO> getTrace(@NotNull(message = "id不能为空") @Validated Integer id) {
// return Result.ok(lineWarnInfoService.getTrace(id));
// }
@ApiOperation(value = "获取预警信息",notes = "<br>By:艾庆国")
@GetMapping("/getInfo")
public Result<LineWarnInfoVO> getInfo(@NotNull(message = "id不能为空") @Validated Integer id) {
......
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")
......
......@@ -36,6 +36,8 @@ public class TempController {
@Autowired
private TransportFeignService transportFeignService;
@Autowired
private OrderChildDtsListener orderChildDtsListener;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
......
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();
}
}
......@@ -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;
......@@ -177,5 +178,19 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo);
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);
}
package com.clx.performance.dao;
import com.clx.performance.mapper.TruckPositionMapper;
import com.clx.performance.model.TruckPosition;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
public interface TruckPositionDao extends BaseDao<TruckPositionMapper, TruckPosition, Integer> {
void updateTruckPositionStatus(Integer deleteStatus, List<String> truckNoList);
void replaceTruckPosition(List<TruckPosition> truckPositionList);
}
......@@ -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;
......@@ -566,4 +567,53 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
public List<OrderChild> listByChildNoList(List<String> childNoList) {
return list(lQrWrapper().in(OrderChild :: getChildNo,childNoList));
}
@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;
import cn.hutool.core.collection.CollectionUtil;
import com.clx.performance.dao.TruckPositionDao;
import com.clx.performance.mapper.TruckPositionMapper;
import com.clx.performance.model.TruckPosition;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Repository
public class TruckPositionDaoImpl extends BaseDaoImpl<TruckPositionMapper, TruckPosition, Integer>
implements TruckPositionDao {
@Override
public void updateTruckPositionStatus(Integer deleteStatus, List<String> truckNoList) {
update(lUdWrapper()
.set(TruckPosition::getDeleteStatus, deleteStatus)
.notIn(CollectionUtil.isNotEmpty(truckNoList), TruckPosition::getTruckNo, truckNoList)
);
}
@Override
public void replaceTruckPosition(List<TruckPosition> truckPositionList) {
baseMapper.replaceTruckPosition(truckPositionList);
}
}
......@@ -49,6 +49,7 @@ public class LineWarnInfoDaoImpl extends BaseDaoImpl<LineWarnInfoMapper, LineWar
public boolean updateWarnTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getId, item.getId())
.set(LineWarnInfo::getWeather, item.getWeather())
.set(LineWarnInfo::getWarnTime, item.getWarnTime())
);
}
......
......@@ -14,6 +14,14 @@ 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)
......
......@@ -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())
);
}
......
......@@ -9,6 +9,8 @@ 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.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);
......
......@@ -5,6 +5,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
......@@ -15,7 +16,7 @@ public class LineWarnCommonInfoDTO {
String orderGoodsNo; //货单编号
private int taskCount; //任务数量
private BigDecimal taskWeight; //任务数量
private int loadTimeAvg; //平均装车时间(min)
private int unloadTimeAvg; //平均卸车时间(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;//车数
public Integer getNum(){
if(num == null){
return 0;
}
return num;
}
}
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.position;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.DeleteStatusEnum;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.TruckPositionDao;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.TruckPosition;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.user.feign.TruckFeign;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.TruckOwnerInfoVO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.job.JobLog;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Slf4j
@Component
public class TruckPositionJob {
@Autowired(required = false)
UserClxFeign userClxFeign;
@Autowired(required = false)
TruckFeign truckFeign;
@Autowired
RedisTemplate redisTemplate;
@Autowired
TruckTraceService truckTraceService;
@Autowired
OrderChildDao orderChildDao;
@Autowired
TruckPositionDao truckPositionDao;
/**
* 车辆位置
*/
@XxlJob("truckPosition")
public void truckPosition() {
try {
getPlatformTruckPosition();
} catch (Exception e) {
log.warn("定时任务获取平台车辆当前定位信息失败,异常原因:{}",e);
JobLog.error("定时任务获取平台车辆当前定位信息失败,异常原因=====================", e);
}
}
/**
* @Author kavin
* @Description 定时获取平台车辆的定位
* @Param []
* @return
**/
public void getPlatformTruckPosition(){
Result<List<String>> result = userClxFeign.getPlatformTruckList();
log.info("通过clx-user服务获取平台认证成功车辆,返回结果:{}", JSON.toJSONString(result));
if(Objects.equals(result.getCode(), ResultCodeEnum.SUCCESS.getCode())){
List<TruckPosition> truckPositionList = new ArrayList<>();
List<String> truckNos = result.getData();
//处理不在内的车牌号均至为失效
truckPositionDao.updateTruckPositionStatus(DeleteStatusEnum.YES.getCode(),truckNos);
if(CollectionUtils.isEmpty(truckNos)){
return;
}
//有效运单集合
List<OrderChild> orderChildList = orderChildDao.selectListWithEmptyCarList();
Map<String, OrderChild> truckChildStatusMap = orderChildList.stream()
.collect(Collectors.toMap(item -> item.getTruckNo(), item -> item,(v1,v2) -> v2));
//获取缓存中所有车辆位置信息
Map<String, TruckTraceDTO> truckTraceMap =
redisTemplate.opsForHash().entries(RedisConstants.ZJXL_TRUCK_TRACE_LIST);
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.plus(-5, ChronoUnit.MINUTES);
String beginTimeStr = DateUtils.formatDateTime(beginTime, "yyyy-MM-dd HH:mm:ss").get();
String endTimeStr = DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get();
//既没接单 又没有中交兴路坐标的车辆集合
List<String> noZJXLNoChildTruckNos = new ArrayList<>();
for(String truckNo : truckNos){
TruckTraceDTO trace = truckTraceMap.get(truckNo);
OrderChild child = truckChildStatusMap.get(truckNo);
if(Objects.isNull(trace)){
//无中交轨迹
TruckPosition position = new TruckPosition();
position.setTruckNo(truckNo);
position.setDeleteStatus(DeleteStatusEnum.NO.getCode());
Long userNo = null;
if(Objects.isNull(child)){
//车辆当前没有运单 取车主手机位置
Result<TruckOwnerInfoVO> truckOwnerResult = truckFeign.getTruckOwnerInfo(truckNo);
if(Objects.equals(truckOwnerResult.getCode(), ResultCodeEnum.SUCCESS.getCode())){
userNo = truckOwnerResult.getData().getUserNo();
}
}else{
position.setChildNo(child.getChildNo());
//车辆有运单 取运单司机手机位置
userNo = child.getDriverUserNo();
}
if(Objects.nonNull(userNo)){
List<DriverTraceVO> traceVOS =
truckTraceService.listDriverTraceByTime(userNo,beginTimeStr,endTimeStr);
if(!CollectionUtils.isEmpty(traceVOS)){
position.setLatitude(traceVOS.get(0).getLatitude());
position.setLongitude(traceVOS.get(0).getLongitude());
}
}
truckPositionList.add(position);
}else{
//有中交轨迹
TruckPosition position = new TruckPosition();
position.setTruckNo(truckNo);
position.setDeleteStatus(DeleteStatusEnum.NO.getCode());
if(Objects.nonNull(child)){
position.setChildNo(child.getChildNo());
}
BigDecimal[] location = trace.getLocation();
if(location.length > 1){
position.setLatitude(location[1]);
position.setLongitude(location[0]);
}
truckPositionList.add(position);
}
}
//保存
truckPositionDao.replaceTruckPosition(truckPositionList);
}else{
log.info("通过clx-user服务获取平台认证成功车辆,获取失败");
}
}
}
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);
}
}
......@@ -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;
......@@ -120,4 +121,41 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "statisticsTruckMonth")
MonthInComeAndOrderedVO statisticsTruckMonth(@Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime, @Param("truckNo")String truckNo);
@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);
}
\ No newline at end of file
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.TruckPosition;
import com.clx.performance.sqlProvider.TruckPositionProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Mapper
public interface TruckPositionMapper extends BaseMapper<TruckPosition> {
@InsertProvider(type = TruckPositionProvider.class, method = "replaceTruckPosition")
void replaceTruckPosition(List<TruckPosition> truckPositionList);
}
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;
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.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("truck_position")
public class TruckPosition implements HasKey<Integer> {
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 车牌号
*/
@TableField("truck_no")
private String truckNo;
/**
* 运单编号
*/
@TableField("child_no")
private String childNo;
/**
* 运单状态
*/
@TableField("child_status")
private Integer childStatus;;
/**
* 运单目的地所在省份
*/
@TableField("child_province")
private String childProvince;
/**
* 车辆位置所在省份
*/
@TableField("truck_province")
private String truckProvince;
/**
* 经度
*/
@TableField("longitude")
private BigDecimal longitude;
/**
* 纬度
*/
@TableField("latitude")
private BigDecimal latitude;
/**
* 删除状态: 0-否;1-是
*/
@TableField("delete_status")
private Integer deleteStatus;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
@TableField("modified_time")
private LocalDateTime modifiedTime;
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
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;
......@@ -30,9 +31,11 @@ public class LineWarnConfig implements HasKey<Integer> {
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; //创建人
......
......@@ -36,6 +36,7 @@ public class LineWarnInfo implements HasKey<Integer> {
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; //创建人
......
......@@ -37,6 +37,7 @@ public class LineWarnOrderGoods implements HasKey<Integer> {
private Integer loadNum; //装车车数
private Integer arriveReceiveNum; //到达目的地车数
private Integer unloadNum; //卸车车数
private LocalDateTime lastLineReportTime; //上次线路上报时间
private Integer status; //状态
private Integer warnStatus; //预警使能:0禁用 1启用
private LocalDateTime createTime; //创建时间
......
......@@ -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; //修改时间
......
......@@ -26,6 +26,11 @@ public class LineWarnCommonServiceImpl implements LineWarnCommonService {
@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){
......@@ -33,6 +38,7 @@ public class LineWarnCommonServiceImpl implements LineWarnCommonService {
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);
......@@ -54,6 +60,7 @@ public class LineWarnCommonServiceImpl implements LineWarnCommonService {
lineWarnInfo.setReceiveAddressId(orderGoods.getReceiveAddressId());
lineWarnInfo.setReceiveAddress(orderGoods.getReceiveAddressShorter());
lineWarnInfo.setWeather(weather);
lineWarnInfo.setWarnTime(LocalDateTime.now());
lineWarnInfoDao.saveEntity(lineWarnInfo);
......
......@@ -50,6 +50,8 @@ public class LineWarnConfigServiceImpl implements LineWarnConfigService {
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfig.setCongestionTime(param.getCongestionTime());
lineWarnConfig.setCreateBy(loginUserInfo.getUserName());
lineWarnConfigDao.saveEntity(lineWarnConfig);
......@@ -73,7 +75,7 @@ public class LineWarnConfigServiceImpl implements LineWarnConfigService {
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfig.setCongestionTime(param.getCongestionTime());
lineWarnConfigDao.updateConfig(lineWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
......
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);
}
}
......@@ -2,10 +2,11 @@ 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.LineWarnOrderGoodsDao;
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;
......@@ -17,7 +18,6 @@ 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.service.trace.TruckTraceService;
import com.clx.performance.struct.linewarn.LineWarnInfoStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
......@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
......@@ -42,14 +43,12 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
private LineWarnLogDao lineWarnLogDao;
@Autowired
private LineWarnRangeDao lineWarnRangeDao;
@Autowired
private LineWarnOrderGoodsDao lineWarnOrderGoodsDao;
@Autowired
private LineWarnInfoStruct lineWarnInfoStruct;
@Autowired
private TruckTraceService truckTraceService;
private OrderChildDao orderChildDao;
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -107,46 +106,6 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
lineWarnLogDao.saveEntity(lineWarnLog);
}
//
// @Override
// public VehicleTraceVO getTrace(Integer id) {
// VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(id).orElseThrow(ResultEnum.DATA_NOT_FIND);
// OrderChild orderChild = orderChildDao.getByChildNo(vehicleWarnInfo.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
//
// LocalDateTime beginTime = vehicleWarnInfo.getTakeTime();
// LocalDateTime endTime = LocalDateTime.now();
// if (orderChild.getArriveSendTime() != null) {endTime = orderChild.getArriveSendTime();}
// if (orderChild.getLoadTime() != null) {endTime = orderChild.getLoadTime();}
// if (orderChild.getArriveReceiveTime() != null) {endTime = orderChild.getArriveReceiveTime();}
// if (orderChild.getUnloadTime() != null) {endTime = orderChild.getUnloadTime();}
// if (orderChild.getConfirmTime() != null) {endTime = orderChild.getConfirmTime();}
// if (orderChild.getSettleTime() != null) {endTime = orderChild.getSettleTime();}
// if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();}
// if (endTime.isAfter(beginTime.plusDays(TRUCK_TRACE_DAY_MAX))) {endTime = beginTime.plusDays(TRUCK_TRACE_DAY_MAX);} //最多查询3天
//
// List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(),
// LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
// // 接单重车、卸车空车
// for (DriverTruckTraceVO item : truckTraceList) {
// item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
// if (orderChild.getCancelTime() != null){
// if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getCancelTime())){
// item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
// }
// if (orderChild.getUnloadTime() != null){
// if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getUnloadTime())){
// item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
// }
// }
// List<DriverTraceVO> driverTraceList = truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(),
// LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
//
// VehicleTraceVO result = new VehicleTraceVO();
// result.setDriverTraceList(truckTraceService.splitDriverTrace(driverTraceList));
// result.setTruckTraceList(truckTraceService.splitTruckTrace(truckTraceList));
//
// return result;
// }
@Override
public LineWarnInfoVO getInfo(Integer id) {
......@@ -158,8 +117,28 @@ public class LineWarnInfoServiceImpl implements LineWarnInfoService {
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()) == null? 0:takeMap.get(item.getOrderGoodsNo()).getNum());
item.setArriveSendNum(sendMap.get(item.getOrderGoodsNo()) == null? 0:sendMap.get(item.getOrderGoodsNo()).getNum());
item.setLoadNum(loadMap.get(item.getOrderGoodsNo()) == null? 0:loadMap.get(item.getOrderGoodsNo()).getNum());
item.setArriveReceiveNum(receiveMap.get(item.getOrderGoodsNo()) == null? 0:receiveMap.get(item.getOrderGoodsNo()).getNum());
item.setUnloadNum(unloadMap.get(item.getOrderGoodsNo()) == null? 0:unloadMap.get(item.getOrderGoodsNo()).getNum());
}
}
return page;
......
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.linewarn.LineWarnJamWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class LineWarnJamWarnServiceImpl implements LineWarnJamWarnService {
@Override
public void jamWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
}
}
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 lineWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
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;
......@@ -17,6 +19,7 @@ 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;
......@@ -30,6 +33,8 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void loadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
......@@ -42,9 +47,15 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
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());
......@@ -68,7 +79,7 @@ public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
......
......@@ -4,10 +4,7 @@ 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.LineWarnLineReportMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
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;
......@@ -57,16 +54,34 @@ public class LineWarnMqServiceImpl implements LineWarnMqService {
}
@Override
public void lineReport(Integer sendSystemAddressId, Integer receiveSystemAddressId, Integer reportType) {
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));
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);
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.dto.linewarn.LineWarnCommonInfoDTO;
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, LineWarnCommonInfoDTO lineWarnCommonInfo) {
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;
......@@ -17,6 +19,7 @@ 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;
......@@ -31,6 +34,8 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void takeWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
......@@ -44,9 +49,15 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
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());
......@@ -70,7 +81,7 @@ public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
......
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.*;
import java.util.stream.Collectors;
@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) {
if (1> 0){
// 模拟数据
return resultMock();
}
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;
}
private LineWarnTraceVO resultMock(){
LineWarnTraceVO result = new LineWarnTraceVO();
result.setOrderGoodsNo("10000000");
result.setSendAddressId(1);
result.setSendAddress("朝阳煤矿");
result.setReceiveAddressId(2);
result.setReceiveAddress("西城煤矿");
result.setSendLongitude(new BigDecimal("116.250000"));
result.setSendLatitude(new BigDecimal("39.540000"));
result.setReceiveLongitude(new BigDecimal("116.360000"));
result.setReceiveLatitude(new BigDecimal("39.9000000"));
result.setOrderGoodsStatus(30);
result.setExtractWeight(new BigDecimal(1000));
result.setLoadWeight(new BigDecimal("200"));
result.setUnloadWeight(new BigDecimal("100"));
List<LineWarnTruckTraceInfoVO> truckList = new ArrayList<>();
LineWarnTruckTraceInfoVO truck1 = new LineWarnTruckTraceInfoVO();
truck1.setChildNo("1000001");
truck1.setTruckNo("京A000001");
truck1.setDriverUserNo(1L);
truck1.setDriverName("张三");
truck1.setDriverMobile("13000000001");
truck1.setTruckStatus(1);
truck1.setStatus(30);
truck1.setLongitude(new BigDecimal("116.450000"));
truck1.setLatitude(new BigDecimal("39.240000"));
truckList.add(truck1);
LineWarnTruckTraceInfoVO truck2 = new LineWarnTruckTraceInfoVO();
truck2.setChildNo("1000002");
truck2.setTruckNo("京A000002");
truck2.setDriverUserNo(1L);
truck2.setDriverName("张三");
truck2.setDriverMobile("13000000002");
truck2.setTruckStatus(0);
truck2.setStatus(70);
truck2.setLongitude(new BigDecimal("116.290000"));
truck2.setLatitude(new BigDecimal("39.340000"));
truckList.add(truck2);
result.setTruckList(truckList);
// 推荐线路
List<LineWarnRoutePositionVO> positionList = lineWarnInfoStruct
.convertLineWarnRoutePositionVO(gdUtils.getRoute(result.getSendLongitude(),
result.getSendLatitude(), result.getReceiveLongitude(),
result.getReceiveLatitude()));
LineWarnRouteVO route = new LineWarnRouteVO();
route.setPositonList(positionList);
result.setRoute(route);
return result;
}
}
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;
......@@ -30,6 +31,8 @@ public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void unloadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
......@@ -39,9 +42,15 @@ public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
int needTime = 0;
// 接单最长时间
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.UNLOAD.getCode());
......@@ -65,7 +74,7 @@ public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
if (pendingOrderTime.plusMinutes(time).isAfter(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
......
package com.clx.performance.service.impl.linewarn;
import com.clx.order.vo.feign.FeignAddressVO;
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.extranal.user.AddressService;
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.LineWarnWeatherWarnService;
import com.clx.performance.utils.gd.GdUtils;
import com.msl.common.base.Optional;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnWeatherWarnServiceImpl implements LineWarnWeatherWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private InternalReportService internalReportService;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private GdUtils gdUtils;
@Autowired
private AddressService addressService;
@Override
public void weatherWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.WEATHER.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doWeather(orderGoods, item);
}
}
private void doWeather(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;
}
Optional<FeignAddressVO> addressOptional = addressService
.getSendAndReceiveAddress(orderGoods.getSendAddressId(), orderGoods.getReceiveAddressId());
if (addressOptional.isEmpty()) {return;}
FeignAddressVO feignAddressVO = addressOptional.get();
if (feignAddressVO.getSendAddress()!=null
&& StringUtils.isNotBlank(feignAddressVO.getSendAddress().getCityCode())){
String weather = gdUtils.getWeather(feignAddressVO.getSendAddress().getCityCode());
if (weatherCheck(weather)){
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, weather);
}
}
if (feignAddressVO.getReceiveAddress()!=null
&& StringUtils.isNotBlank(feignAddressVO.getReceiveAddress().getCityCode())){
String weather = gdUtils.getWeather(feignAddressVO.getReceiveAddress().getCityCode());
if (weatherCheck(weather)){
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig, weather);
}
}
}
/**
* 天气验证
*/
private boolean weatherCheck(String weather){
if (weather.contains("雨")
|| weather.contains("雪")
|| weather.contains("沙尘暴")
|| weather.contains("强沙尘暴")
|| weather.contains("大雾")
|| weather.contains("浓雾")
|| weather.contains("强浓雾")
|| weather.contains("特强浓雾")
|| weather.contains("雾")
|| weather.contains("中度霾")
|| weather.contains("重度霾")
|| weather.contains("严重霾")
){
return true;
}
return false;
}
}
......@@ -32,6 +32,8 @@ import java.util.List;
public class TruckTraceServiceImpl implements TruckTraceService {
// 停留速度
private static final Integer PARK_SPEED = 5;
// 最近位置时间
private static final Integer LAST_POSITION_TIME = 5;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
......@@ -261,7 +263,12 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(LAST_POSITION_TIME));
return getCurrentPosition(truckNo, userNo, beginTime);
}
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime) {
String endTime = LocalDateTimeUtils.formatTime();
// 车辆
......
package com.clx.performance.service.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.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.struct.vehiclewarn.VehicleWarnRangeStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnRangDTO;
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 java.time.LocalDateTime;
@Slf4j
@Service
public class VehicleWarnRangeServiceImpl implements VehicleWarnRangeService {
@Autowired
private VehicleWarnRangeDao vehicleWarnRangeDao;
@Autowired
private VehicleWarnRangeStruct vehicleWarnRangeStruct;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Override
public void updateSuspend(VehicleWarnRangeSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
VehicleWarnRang vehicleWarnRangOld = vehicleWarnRangeDao
.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnConfig vehicleWarnConfig = vehicleWarnConfigDao
.findById(vehicleWarnRangOld.getWarnConfigId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnInfo vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnRangOld.getWarnConfigId());
vehicleWarnInfo.setOrderGoodsNo(vehicleWarnRangOld.getOrderGoodsNo());
vehicleWarnInfo.setChildNo(vehicleWarnRangOld.getChildNo());
vehicleWarnInfo.setSuspendTime(endTime);
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, vehicleWarnRangOld.getWarnRang());
VehicleWarnRang vehicleWarnRang = new VehicleWarnRang();
vehicleWarnRang.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnRang.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnRang.setWarnRang(vehicleWarnRangOld.getWarnRang());
vehicleWarnRang.setOrderGoodsNo(vehicleWarnRangOld.getOrderGoodsNo());
vehicleWarnRang.setChildNo(vehicleWarnRangOld.getChildNo());
vehicleWarnRang.setWarnEndTime(endTime);
vehicleWarnRang.setStatus(VehicleWarnRangEnum.Status.ENABLE.getCode());
vehicleWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
vehicleWarnRangeDao.updateDisable(vehicleWarnRang);
// 新增新数据
vehicleWarnRangeDao.saveEntity(vehicleWarnRang);
}
@Override
public void updateResume(VehicleWarnRangeResumeUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTime.now().minusSeconds(1);
VehicleWarnRang vehicleWarnRangOld = vehicleWarnRangeDao
.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnConfig vehicleWarnConfig = vehicleWarnConfigDao
.findById(vehicleWarnRangOld.getWarnConfigId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnInfo vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfo.setWarnConfigId(vehicleWarnRangOld.getWarnConfigId());
vehicleWarnInfo.setOrderGoodsNo(vehicleWarnRangOld.getOrderGoodsNo());
vehicleWarnInfo.setChildNo(vehicleWarnRangOld.getChildNo());
vehicleWarnInfo.setSuspendTime(endTime);
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, vehicleWarnRangOld.getWarnRang());
VehicleWarnRang vehicleWarnRang = new VehicleWarnRang();
vehicleWarnRang.setWarnConfigId(vehicleWarnConfig.getId());
vehicleWarnRang.setWarnName(vehicleWarnConfig.getWarnName());
vehicleWarnRang.setWarnRang(vehicleWarnRangOld.getWarnRang());
vehicleWarnRang.setOrderGoodsNo(vehicleWarnRangOld.getOrderGoodsNo());
vehicleWarnRang.setChildNo(vehicleWarnRangOld.getChildNo());
vehicleWarnRang.setWarnEndTime(endTime);
vehicleWarnRang.setStatus(VehicleWarnRangEnum.Status.ENABLE.getCode());
vehicleWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
vehicleWarnRangeDao.updateDisable(vehicleWarnRang);
// 新增新数据
vehicleWarnRangeDao.saveEntity(vehicleWarnRang);
}
@Override
public VehicleWarnRangDTO getRange(Integer id) {
return vehicleWarnRangeStruct.convert(vehicleWarnRangeDao.findById(id).orNull());
}
@Override
public IPage<VehicleWarnRangDTO> pageRange(PageVehicleWarnRangeParam param) {
Page<VehicleWarnRangDTO> page = vehicleWarnRangeStruct.convertPage(vehicleWarnRangeDao.pageByParam(param));
return page;
}
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnUserEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
......@@ -47,11 +48,14 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
}
List<Integer> warnTypeList = Arrays.stream(VehicleWarnConfigEnum.WarnType.values())
.map(item -> item.getCode()).collect(Collectors.toList());
List<Integer> lineWarnTypeList = Arrays.stream(LineWarnConfigEnum.WarnType.values())
.map(item -> item.getCode()).collect(Collectors.toList());
VehicleWarnUser vehicleWarnUser = new VehicleWarnUser();
vehicleWarnUser.setName(param.getName());
vehicleWarnUser.setMobile(param.getMobile());
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setLineWarnTypeJson(JSON.toJSONString(new ArrayList<>()));
vehicleWarnUser.setLineWarnTypeJson(JSON.toJSONString(lineWarnTypeList));
vehicleWarnUser.setCreateBy(loginUserInfo.getUserName());
vehicleWarnUserDao.saveEntity(vehicleWarnUser);
......@@ -83,7 +87,12 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
.filter(item -> Objects.equals(item.getEnable(), 1))
.map(item->item.getWarnType()).collect(Collectors.toList());
List<Integer> lineWarnTypeList = param.getLineWarnTypeList().stream()
.filter(item -> Objects.equals(item.getEnable(), 1))
.map(item->item.getWarnType()).collect(Collectors.toList());
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(lineWarnTypeList));
vehicleWarnUserDao.updateWarnType(vehicleWarnUser);
}
......@@ -95,6 +104,15 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
vehicleWarnUser.setDeleteStatus(VehicleWarnUserEnum.DeleteStatus.YES.getCode());
vehicleWarnUserDao.deleteUser(vehicleWarnUser);
}
@Override
public void updateNoticeStatus(VehicleWarnUserStatusUpdateParam param) {
VehicleWarnUser vehicleWarnUser = vehicleWarnUserDao
.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnUser.setNoticeStatus(param.getNoticeStatus());
vehicleWarnUserDao.updateNoticeStatus(vehicleWarnUser);
}
@Override
public VehicleWarnUserVO getUser(Integer id) {
......
......@@ -8,4 +8,5 @@ public interface LineWarnCommonService {
void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig);
void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig, String weather);
}
......@@ -3,8 +3,8 @@ package com.clx.performance.service.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
public interface LineWarnJamWarnService {
public interface LineWarnCongestionWarnService {
void jamWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
void congestionWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
}
......@@ -5,6 +5,6 @@ import com.clx.performance.model.OrderGoods;
public interface LineWarnLineWarnService {
void lineWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
void lineAbnormalWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
}
......@@ -2,8 +2,11 @@ package com.clx.performance.service.linewarn;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderChildWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import java.util.List;
public interface LineWarnMqHandlerService {
void orderGoodsAdd(LineWarnOrderGoodsAddMqParam mq);
......@@ -11,4 +14,10 @@ public interface LineWarnMqHandlerService {
void lineWarn(LineWarnLineWarnMqParam mq);
void notice(LineWarnNoticeMqParam mq);
void sendSms(List<String> mobileList, String warnName, String orderGoodsNo);
void sendClink(List<String> mobileList, String warnName, String orderGoodsNo);
void orderChildWarn(LineWarnOrderChildWarnMqParam mq);
}
......@@ -8,5 +8,8 @@ public interface LineWarnMqService {
void lineWarnNotice(Integer infoId);
void lineReport(Integer sendSystemAddressId, Integer receiveSystemAddressId, Integer reportType);
void lineReport(Integer sendSystemAddressId, Integer receiveSystemAddressId,
Integer reportType, Integer estimatedTravelTime);
void orderChildWarn(String orderGoodsNo, String childNo);
}
package com.clx.performance.service.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
public interface LineWarnOrderChildWarnService {
void orderChildWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
void orderChildWarn(OrderGoods orderGoods);
}
package com.clx.performance.service.linewarn;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
public interface LineWarnTraceService {
LineWarnTraceVO getTraceInfo(String orderGoodsNo);
}
......@@ -19,6 +19,8 @@ public interface TruckTraceService {
void driverTraceSave(DriverTraceAddParam param);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
BigDecimal[] getCurrentPosition(String truckNo, Long userNo, String beginTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime);
......@@ -37,5 +39,6 @@ public interface TruckTraceService {
List<List<DriverTruckTraceVO>> splitTruckTrace(List<DriverTruckTraceVO> traceList);
void saveTruckTrace(String truckNo,Integer size,String gpsTime);
}
package com.clx.performance.service.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.vo.pc.vehiclewarn.VehicleWarnRangDTO;
public interface VehicleWarnRangeService {
void updateSuspend(VehicleWarnRangeSuspendUpdateParam param);
void updateResume(VehicleWarnRangeResumeUpdateParam param);
VehicleWarnRangDTO getRange(Integer id);
IPage<VehicleWarnRangDTO> pageRange(PageVehicleWarnRangeParam param);
}
......@@ -11,6 +11,7 @@ public interface VehicleWarnUserService {
void updateUser(VehicleWarnUserUpdateParam param);
void updateConfig(VehicleWarnUserConfigUpdateParam param);
void deleteUser(VehicleWarnUserDeleteParam param);
void updateNoticeStatus(VehicleWarnUserStatusUpdateParam param);
VehicleWarnUserVO getUser(Integer id);
IPage<VehicleWarnUserVO> pageUser(PageVehicleWarnUserParam param);
......
package com.clx.performance.sqlProvider;
import com.clx.order.enums.DeleteStatusEnum;
import com.clx.performance.model.TruckPosition;
import org.apache.commons.lang.StringUtils;
import java.util.List;
import java.util.Objects;
/**
* 车辆位置;
*
* @author : jiangwenye
* @date : 2024-05-29
*/
public class TruckPositionProvider {
public String replaceTruckPosition(List<TruckPosition> truckPositionList) {
StringBuffer sqlList = new StringBuffer();
sqlList.append(" REPLACE INTO truck_position " +
"(truck_no,child_no,child_status,child_province,truck_province," +
"longitude,latitude,delete_status) " +
" VALUES ");
for (int i = 0; i < truckPositionList.size(); i++) {
TruckPosition tp = truckPositionList.get(i);
sqlList.append(" ('")
.append(tp.getTruckNo()).append("','")
.append(StringUtils.isEmpty(tp.getChildNo())?"":tp.getChildNo()).append("',")
.append(Objects.isNull(tp.getChildStatus())?0:tp.getChildStatus()).append(",'")
.append(StringUtils.isEmpty(tp.getChildProvince())?"":tp.getChildProvince()).append("','")
.append(StringUtils.isEmpty(tp.getTruckProvince())?"":tp.getTruckProvince()).append("',")
.append(Objects.isNull(tp.getLongitude())?0:tp.getLongitude()).append(",")
.append(Objects.isNull(tp.getLatitude())?0:tp.getLatitude()).append(",")
.append(DeleteStatusEnum.NO.getCode())
.append(")");
if (i < truckPositionList.size() - 1) {
sqlList.append(",");
}
}
return sqlList.toString();
}
}
......@@ -20,7 +20,7 @@ public class LineWarnInfoSqlProvider {
SELECT("*");
FROM(TABLE);
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {WHERE("order_goods_no = #{param.orderGoodsNo}");}
if (Objects.nonNull(param.getWarnType())) {WHERE("warn_type = #{param.warnType}");}
if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");}
if (Objects.nonNull(param.getStatus())) {
......@@ -40,8 +40,8 @@ public class LineWarnInfoSqlProvider {
if (StringUtils.isNotBlank(param.getSendAddress())) {WHERE("send_address like CONCAT('%',#{param.sendAddress},'%')");}
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address like CONCAT('%',#{param.receiveAddress},'%')");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("warn_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("warn_time <= #{param.endTime}");}
ORDER_BY("id desc");
}}.toString();
......
......@@ -20,6 +20,7 @@ public class VehicleWarnInfoSqlProvider {
SELECT("*");
FROM(TABLE);
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {WHERE("order_goods_no = #{param.orderGoodsNo}");}
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
if (Objects.nonNull(param.getWarnType())) {WHERE("warn_type = #{param.warnType}");}
if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");}
......
package com.clx.performance.sqlProvider.vehiclewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnRangeParam;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class VehicleWarnRangeSqlProvider {
private static final String TABLE = "vehicle_warn_range";
public String pageByParam(@Param("page") Page page, @Param("param") PageVehicleWarnRangeParam param) {
return new SQL(){{
SELECT("*");
FROM(TABLE);
WHERE("(status = 1 and warn_end_time > now())");
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
if (Objects.nonNull(param.getWarnRang())) {WHERE("warn_rang = #{param.warnRang}");}
if (StringUtils.isNotBlank(param.getSuspendObject())) {
WHERE("((warn_rage=1 and child_no =#{param.suspendObject}) " +
"or (warn_rage=2 and order_goods_no =#{param.suspendObject}))");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
ORDER_BY("id desc");
}}.toString();
}
}
......@@ -6,6 +6,8 @@ import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class VehicleWarnUserSqlProvider {
private static final String TABLE = "vehicle_warn_user";
......@@ -19,6 +21,7 @@ public class VehicleWarnUserSqlProvider {
WHERE("delete_status = 0");
if (StringUtils.isNotBlank(param.getName())) {WHERE("name = #{param.name}");}
if (StringUtils.isNotBlank(param.getMobile())) {WHERE("mobile = #{param.mobile}");}
if (Objects.nonNull(param.getNoticeStatus())) {WHERE("notice_status = #{param.noticeStatus}");}
ORDER_BY("id desc");
}}.toString();
......
......@@ -9,6 +9,7 @@ import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.CarrierOrderChildDetailVO;
import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTruckTraceInfoVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
......@@ -34,4 +35,7 @@ public interface OrderChildStruct {
List<OwnerOrderChildVO> convertOwnerOrderChildVOList(List<OrderChild> list);
List<LineWarnTruckTraceInfoVO> convertLineWarnTruckTraceInfoVO(List<OrderChild> list);
}
......@@ -3,6 +3,7 @@ package com.clx.performance.struct;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
......@@ -16,4 +17,7 @@ public interface OrderGoodsStruct {
OrderGoodsVO convert(OrderGoods orderGoods);
List<OrderGoodsFeignVO> convertList(List<OrderGoods> orderGoods);
LineWarnTraceVO convertLineWarnTraceVO(OrderGoods orderGoods);
}
......@@ -2,12 +2,17 @@ package com.clx.performance.struct.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.gd.GdPosDTO;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
import com.clx.performance.vo.pc.linewarn.LineWarnRoutePositionVO;
import com.clx.performance.vo.pc.linewarn.LineWarnRouteVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface LineWarnInfoStruct {
......@@ -15,4 +20,5 @@ public interface LineWarnInfoStruct {
Page<LineWarnInfoVO> convertPage(IPage<LineWarnInfo> page);
List<LineWarnRoutePositionVO> convertLineWarnRoutePositionVO(List<GdPosDTO> list);
}
package com.clx.performance.struct.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.vo.pc.vehiclewarn.VehicleWarnRangDTO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface VehicleWarnRangeStruct {
VehicleWarnRangDTO convert(VehicleWarnRang item);
Page<VehicleWarnRangDTO> convertPage(IPage<VehicleWarnRang> page);
}
......@@ -33,6 +33,7 @@ public class GdService {
private static final String REGEO_API = "https://restapi.amap.com/v3/geocode/regeo";//逆地理编码
private static final String WEATHER_API = "https://restapi.amap.com/v3/weather/weatherInfo?parameters";//天气
private String gaodeKey = "b2550e16bbc7bf9f6cd168e0f21709fc";
......@@ -356,4 +357,52 @@ public class GdService {
return !Objects.isNull(value) && BigDecimal.ZERO.compareTo(value) != 0 ? value.setScale(2, 4) : BigDecimal.ZERO;
}
public String getWeather(String city){
return getWeather(gaodeKey, city);
}
public static String getWeather(String key, String city) {
String url = WEATHER_API+"?output=json&city=" +city+"&extensions=base&key="+key;
String resultStr;
try {
resultStr = HttpUtils.httpGetRequest(url);
} catch (Exception e) {
throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德地理编码接口异常");
}
if (StringUtils.isBlank(resultStr)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 返回结果空");}
JSONObject retJSONObject = JSONObject.parseObject(resultStr);
if (Objects.isNull(retJSONObject)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 返回结果转换异常, result:"+resultStr);}
Integer status = retJSONObject.getInteger("status");
if (!Objects.equals(1, status)) {
if (Objects.equals(10001, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 无效key, result:"+resultStr);}
else if (Objects.equals(10002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 没有权限使用相应的服务或者请求接口的路径拼写错误, result:"+resultStr);}
else if (Objects.equals(10003, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 访问已超出日访问量, result:"+resultStr);}
else if (Objects.equals(10004, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 单位时间内访问过于频繁, result:"+resultStr);}
else if (Objects.equals(10010, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, IP访问超限, result:"+resultStr);}
else if (Objects.equals(10044, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 账号维度日调用量超出限制, result:"+resultStr);}
else if (Objects.equals(40000, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 余额耗尽, result:"+resultStr);}
else if (Objects.equals(40002, status)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 购买服务到期, result:"+resultStr);}
else if (Objects.equals(20802, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 路线计算失败, result:"+resultStr); }
else if (Objects.equals(20803, status)) { throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 起点终点距离过长, result:"+resultStr); }
else {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, 状态异常, result:"+resultStr);}
}
// 解析
JSONArray geocodes = retJSONObject.getJSONArray("lives");
if (Objects.isNull(geocodes)) {throw new ServiceSystemException(ResultCodeEnum.FAIL, "调用高德天气接口异常, result:"+resultStr);}
JSONObject item = geocodes.getJSONObject(0);
String weather = item.getString("weather");
return weather;
}
}
package com.clx.performance.utils.gd;
import com.clx.performance.dto.gd.GdPosDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.gps.GpsUtil;
......@@ -8,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Slf4j
......@@ -72,4 +74,29 @@ public class GdUtils {
return GpsUtil.distanceM(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
/**
* 天气
*/
public String getWeather(String city){
return gdService.getWeather(city);
}
/**
* 获取线路
*/
public List<GdPosDTO> getRoute(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
return gdRouteDTOS.get(0).getPosList();
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return new ArrayList<>();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论