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

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

# Conflicts: # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java
......@@ -83,4 +83,20 @@ public enum DriverTruckEnum {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
//车辆状态:1空车 2重车
@Getter
@AllArgsConstructor
public enum TraceTruckStatus {
EMPTY(1, "空车"),
HEAVY(2, "重车");
private final Integer code;
private final String msg;
public static Optional<TraceTruckStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
......@@ -35,7 +35,8 @@ public enum ResultEnum implements com.msl.common.enums.ResultEnum {
VEHICLE_WARN_USER_EXIST(1201, "联系方式已存在"),
VEHICLE_WARN_CONFIG_EXIST(1201, "配置名称已存在"),
LINE_WARN_USER_EXIST(1301, "联系方式已存在"),
LINE_WARN_CONFIG_EXIST(1302, "配置名称已存在"),
;
......
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnConfigEnum {
;
@Getter
@AllArgsConstructor
public enum WarnType {
TAKE(1, "接单预警"),
LOAD(2, "装车预警"),
UNLOAD(3, "卸车预警"),
JAM(4, "拥堵预警 "),
WEATHER(5, "天气预警"),
CHILD_ABNORMAL(6, "运单异常"),
LINE_ABNORMAL(7, "线路异常"),
;
private final Integer code;
private final String msg;
public static Optional<WarnType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum DeleteStatus {
NO(0, "否"),
YES(1, "是"),
;
private final Integer code;
private final String msg;
public static Optional<DeleteStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(DeleteStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum Status {
ENABLE(1, "启用"),
DISABLE(2, "禁用"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
}
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnInfoEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
INIT(1, "待处理"),
RESOLVE(2, "已处理"),
SUSPEND(3, "暂停预警"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
}
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnLogEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
SUSPEND(1, "暂停预警"),
RESOLVE(2, "处理预警"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Type::getMsg).orElse(null);
}
}
}
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnOrderGoodsEnum {
;
@Getter
@AllArgsConstructor
public enum TraceStatus {
DISABLE(0, "禁止"),
ENABLE(1, "启用"),
;
private final Integer code;
private final String msg;
public static Optional<TraceStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(TraceStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum WarnStatus {
DISABLE(0, "禁止"),
ENABLE(1, "启用"),
;
private final Integer code;
private final String msg;
public static Optional<WarnStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(WarnStatus::getMsg).orElse(null);
}
}
}
package com.clx.performance.enums.linewarn;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum LineWarnRangEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
ENABLE(1, "有效"),
DISABLE(2, "无效"),
;
private final Integer code;
private final String msg;
public static Optional<Status> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getMsg).orElse(null);
}
}
}
......@@ -12,6 +12,7 @@ import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountArrearsVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleVO;
import com.msl.common.result.Result;
......@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
......@@ -115,4 +117,9 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/owner/loanAccount"})
Result<OwnerLoanAccountVO> loanAccount(@RequestParam Long userNo);
@GetMapping(value = {"clx-performance/feign/owner/accountArrearsInfo"})
Result<OwnerAccountArrearsVO> accountArrearsInfo(@RequestParam(value = "userNo") Long userNo,
@RequestParam(value = "prepaidArrearsOrder") BigDecimal prepaidArrearsOrder,
@RequestParam(value = "marginArrearsOrder") BigDecimal marginArrearsOrder);
}
......@@ -41,4 +41,10 @@ public class OrderChildCheckParam extends PositionParam {
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
}
package com.clx.performance.param.mq.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class LineWarnLineWarnMqParam {
private String orderGoodsNo; //货单编号
}
package com.clx.performance.param.mq.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 通知
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class LineWarnNoticeMqParam {
private Integer infoId; //id
}
package com.clx.performance.param.mq.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 新增
* @Date: 2024-5-31 13:45:10
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class LineWarnOrderGoodsAddMqParam {
private String orderGoodsNo; //货单编号
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigAddParam {
@ApiModelProperty(value = "预警方案名称", example = "方案1")
@NotBlank(message = "预警方案名称不能为空")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
@NotNull(message = "预警类型不能为空")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
@NotNull(message = "预警级别不能为空")
private Integer warnLevel;
@ApiModelProperty(value = "预警间隔(小时)", example = "1.1")
@NotNull(message = "预警间隔不能为空")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigDeleteUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigStatusUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnConfigUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警方案名称", example = "方案1")
@NotBlank(message = "预警方案名称不能为空")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
@NotNull(message = "预警类型不能为空")
private Integer warnType;
@ApiModelProperty(value = "预警级别: 1一级 2二级 3三级", example = "1")
@NotNull(message = "预警级别不能为空")
private Integer warnLevel;
@ApiModelProperty(value = "预警间隔(小时)", example = "1.1")
@NotNull(message = "预警间隔不能为空")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnInfoResolveUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
}
package com.clx.performance.param.pc.linewarn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class LineWarnInfoSuspendUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
@NotBlank(message = "预警屏蔽结束时间不能为空")
private String warnEndTime;
}
package com.clx.performance.param.pc.linewarn;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageLineWarnConfigParam extends PageParam {
@ApiModelProperty(value = "预警方案名称", example = "方案1")
private String warnName;
@ApiModelProperty(value = "预警类型", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
private Integer status;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
}
package com.clx.performance.param.pc.linewarn;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageLineWarnInfoParam extends PageParam {
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "运单编号", example = "1000")
private String childNo;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty(value = "开始时间", example = "")
private String beginTime;
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
}
......@@ -5,7 +5,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@Setter
......@@ -13,7 +13,7 @@ import javax.validation.constraints.NotBlank;
public class VehicleWarnInfoResolveUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotBlank(message = "id不能为空")
@NotNull(message = "id不能为空")
private Integer id;
}
......@@ -6,6 +6,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@Setter
......@@ -13,12 +14,14 @@ import javax.validation.constraints.NotBlank;
public class VehicleWarnInfoSuspendUpdateParam {
@ApiModelProperty(value = "id", example = "1")
@NotBlank(message = "id不能为空")
@NotNull(message = "id不能为空")
private Integer id;
@ApiModelProperty(value = "预警屏蔽范围:1运单 2货单 3无预警", example = "1")
@NotNull(message = "预警屏蔽范围不能为空")
private Integer warnRang;
@ApiModelProperty(value = "预警屏蔽结束时间", example = "")
@NotBlank(message = "预警屏蔽结束时间不能为空")
private String warnEndTime;
}
......@@ -31,6 +31,8 @@ public class DriverTraceAddParam {
private BigDecimal[] location;
@ApiModelProperty(value = "时间")
private String gpsTime;
@ApiModelProperty(value = "速度", example = "12.34")
private BigDecimal speed;
}
}
......@@ -42,11 +42,8 @@ public class OrderChildPoundInfoVO {
private Integer poundStatus;
@ApiModelProperty(value = "磅单审核驳回原因", example = "交货信息错误")
private String poundRemark;
@ApiModelProperty(value = "审核驳回类型:1装车 2卸车 3装车+卸车", example = "1")
@ApiModelProperty(value = "磅单审核驳回类型:1装车 2卸车 3装车+卸车", example = "1")
private Integer poundRejectType;
public Integer getPoundRejectType() {
return rejectType;
}
@ApiModelProperty(value = "状态", example = "0")
private Integer status;
......@@ -57,8 +54,4 @@ public class OrderChildPoundInfoVO {
@ApiModelProperty(value = "卸车磅单图片列表")
private List<String> unloadImageList;
@JsonIgnore
@ApiModelProperty(value = "审核驳回类型:1装车 2卸车 3装车+卸车", example = "1", hidden = true)
private Integer rejectType;
}
\ No newline at end of file
......@@ -210,6 +210,12 @@ public class OrderChildVO {
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
@ApiModelProperty(value = "车辆未开启中交兴路的提示信息")
private String notOpenZJXLMsg;
......
......@@ -138,4 +138,10 @@ public class OrderGoodsVO {
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class OwnerAccountArrearsVO {
@ApiModelProperty("当前预付账户未支付订单金额 等于0,不欠费,负数欠多少")
private BigDecimal prepaidArrearsOrderSumMoney;
@ApiModelProperty("当前保证金账户未支付订单金额 等于0,不欠费,负数欠多少")
private BigDecimal marginArrearsOrderSumMoney;
@ApiModelProperty("货主用户编码")
private Long userNo;
}
......@@ -77,9 +77,6 @@ public class CollectTruckWaitVO {
@ApiModelProperty(value = "预计等待时长", example = "")
private BigDecimal stationTime;
public BigDecimal getStationTime() {
return stationInTime;
}
@ApiModelProperty(value = "预计等待时长图片", example = "")
private List<String> stationImageList;
......
package com.clx.performance.vo.pc.linewarn;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @Author: aiqinguo
* @Description: 线路预警配置
* @Date: 2024/05/29 10:55:33
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class LineWarnConfigVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警方案名称", example = "接单预警")
private String warnName;
@ApiModelProperty(value = "预警类型: 1接单预警 2装车预警 3卸车预警 4拥堵预警 5天气预警 6运单异常 7线路异常", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型: 1接单预警 2装车预警 3卸车预警 4拥堵预警 5天气预警 6运单异常 7线路异常", example = "接单预警")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return LineWarnConfigEnum.WarnType.getMsgByCode(warnType);
}
@ApiModelProperty(value = "预警级别", example = "")
private Integer warnLevel;
@ApiModelProperty(value = "预警级别", example = "一级")
private String warnLevelMsg;
public String getWarnLevelMsg() {
if (warnLevel == 1) {return "一级";}
if (warnLevel == 2) {return "二级";}
if (warnLevel == 3) {return "三级";}
return null;
}
@ApiModelProperty(value = "预警间隔(小时)", example = "1.1")
private BigDecimal interval;
@ApiModelProperty(value = "时间占比(%)", example = "1.2")
private BigDecimal timeRatio;
@ApiModelProperty(value = "任务完成占比", example = "1.3")
private BigDecimal taskCompleteRatio;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "1")
private Integer status;
@ApiModelProperty(value = "状态:1启用 2禁用", example = "启用")
private String statusMsg;
public String getStatusMsg() {
return LineWarnConfigEnum.Status.getMsgByCode(status);
}
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
@Getter
@Setter
@NoArgsConstructor
public static class WarnTypeItem {
@ApiModelProperty(value = "报警类型", example = "1")
private Integer warnType;
@ApiModelProperty(value = "报警类型名称", example = "超时")
private String warnTypeName;
public WarnTypeItem(Integer warnType, String warnTypeName) {
this.warnType = warnType;
this.warnTypeName = warnTypeName;
}
}
}
\ No newline at end of file
package com.clx.performance.vo.pc.linewarn;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* @Author: aiqinguo
* @Description: 车辆预警信息表
* @Date: 2024/04/25 17:09:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
public class LineWarnInfoVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "预警id", example = "1")
private Integer warnId;
@ApiModelProperty(value = "预警名称", example = "超时")
private String warnName;
@ApiModelProperty(value = "预警类型: 1到达货源地延误 2前往货源地超时 3到达目的地延误 4前往目的地超时 5停留超时 6敏感区停留 7装车超时 8卸车超时 9运单延误", example = "1")
private Integer warnType;
@ApiModelProperty(value = "预警类型", example = "1")
private String warnTypeMsg;
public String getWarnTypeMsg() {
return LineWarnConfigEnum.WarnType.getMsgByCode(warnType);
}
@ApiModelProperty(value = "预警级别", example = "1")
private Integer warnLevel;
@ApiModelProperty(value = "预警级别", example = "一级")
private String warnLevelMsg;
public String getWarnLevelMsg() {
if (warnLevel == 1) {return "一级";}
if (warnLevel == 2) {return "二级";}
if (warnLevel == 3) {return "三级";}
return null;
}
@ApiModelProperty(value = "货单编号", example = "100000")
private String orderGoodsNo;
@ApiModelProperty(value = "发货地址id", example = "1")
private Integer sendAddressId;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址id", example = "2")
private Integer receiveAddressId;
@ApiModelProperty(value = "收货地址", example = "山西")
private String receiveAddress;
@ApiModelProperty(value = "运单状态", example = "1")
private Integer childStatus;
@ApiModelProperty(value = "预警时间", example = "")
private String warnTime;
@ApiModelProperty(value = "预警暂停时间", example = "")
private String suspendTime;
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "1")
private Integer status;
public Integer getStatus() {
if (Objects.equals(status, LineWarnInfoEnum.Status.RESOLVE.getCode())) {return LineWarnInfoEnum.Status.RESOLVE.getCode();}
if (StringUtils.isNotBlank(suspendTime)){
if (LocalDateTimeUtil.parse(suspendTime,"yyyy-MM-dd HH:mm:ss").isBefore(LocalDateTime.now())) {
return LineWarnInfoEnum.Status.INIT.getCode();
} else {
return LineWarnInfoEnum.Status.SUSPEND.getCode();
}
}
return LineWarnInfoEnum.Status.INIT.getCode();
}
@ApiModelProperty(value = "处理状态:1待处理 2已处理 3暂停预警", example = "待处理")
private String statusMsg;
public String getStatusMsg() {
return LineWarnInfoEnum.Status.getMsgByCode(getStatus());
}
@ApiModelProperty(value = "创建人", example = "")
private String createBy;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
}
\ No newline at end of file
......@@ -22,6 +22,12 @@ public class DriverTraceVO {
private BigDecimal speed;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "停留开始时间")
private String stayBeginTime;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "时间")
private String createTime;
}
......@@ -26,8 +26,14 @@ public class DriverTruckTraceVO {
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间")
private String gpsTime;
@ApiModelProperty(value = "停留开始时间")
private String stayBeginTime;
@ApiModelProperty(value = "停留结束时间")
private String stayEndTime;
@ApiModelProperty(value = "停留时长(min)", example = "12.3")
private BigDecimal stayTime=BigDecimal.ZERO;
@ApiModelProperty(value = "车辆状态:1空车 2重车", example = "1")
private Integer truckStatus;
@ApiModelProperty(value = "时间")
private String createTime;
}
......@@ -19,8 +19,8 @@ import java.util.List;
@NoArgsConstructor
public class OrderChildTraceVO {
@ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList;
List<List<DriverTruckTraceVO>> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList;
List<List<DriverTraceVO>> driverTraceList;
}
\ No newline at end of file
......@@ -21,8 +21,8 @@ import java.util.List;
@NoArgsConstructor
public class VehicleTraceVO {
@ApiModelProperty(value = "车辆轨迹列表")
List<DriverTruckTraceVO> truckTraceList;
List<List<DriverTruckTraceVO>> truckTraceList;
@ApiModelProperty(value = "司机轨迹列表")
List<DriverTraceVO> driverTraceList;
List<List<DriverTraceVO>> driverTraceList;
}
\ No newline at end of file
......@@ -88,7 +88,7 @@ public class VehicleWarnInfoVO {
if (Objects.equals(status, VehicleWarnInfoEnum.Status.RESOLVE.getCode())) {return VehicleWarnInfoEnum.Status.RESOLVE.getCode();}
if (StringUtils.isNotBlank(suspendTime)){
if (LocalDateTimeUtil.parse(suspendTime).isBefore(LocalDateTime.now())) {
if (LocalDateTimeUtil.parse(suspendTime,"yyyy-MM-dd HH:mm:ss").isBefore(LocalDateTime.now())) {
return VehicleWarnInfoEnum.Status.INIT.getCode();
} else {
return VehicleWarnInfoEnum.Status.SUSPEND.getCode();
......
......@@ -40,7 +40,7 @@ public class VehicleWarnUserVO {
@ApiModelProperty(value = "通知配置列表")
private List<WarnTypeItem> warnTypeItemList;
public List<WarnTypeItem> getWarnTypeItemList() {
List<Integer> warnTypeList = JSON.parseArray(warmTypeJson, Integer.class);
List<Integer> warnTypeList = JSON.parseArray(warnTypeJson, Integer.class);
List<WarnTypeItem> list = new ArrayList<>();
for (VehicleWarnConfigEnum.WarnType item : VehicleWarnConfigEnum.WarnType.values()) {
......@@ -56,7 +56,10 @@ public class VehicleWarnUserVO {
@JsonIgnore
@ApiModelProperty(value = "预警配置", example = "", hidden = true)
private String warmTypeJson;
private String warnTypeJson;
@JsonIgnore
@ApiModelProperty(value = "线路预警配置", example = "", hidden = true)
private String lineWarnTypeJson;
@Getter
@Setter
......
package com.clx.performance.config;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: aiqingguo
* @Description: 货款往来明细 MQ
* @Date: 2023-10-12 16:27:30
* @Version: 1.0
*/
@Configuration
public class RabbitLineWarnConfig {
@Bean
public DirectExchange lineWarnDefaultExchange() {
return new DirectExchange(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE);
}
@Bean
public Queue lineWarnDefaultDelayQueue() {
Map<String, Object> params = new HashMap<>(8);
params.put("x-message-ttl", 15 * 60 * 1000);
params.put("x-max-length", 5000000);
params.put("x-dead-letter-exchange", RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE);
params.put("x-dead-letter-routing-key", RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
return new Queue(RabbitKeyLineWarnConstants.DEFAULT_DELAY_QUEUE, true, false, false, params);
}
@Bean
public Binding lineWarnDefaultDelayQueueBinding() {
return BindingBuilder.bind(lineWarnDefaultDelayQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY);
}
@Bean
public Queue lineWarnDefaultDeadQueue() {
return new Queue(RabbitKeyLineWarnConstants.DEFAULT_DEAD_QUEUE);
}
@Bean
public Binding lineWarnDefaultDeadQueueBinding() {
return BindingBuilder.bind(lineWarnDefaultDeadQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.DEFAULT_DEAD_ROUTING_KEY);
}
/**
* 新增
*/
@Bean
public Queue lineWarnChildAddQueue() {
return new Queue(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_QUEUE);
}
@Bean
public Binding lineWarnChildAddQueueBinding() {
return BindingBuilder.bind(lineWarnChildAddQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY);
}
/**
* 线路预警
*/
@Bean
public Queue lineWarnQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_QUEUE);
}
@Bean
public Binding lineWarnQueueBinding() {
return BindingBuilder.bind(lineWarnQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY);
}
/**
* 线路预警通知
*/
@Bean
public Queue lineWarnNoticeQueue() {
return new Queue(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_QUEUE);
}
@Bean
public Binding lineWarnNoticeQueueBinding() {
return BindingBuilder.bind(lineWarnNoticeQueue()).to(lineWarnDefaultExchange()).with(RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY);
}
}
package com.clx.performance.constant;
/**
* @Author: aiqingguo
* @Description: 线路预警-mq
* @Date: 2023-10-19 15:10:10
* @Version: 1.0
*/
public class RabbitKeyLineWarnConstants {
private static final String PREFIX = "clx-performance.lineWarn.";
private static final String EXCHANGE = ".exchange";
private static final String QUEUE = ".queue";
private static final String QUEUE_ROUTING_KEY = ".routing.key";
private static final String DELAY_QUEUE = ".delay.queue";
private static final String DELAY_ROUTING_KEY = ".delay.routing.key";
private static final String DEAD_QUEUE = ".dead.queue";
private static final String DEAD_ROUTING_KEY = ".dead.routing.key";
private RabbitKeyLineWarnConstants() {
}
/**
* 缺省交换机
*/
public static final String DEFAULT_EXCHANGE = PREFIX +"default"+EXCHANGE;
/**
* 缺省延迟队列
*/
public static final String DEFAULT_DELAY_QUEUE = PREFIX +"default"+DELAY_QUEUE;
public static final String DEFAULT_DELAY_ROUTING_KEY = PREFIX +"default"+DELAY_ROUTING_KEY;
public static final String DEFAULT_DEAD_QUEUE = PREFIX +"default"+DEAD_QUEUE;
public static final String DEFAULT_DEAD_ROUTING_KEY = PREFIX +"default"+DEAD_ROUTING_KEY;
/**
* 新增
*/
public static final String ORDER_GOODS_ADD_QUEUE = PREFIX +"orderGoods.add"+QUEUE;
public static final String ORDER_GOODS_ADD_ROUTING_KEY = PREFIX +"orderGoods.add"+QUEUE_ROUTING_KEY;
/**
* 车辆预警
*/
public static final String LINE_WARN_QUEUE = PREFIX +"line.warn"+QUEUE;
public static final String LINE_WARN_ROUTING_KEY = PREFIX +"line.warn"+QUEUE_ROUTING_KEY;
/**
* 线路预警通知
*/
public static final String LINE_WARN_NOTICE_QUEUE = PREFIX +"lineWarn.notice"+QUEUE;
public static final String LINE_WARN_NOTICE_ROUTING_KEY = PREFIX +"lineWarn.notice"+QUEUE_ROUTING_KEY;
}
......@@ -34,7 +34,7 @@ public class AppDriverOrderChildController {
@ApiOperation(value = "接单判断", notes = "<br>By:胡宇帆")
@PostMapping("/getOrderChildCheck")
public Result<String> getOrderChildCheck(@RequestBody @Validated OrderChildCheckParam param) {
public Result<Integer> getOrderChildCheck(@RequestBody @Validated OrderChildCheckParam param) {
return Result.ok(orderChildService.getOrderChildCheck(param));
}
......
......@@ -5,6 +5,7 @@ import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountArrearsVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
......@@ -13,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@Slf4j
@RestController
@RequestMapping("/feign/owner")
......@@ -50,4 +53,14 @@ public class OwnerAccountFeignController {
public Result<OwnerLoanAccountVO> loanAccount(@RequestParam Long userNo) {
return Result.ok(ownerAccountService.loanAccount(userNo));
}
@ApiOperation(value = "查询用户预付运费和保证金账户", notes = "<br>By:胡宇帆")
@GetMapping("/accountArrearsInfo")
public Result<OwnerAccountArrearsVO> accountArrearsInfo(@RequestParam(value = "userNo") Long userNo,
@RequestParam(value = "prepaidArrearsOrder") BigDecimal prepaidArrearsOrder,
@RequestParam(value = "marginArrearsOrder") BigDecimal marginArrearsOrder
) {
return Result.ok(ownerAccountService.accountArrearsInfo(userNo, prepaidArrearsOrder, marginArrearsOrder));
}
}
package com.clx.performance.controller.pc.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnConfigService;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
import com.msl.common.base.PageData;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
@Slf4j
@RestController
@Validated
@Api(tags = "线路预警-预警配置")
@RequestMapping(value="/pc/lineWarnConfig")
public class LineWarnConfigController {
@Autowired
private LineWarnConfigService lineWarnConfigService;
@ApiOperation(value = "新增配置", notes = "<br>By:艾庆国")
@PostMapping("/saveConfig")
public Result<Void> saveConfig(@RequestBody @Validated LineWarnConfigAddParam param) {
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.TAKE.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.LOAD.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.UNLOAD.getCode())
){
if (Objects.isNull(param.getTimeRatio())){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "时间占比不能为空");}
if (Objects.isNull(param.getTaskCompleteRatio())){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "任务完成占比不能为空");}
}
lineWarnConfigService.saveConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置", notes = "<br>By:艾庆国")
@PostMapping("/updateConfig")
public Result<Void> updateConfig(@RequestBody @Validated LineWarnConfigUpdateParam param) {
if (Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.TAKE.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.LOAD.getCode())
|| Objects.equals(param.getWarnType(), LineWarnConfigEnum.WarnType.UNLOAD.getCode())
){
if (Objects.isNull(param.getTimeRatio())){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "时间占比不能为空");}
if (Objects.isNull(param.getTaskCompleteRatio())){throw new ServiceSystemException(ResultCodeEnum.ILLEGAL_PARAMETER, "任务完成占比不能为空");}
}
lineWarnConfigService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "更新配置状态", notes = "<br>By:艾庆国")
@PostMapping("/updateStatus")
public Result<Void> updateStatus(@RequestBody @Validated LineWarnConfigStatusUpdateParam param) {
lineWarnConfigService.updateStatus(param);
return Result.ok();
}
@ApiOperation(value = "删除配置", notes = "<br>By:艾庆国")
@PostMapping("/deleteConfig")
public Result<Void> deleteConfig(@RequestBody @Validated LineWarnConfigDeleteUpdateParam param) {
lineWarnConfigService.deleteConfig(param);
return Result.ok();
}
@ApiOperation(value = "获取配置信息",notes = "<br>By:艾庆国")
@GetMapping("/getConfig")
public Result<LineWarnConfigVO> getConfig(@NotNull(message = "id不能为空") @Validated Integer id) {
return Result.ok(lineWarnConfigService.getConfig(id));
}
@ApiOperation(value = "分页搜索配置列表",notes = "<br>By:艾庆国")
@PostMapping("/pageConfig")
public Result<PageData<LineWarnConfigVO>> pageConfig(@RequestBody @Validated PageLineWarnConfigParam param) {
IPage<LineWarnConfigVO> page = lineWarnConfigService.pageConfig(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "预警类型下拉",notes = "<br>By:艾庆国")
@GetMapping("/listWarnType")
public Result<List<LineWarnConfigVO.WarnTypeItem>> listWarnType() {
return Result.ok(lineWarnConfigService.listWarnType());
}
}
package com.clx.performance.controller.pc.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnInfoService;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
import com.msl.common.base.PageData;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@Validated
@Api(tags = "线路预警-预警信息")
@RequestMapping(value="/pc/lineWarnInfo")
public class LineWarnInfoController {
@Autowired
private LineWarnInfoService lineWarnInfoService;
@ApiOperation(value = "更新预警暂停", notes = "<br>By:艾庆国")
@PostMapping("/updateSuspend")
public Result<Void> updateSuspend(@RequestBody @Validated LineWarnInfoSuspendUpdateParam param) {
lineWarnInfoService.updateSuspend(param);
return Result.ok();
}
@ApiOperation(value = "更新处理", notes = "<br>By:艾庆国")
@PostMapping("/updateResolve")
public Result<Void> updateConfig(@RequestBody @Validated LineWarnInfoResolveUpdateParam param) {
lineWarnInfoService.updateResolve(param);
return Result.ok();
}
// @ApiOperation(value = "获取轨迹",notes = "<br>By:艾庆国")
// @GetMapping("/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) {
return Result.ok(lineWarnInfoService.getInfo(id));
}
@ApiOperation(value = "分页搜索预警信息列表",notes = "<br>By:艾庆国")
@PostMapping("/pageInfo")
public Result<PageData<LineWarnInfoVO>> pageInfo(@RequestBody @Validated PageLineWarnInfoParam param) {
IPage<LineWarnInfoVO> page = lineWarnInfoService.pageInfo(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.controller.temp;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.List;
......@@ -31,6 +38,32 @@ public class TempTraceController {
@Autowired
private TruckTraceService truckTraceService;
@Autowired
private GdService gdService;
@Autowired
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@PostMapping("/test")
public Result test(String truckNo, String beginTime, String endTime) {
TruckTraceSyncMqParam mq = new TruckTraceSyncMqParam();
mq.setTruckNo(truckNo);
mq.setBeginTime(beginTime);
mq.setEndTime(endTime);
truckTraceMqHandlerService.truckTracSync(mq);
return Result.ok();
}
@ApiOperation(value = "停留时长", notes = "<br>By:艾庆国")
@PostMapping("/getParkTime")
public Result<Integer> getParkTime(String truckNo, Long userNo, String beginTime, String endTime) {
int parkTime = truckTraceService.getParkTime(truckNo, userNo, LocalDateTimeUtils.parseTime(beginTime), LocalDateTimeUtils.parseTime(endTime));
return Result.ok(parkTime);
}
@ApiOperation(value = "车辆轨迹同步", notes = "<br>By:艾庆国")
@PostMapping("/truckTraceSync")
public Result truckTraceSync(@RequestBody TruckTraceAddParam param) {
......@@ -63,4 +96,36 @@ public class TempTraceController {
return Result.ok(truckTraceService.listDriverTraceByTime(userNo,beginTime,endTime));
}
@ApiOperation(value = "线路规划", notes = "<br>By:艾庆国")
@PostMapping("/route")
public Result<List<GdRouteDTO>> route(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
return Result.ok(gdRouteDTOS);
}
@ApiOperation(value = "查询车辆5分钟内的最新位置", notes = "<br>By:刘海泉")
@PostMapping("/getTruckPosition")
public Result<BigDecimal[]> getTruckPosition(String truckNo) {
return Result.ok(truckTraceService.getCurrentTruckPosition(truckNo));
}
@ApiOperation(value = "批量保存车辆轨迹信息", notes = "<br>By:刘海泉")
@GetMapping("/saveTruckTrace")
public Result<BigDecimal[]> saveTruckTrace(@Param("truckNo") @NotBlank(message = "车牌号不能为空") String truckNo,
@Param("size") @NotNull(message = "大小字段不能为空") Integer size,String gpsTime) {
truckTraceService.saveTruckTrace(truckNo,size,gpsTime);
return Result.ok();
}
}
......@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
......@@ -28,17 +29,17 @@ public class TempVehicleWarnController {
@ApiOperation(value = "发送预警短信", notes = "<br>By:艾庆国")
@PostMapping("/sendSms")
public Result sendSms(List<String> mobileList, String warnName, String truckNo, String childNo) {
public Result sendSms(String mobile, String warnName, String truckNo, String childNo) {
vehicleWarnMqHandlerService.sendSms(mobileList, warnName, truckNo, childNo);
vehicleWarnMqHandlerService.sendSms(Arrays.asList(mobile), warnName, truckNo, childNo);
return Result.ok();
}
@ApiOperation(value = "发送预警外呼", notes = "<br>By:艾庆国")
@PostMapping("/sendClink")
public Result sendClink(List<String> mobileList, String warnName, String truckNo, String childNo) {
vehicleWarnMqHandlerService.sendClink(mobileList, warnName, truckNo, childNo);
public Result sendClink(String mobile, String warnName, String truckNo, String childNo) {
vehicleWarnMqHandlerService.sendClink(Arrays.asList(mobile), warnName, truckNo, childNo);
return Result.ok();
}
......
......@@ -176,4 +176,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
String beginTime);
MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo);
List<OrderChild> listByChildNoList(List<String> childNoList);
}
......@@ -25,6 +25,7 @@ import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
......@@ -560,4 +561,9 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
public MonthInComeAndOrderedVO statisticsTruckMonth(LocalDateTime startTime, LocalDateTime endTime, String truckNo) {
return baseMapper.statisticsTruckMonth(startTime,endTime,truckNo);
}
@Override
public List<OrderChild> listByChildNoList(List<String> childNoList) {
return list(lQrWrapper().in(OrderChild :: getChildNo,childNoList));
}
}
package com.clx.performance.dao.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.mapper.linewarn.LineWarnConfigMapper;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class LineWarnConfigDaoImpl extends BaseDaoImpl<LineWarnConfigMapper, LineWarnConfig, Integer> implements LineWarnConfigDao {
@Override
public boolean updateConfig(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getWarnName, item.getWarnName())
.set(LineWarnConfig::getWarnType, item.getWarnType())
.set(LineWarnConfig::getWarnLevel, item.getWarnLevel())
.set(LineWarnConfig::getInterval, item.getInterval())
.set(LineWarnConfig::getTimeRatio, item.getTimeRatio())
.set(LineWarnConfig::getTaskCompleteRatio, item.getTaskCompleteRatio())
);
}
@Override
public boolean updateStatus(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getStatus, item.getStatus())
);
}
@Override
public boolean updateDelete(LineWarnConfig item) {
return update(lUdWrapper()
.eq(LineWarnConfig::getId, item.getId())
.set(LineWarnConfig::getDeleteStatus, item.getDeleteStatus())
);
}
@Override
public Optional<LineWarnConfig> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(LineWarnConfig::getId, id)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<LineWarnConfig> findByName(String name) {
return Optional.of(name)
.map(item -> lQrWrapper()
.eq(LineWarnConfig::getWarnName, name)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<LineWarnConfig> listByWarnType(Integer warnType) {
return list(lQrWrapper()
.eq(LineWarnConfig::getWarnType, warnType)
.eq(LineWarnConfig::getDeleteStatus, LineWarnConfigEnum.DeleteStatus.NO.getCode())
.eq(LineWarnConfig::getStatus, LineWarnConfigEnum.Status.ENABLE.getCode())
);
}
@Override
public IPage<LineWarnConfig> pageByParam(PageLineWarnConfigParam param) {
Page<LineWarnConfig> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.mapper.linewarn.LineWarnInfoMapper;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public class LineWarnInfoDaoImpl extends BaseDaoImpl<LineWarnInfoMapper, LineWarnInfo, Integer> implements LineWarnInfoDao {
@Override
public boolean updateStatus(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getId, item.getId())
.set(LineWarnInfo::getStatus, item.getStatus())
);
}
@Override
public boolean batchUpdateStatus(List<Integer> idList, Integer status) {
return update(lUdWrapper()
.in(LineWarnInfo::getId, idList)
.set(LineWarnInfo::getStatus, status)
);
}
@Override
public boolean updateSuspendTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getWarnConfigId, item.getWarnConfigId())
.ne(LineWarnInfo::getStatus, LineWarnInfoEnum.Status.RESOLVE.getCode())
.set(LineWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
@Override
public boolean updateWarnTime(LineWarnInfo item) {
return update(lUdWrapper()
.eq(LineWarnInfo::getId, item.getId())
.set(LineWarnInfo::getWarnTime, item.getWarnTime())
);
}
@Override
public boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel) {
return update(lUdWrapper()
.eq(LineWarnInfo::getWarnConfigId, warnConfigId)
.set(LineWarnInfo::getWarnName, warnName)
.set(LineWarnInfo::getWarnLevel, warnLevel)
);
}
@Override
public Optional<LineWarnInfo> findById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(LineWarnInfo::getId, id)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public Optional<LineWarnInfo> findByOrderGoodsNoAndWarnConfigId(String orderGoodsNo, Integer warnConfigId) {
return Optional.of(orderGoodsNo)
.map(item -> lQrWrapper()
.eq(LineWarnInfo::getOrderGoodsNo, orderGoodsNo)
.eq(LineWarnInfo::getWarnConfigId, warnConfigId)
.last("limit 1")
)
.map(super::getOne);
}
@Override
public List<LineWarnInfo> listSuspendTimeout() {
return list(lQrWrapper()
.eq(LineWarnInfo::getStatus, LineWarnInfoEnum.Status.SUSPEND.getCode())
.lt(LineWarnInfo::getSuspendTime, LocalDateTime.now())
);
}
@Override
public IPage<LineWarnInfo> pageByParam(PageLineWarnInfoParam param) {
Page<LineWarnInfo> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.pageByParam(page,param);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnLogDao;
import com.clx.performance.mapper.linewarn.LineWarnLogMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class LineWarnLogDaoImpl extends BaseDaoImpl<LineWarnLogMapper, LineWarnLog, Integer> implements LineWarnLogDao {
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.enums.linewarn.LineWarnOrderGoodsEnum;
import com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class LineWarnOrderGoodsDaoImpl extends BaseDaoImpl<LineWarnOrderGoodsMapper, LineWarnOrderGoods, Integer> implements LineWarnOrderGoodsDao {
@Override
public Optional<LineWarnOrderGoods> getByOrderGoodsNo(String orderGoodsNo) {
return Optional.of(orderGoodsNo)
.map(item -> lQrWrapper()
.eq(LineWarnOrderGoods::getOrderGoodsNo, orderGoodsNo)
)
.map(super::getOne);
}
@Override
public List<LineWarnOrderGoods> ListOrderGoodsNoOfWarn() {
return list(lQrWrapper().select(LineWarnOrderGoods::getOrderGoodsNo)
.eq(LineWarnOrderGoods::getWarnStatus, LineWarnOrderGoodsEnum.WarnStatus.ENABLE.getCode())
.orderByDesc(LineWarnOrderGoods::getId)
.last("limit 10000")
);
}
}
package com.clx.performance.dao.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnRangeDao;
import com.clx.performance.enums.linewarn.LineWarnRangEnum;
import com.clx.performance.mapper.linewarn.LineWarnRangMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class LineWarnRangeDaoImpl extends BaseDaoImpl<LineWarnRangMapper, LineWarnRang, Integer> implements LineWarnRangeDao {
@Override
public List<LineWarnRang> ListByWarnConfigId(Integer warnConfigId) {
return list(lQrWrapper()
.eq(LineWarnRang::getWarnConfigId, warnConfigId)
.eq(LineWarnRang::getStatus, LineWarnRangEnum.Status.ENABLE.getCode())
.orderByDesc(LineWarnRang::getId)
);
}
@Override
public boolean updateDisable(LineWarnRang item) {
return update(lUdWrapper()
.eq(LineWarnRang::getWarnConfigId, item.getWarnConfigId())
.eq(StringUtils.isNotBlank(item.getOrderGoodsNo()), LineWarnRang::getOrderGoodsNo, item.getOrderGoodsNo())
.set(LineWarnRang::getStatus, LineWarnRangEnum.Status.DISABLE.getCode())
);
}
}
......@@ -15,19 +15,18 @@ public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper,
@Override
public boolean updateTraceTime(VehicleWarnChild item) {
public boolean updateWarnStatus(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getTraceStatus, item.getTraceStatus())
.set(VehicleWarnChild::getTraceTime, item.getTraceTime())
.set(VehicleWarnChild::getWarnStatus, item.getWarnStatus())
);
}
@Override
public boolean updateReceiveAddressDistance(VehicleWarnChild item) {
public boolean updateEstimateLoadTime(VehicleWarnChild item) {
return update(lUdWrapper()
.eq(VehicleWarnChild::getId, item.getId())
.set(VehicleWarnChild::getReceiveAddressDistance, item.getReceiveAddressDistance())
.set(VehicleWarnChild::getEstimateLoadTime, item.getEstimateLoadTime())
);
}
......@@ -40,12 +39,17 @@ public class VehicleWarnChildDaoImpl extends BaseDaoImpl<VehicleWarnChildMapper,
@Override
public List<VehicleWarnChild> ListTruckNoOfTrace() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.TraceStatus.ENABLE.getCode()));
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo)
.eq(VehicleWarnChild::getWarnStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode()));
}
@Override
public List<VehicleWarnChild> ListTruckNoOfWarn() {
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo).eq(VehicleWarnChild::getTraceStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode()));
return list(lQrWrapper().select(VehicleWarnChild::getChildNo, VehicleWarnChild::getTruckNo)
.eq(VehicleWarnChild::getWarnStatus, VehicleWarnChildEnum.WarnStatus.ENABLE.getCode())
.orderByDesc(VehicleWarnChild::getId)
.last("limit 10000")
);
}
}
......@@ -73,7 +73,11 @@ public class VehicleWarnConfigDaoImpl extends BaseDaoImpl<VehicleWarnConfigMappe
@Override
public List<VehicleWarnConfig> listByWarnType(Integer warnType) {
return list(lQrWrapper().eq(VehicleWarnConfig::getWarnType, warnType));
return list(lQrWrapper()
.eq(VehicleWarnConfig::getWarnType, warnType)
.eq(VehicleWarnConfig::getDeleteStatus, VehicleWarnConfigEnum.DeleteStatus.NO.getCode())
.eq(VehicleWarnConfig::getStatus, VehicleWarnConfigEnum.Status.ENABLE.getCode())
);
}
@Override
......
......@@ -41,7 +41,7 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
if (Objects.equals(warnRang, VehicleWarnRangEnum.WarnRange.CHILD.getCode())) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getId, item.getId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
......@@ -49,14 +49,14 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.eq(VehicleWarnInfo::getOrderGoodsNo, item.getOrderGoodsNo())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
else {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, item.getWarnConfigId())
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE)
.ne(VehicleWarnInfo::getStatus, VehicleWarnInfoEnum.Status.RESOLVE.getCode())
.set(VehicleWarnInfo::getSuspendTime, item.getSuspendTime())
);
}
......@@ -70,6 +70,15 @@ public class VehicleWarnInfoDaoImpl extends BaseDaoImpl<VehicleWarnInfoMapper, V
);
}
@Override
public boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel) {
return update(lUdWrapper()
.eq(VehicleWarnInfo::getWarnConfigId, warnConfigId)
.set(VehicleWarnInfo::getWarnName, warnName)
.set(VehicleWarnInfo::getWarnLevel, warnLevel)
);
}
@Override
public Optional<VehicleWarnInfo> findById(Integer id) {
return Optional.of(id)
......
......@@ -4,15 +4,11 @@ package com.clx.performance.dao.impl.vehiclewarn;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
@Repository
public class VehicleWarnLogDaoImpl extends BaseDaoImpl<VehicleWarnLogMapper, VehicleWarnLog, Integer> implements VehicleWarnLogDao {
@Override
public Optional<VehicleWarnLog> findById(Integer id) {
return null;
}
}
......@@ -5,9 +5,9 @@ import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnRangMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
......@@ -19,8 +19,18 @@ public class VehicleWarnRangeDaoImpl extends BaseDaoImpl<VehicleWarnRangMapper,
return list(lQrWrapper()
.eq(VehicleWarnRang::getWarnConfigId, warnConfigId)
.eq(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.ENABLE.getCode())
.le(VehicleWarnRang::getWarnEndTime, LocalDateTime.now())
.orderByDesc(VehicleWarnRang::getId)
);
}
@Override
public boolean updateDisable(VehicleWarnRang item) {
return update(lUdWrapper()
.eq(VehicleWarnRang::getWarnConfigId, item.getWarnConfigId())
.eq(VehicleWarnRang::getWarnRang, item.getWarnRang())
.eq(StringUtils.isNotBlank(item.getOrderGoodsNo()), VehicleWarnRang::getOrderGoodsNo, item.getOrderGoodsNo())
.eq(StringUtils.isNotBlank(item.getChildNo()), VehicleWarnRang::getChildNo, item.getChildNo())
.set(VehicleWarnRang::getStatus, VehicleWarnRangEnum.Status.DISABLE.getCode())
);
}
}
......@@ -37,7 +37,7 @@ public class VehicleWarnUserDaoImpl extends BaseDaoImpl<VehicleWarnUserMapper, V
public boolean updateWarnType(VehicleWarnUser item) {
return update(lUdWrapper()
.eq(VehicleWarnUser::getId, item.getId())
.set(VehicleWarnUser::getWarmTypeJson, item.getWarmTypeJson())
.set(VehicleWarnUser::getWarnTypeJson, item.getWarnTypeJson())
);
}
......
package com.clx.performance.dao.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.linewarn.LineWarnConfigMapper;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnConfigDao extends BaseDao<LineWarnConfigMapper, LineWarnConfig, Integer> {
boolean updateConfig(LineWarnConfig item);
boolean updateStatus(LineWarnConfig item);
boolean updateDelete(LineWarnConfig item);
Optional<LineWarnConfig> findById(Integer id);
Optional<LineWarnConfig> findByName(String name);
List<LineWarnConfig> listByWarnType(Integer warnType);
IPage<LineWarnConfig> pageByParam(PageLineWarnConfigParam param);
}
package com.clx.performance.dao.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.linewarn.LineWarnInfoMapper;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnInfoDao extends BaseDao<LineWarnInfoMapper, LineWarnInfo, Integer> {
boolean updateStatus(LineWarnInfo item);
boolean batchUpdateStatus(List<Integer> idList, Integer status);
boolean updateSuspendTime(LineWarnInfo item);
boolean updateWarnTime(LineWarnInfo item);
boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel);
Optional<LineWarnInfo> findById(Integer id);
Optional<LineWarnInfo> findByOrderGoodsNoAndWarnConfigId(String orderGoodsNo, Integer warnConfigId);
List<LineWarnInfo> listSuspendTimeout();
IPage<LineWarnInfo> pageByParam(PageLineWarnInfoParam param);
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnLogMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.msl.common.dao.BaseDao;
public interface LineWarnLogDao extends BaseDao<LineWarnLogMapper, LineWarnLog, Integer> {
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnOrderGoodsMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnOrderGoodsDao extends BaseDao<LineWarnOrderGoodsMapper, LineWarnOrderGoods, Integer> {
Optional<LineWarnOrderGoods> getByOrderGoodsNo(String orderGoodsNo);
List<LineWarnOrderGoods> ListOrderGoodsNoOfWarn();
}
package com.clx.performance.dao.linewarn;
import com.clx.performance.mapper.linewarn.LineWarnRangMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface LineWarnRangeDao extends BaseDao<LineWarnRangMapper, LineWarnRang, Integer> {
List<LineWarnRang> ListByWarnConfigId(Integer warnConfigId);
boolean updateDisable(LineWarnRang item);
}
......@@ -9,8 +9,8 @@ import java.util.List;
public interface VehicleWarnChildDao extends BaseDao<VehicleWarnChildMapper, VehicleWarnChild, Integer> {
boolean updateTraceTime(VehicleWarnChild item);
boolean updateReceiveAddressDistance(VehicleWarnChild item);
boolean updateWarnStatus(VehicleWarnChild item);
boolean updateEstimateLoadTime(VehicleWarnChild item);
Optional<VehicleWarnChild> findByChildNo(String childNo);
List<VehicleWarnChild> ListTruckNoOfTrace();
......
......@@ -15,6 +15,7 @@ public interface VehicleWarnInfoDao extends BaseDao<VehicleWarnInfoMapper, Vehic
boolean batchUpdateStatus(List<Integer> idList, Integer status);
boolean updateSuspendTime(VehicleWarnInfo item, Integer warnRang);
boolean updateWarnTime(VehicleWarnInfo item);
boolean updateByConfig(Integer warnConfigId, String warnName, Integer warnLevel);
Optional<VehicleWarnInfo> findById(Integer id);
......
......@@ -2,11 +2,9 @@ package com.clx.performance.dao.vehiclewarn;
import com.clx.performance.mapper.vehiclewarn.VehicleWarnLogMapper;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
public interface VehicleWarnLogDao extends BaseDao<VehicleWarnLogMapper, VehicleWarnLog, Integer> {
Optional<VehicleWarnLog> findById(Integer id);
}
......@@ -9,4 +9,5 @@ import java.util.List;
public interface VehicleWarnRangeDao extends BaseDao<VehicleWarnRangMapper, VehicleWarnRang, Integer> {
List<VehicleWarnRang> ListByWarnConfigId(Integer warnConfigId);
boolean updateDisable(VehicleWarnRang item);
}
package com.clx.performance.dto.linewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class LineWarnCommonInfoDTO {
String orderGoodsNo; //货单编号
private int loadTimeAvg; //平均装车时间(min)
private int unloadTimeAvg; //平均卸车时间(min)
private LocalDateTime transportEndTime; //拉运结束时间
private LocalDateTime pendingOrderTime; //挂单时间
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
}
......@@ -3,15 +3,18 @@ package com.clx.performance.dto.vehiclewarn;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class VehicleWarnCommonInfoDTO {
String childNo; //运单
BigDecimal[] currentPosition; //当前位置
Integer sendAddressDistance; //距货源地址距离
......@@ -24,6 +27,8 @@ public class VehicleWarnCommonInfoDTO {
private LocalDateTime lastArriveSendTime; //最晚到达货源地时间
private LocalDateTime lastArriveReceiveTime; //最晚到达目的地时间
private boolean gotoReceive; //前往或目的地
private LocalDateTime gotoReceiveTime; //前往或目的地时间
LocalDateTime currentTime; //当前时间
......
......@@ -2,6 +2,9 @@ package com.clx.performance.esplus.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
......
......@@ -28,6 +28,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
......@@ -62,6 +63,11 @@ public class OrderChildSyncTransportInvoiceExceptionJob {
for (OrderChildSyncTransportInvoiceRecord record : recordList) {
log.info("orderChildSyncTransportInvoiceExceptionJob执行:{}", JSONUtil.parse(record));
if (record.getCreateTime().plusMinutes(10).isBefore(LocalDateTime.now())) {
log.info("当前记录运单号:{},生成不足10分钟,先不执行", record.getChildNo());
continue;
}
String data = transportFeignService.getRiskStatus(ThirdOrderChildRiskStatusParam.builder().childNo(record.getChildNo()).build()).getData();
String decrypt = ThirdComponent.decrypt(data);
Result result = JSONUtil.toBean(decrypt, Result.class);
......
package com.clx.performance.job.linewarn;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import com.clx.performance.service.linewarn.LineWarnMqService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class LineWarnJob {
@Autowired
private LineWarnOrderGoodsDao lineWarnOrderGoodsDao;
@Autowired
private LineWarnMqService lineWarnMqService;
/**
* 线路监控预警
*/
@XxlJob("lineWarnWarn")
public void lineWarnWarn() {
try {
List<LineWarnOrderGoods> list = lineWarnOrderGoodsDao.ListOrderGoodsNoOfWarn();
log.info("线路监控预警, size:{}", list.size());
for (LineWarnOrderGoods item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (线路预警)
lineWarnMqService.lineWarn(item.getOrderGoodsNo());
}
} catch (Exception e) {
log.warn("线路监控预警失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("线路监控预警失败,异常原因=====================", e);
}
}
}
......@@ -31,7 +31,7 @@ public class PlatTruckTraceJob {
try {
Result<List<String>> result = userClxFeign.getPlatformTruckList();
if(result.succeed()){
log.info("平台车辆轨迹同步, size:{}", result.getData().size());
log.info("平台车辆轨迹开始同步, size:{}", result.getData().size());
for (String truckNo : result.getData()) {
LocalDateTime now = LocalDateTime.now();
......@@ -39,6 +39,7 @@ public class PlatTruckTraceJob {
// 发送mq (同步车辆轨迹)
truckTraceMqService.truckTracSync( truckNo, LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(now));
}
log.info("平台车辆轨迹结束同步================");
}
} catch (Exception e) {
log.warn("平台车辆轨迹同步失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
......
......@@ -41,9 +41,6 @@ public class VehicleWarnJob {
for (VehicleWarnChild item : list) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime beginTime = now.minusSeconds(600);
// 发送mq (车辆预警)
vehicleWarnMqService.truckWarn(item.getChildNo());
}
......@@ -55,22 +52,4 @@ public class VehicleWarnJob {
}
// /**
// * 预警暂停取消
// */
// @XxlJob("vehicleWarnSuspendCancel")
// public void vehicleWarnSuspendCancel() {
//
// try {
//
// List<VehicleWarnInfo> list = vehicleWarnInfoDao.listSuspendTimeout();
// log.info("预警暂停取消, size:{}", list.size());
//
// vehicleWarnInfoDao.batchUpdateStatus(list.stream().map(item->item.getId()).collect(Collectors.toList()), VehicleWarnInfoEnum.Status.INIT.getCode());
//
// } catch (Exception e) {
// log.warn("预警暂停取消失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
// JobLog.error("预警暂停取消失败,异常原因=====================", e);
// }
// }
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 线路预警 mq
* @Date: 2023-10-20 16:14:30
* @Version: 1.0
*/
@Slf4j
@Component
public class LineWarnDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyLineWarnConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("线路预警-延迟, message:{}", message);
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<MqDelay>>(){}).getData());
}catch (Exception e){
log.info("线路预警-延迟 失败",e);
}
}
void process(MqDelay mq){
Message message = MessageBuilder.withBody(JSON.toJSONString(mq.getData()).getBytes()).build();
rabbitTemplate.send(mq.getExchange(), mq.getRouterKey(), message);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 线路预警 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class LineWarnLineWarnListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.LINE_WARN_QUEUE)
public void process(Message message) {
try{
log.info("线路预警-货单预警, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnLineWarnMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单预警 失败",e);
}
}
private void process(LineWarnLineWarnMqParam mq){
lineWarnMqHandlerService.lineWarn(mq);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 货单新增 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class LineWarnOrderGoodsAddListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_QUEUE)
public void process(Message message) {
try{
log.info("线路预警-货单新增, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnOrderGoodsAddMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-货单新增 失败",e);
}
}
private void process(LineWarnOrderGoodsAddMqParam mq){
lineWarnMqHandlerService.orderGoodsAdd(mq);
}
}
package com.clx.performance.listener.linewarn;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 线路预警通知 mq
* @Date: 2023-10-20 16:34:40
* @Version: 1.0
*/
@Slf4j
@Component
public class LineWarnTruckNoticeListener {
@Autowired
private LineWarnMqHandlerService lineWarnMqHandlerService;
@RabbitListener(queues = RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_QUEUE)
public void process(Message message) {
try{
log.info("线路预警-预警通知, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<LineWarnNoticeMqParam>>(){}).getData());
}catch (Exception e){
log.info("线路预警-预警通知 失败",e);
}
}
private void process(LineWarnNoticeMqParam mq){
lineWarnMqHandlerService.notice(mq);
}
}
......@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.constant.RabbitKeyVehicleWarnConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
......@@ -25,7 +25,7 @@ public class VehicleWarnDelayListener {
@Autowired
private RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeySettlementConstants.DEFAULT_DEAD_QUEUE)
@RabbitListener(queues = RabbitKeyVehicleWarnConstants.DEFAULT_DEAD_QUEUE)
public void process(Message message) {
try{
log.info("车辆预警-延迟, message:{}", message);
......
......@@ -90,8 +90,8 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
List<Double> getLossNet(@Param("param") OrderChildReportParam param);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,load_time,arrive_send_time)) from " + TABLE +
" where load_time is not null and and pay_time &gt;= #{beginTime} " +
"select avg(TIMESTAMPDIFF(SECOND,arrive_send_time,load_time)) from " + TABLE +
" where load_time is not null and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
......@@ -104,8 +104,8 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
String beginTime);
@Select("<script>" +
"select sum(TIMESTAMPDIFF(SECOND,unload_time,arrive_receive_time)) from " + TABLE +
" where unload_time is not null and and pay_time &gt;= #{beginTime} " +
"select avg(TIMESTAMPDIFF(SECOND,arrive_receive_time,unload_time)) from " + TABLE +
" where unload_time is not null and pay_time &gt;= #{beginTime} " +
" <if test = 'sendSystemAddressId != null'>and send_system_address_id = #{sendSystemAddressId} </if> " +
" <if test = 'receiveSystemAddressId != null'>and receive_system_address_id = #{receiveSystemAddressId} </if> " +
......
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import com.clx.performance.sqlProvider.linewarn.LineWarnConfigSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface LineWarnConfigMapper extends BaseMapper<LineWarnConfig> {
String TABLE = "line_warn_config";
/**
* @see LineWarnConfigSqlProvider#pageByParam(Page, PageLineWarnConfigParam)
*/
@SelectProvider(type = LineWarnConfigSqlProvider.class, method = "pageByParam")
IPage<LineWarnConfig> pageByParam(@Param("page") Page page, @Param("param") PageLineWarnConfigParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.clx.performance.sqlProvider.linewarn.LineWarnInfoSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
@Mapper
public interface LineWarnInfoMapper extends BaseMapper<LineWarnInfo> {
String TABLE = "line_warn_config";
/**
* @see LineWarnInfoSqlProvider#pageByParam(Page, PageLineWarnInfoParam)
*/
@SelectProvider(type = LineWarnInfoSqlProvider.class, method = "pageByParam")
IPage<LineWarnInfo> pageByParam(@Param("page") Page page, @Param("param") PageLineWarnInfoParam param);
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnLogMapper extends BaseMapper<LineWarnLog> {
String TABLE = "line_warn_log";
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnOrderGoodsMapper extends BaseMapper<LineWarnOrderGoods> {
String TABLE = "line_warn_order_goods";
}
\ No newline at end of file
package com.clx.performance.mapper.linewarn;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.linewarn.LineWarnRang;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LineWarnRangMapper extends BaseMapper<LineWarnRang> {
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 车辆预警配置
* @Date: 2024/05/29 10:55:33
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String warnName; //预警方案名称
private Integer warnType; //预警类型
private Integer warnLevel; //预警级别
private BigDecimal interval; //预警间隔(小时)
private BigDecimal timeRatio; //时间占比(%)
private BigDecimal taskCompleteRatio; //任务完成占比
private Integer deleteStatus; //删除状态: 0-否;1-是
private Integer status; //状态:1启用 2禁用
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 线路预警信息表
* @Date: 2024/05/30 13:30:04
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnInfo implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private Integer warnType; //预警类型
private Integer warnLevel; //预警级别
private String orderGoodsNo; //货单编号
private Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址
private Integer receiveAddressId; //收货地址id
private String receiveAddress; //收货地址
private LocalDateTime suspendTime; //预警暂停时间
private LocalDateTime warnTime; //预警时间
private Integer status; //处理状态:1待处理 2已处理 3暂停预警
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 线路预警日志
* @Date: 2024/05/30 13:56:09
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer infoId; //预警信息id
private Integer type; //类型:1暂停预警 2处理预警
private String orderGoodsNo; //货单编号
private String warnName; //预警名称
private LocalDateTime warnTime; //预警时间
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private String content; //内容
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 线路预警货单表
* @Date: 2024/05/30 13:31:44
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnOrderGoods implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String orderGoodsNo; //货单编号
private LocalDateTime transportEndTime; //拉运结束时间
private LocalDateTime pendingOrderTime; //挂单时间
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
private Integer pengNum; //挂单数
private Integer takeNum; //接单数
private Integer arriveSendNum; //到达货源地车数
private Integer loadNum; //装车车数
private Integer arriveReceiveNum; //到达目的地车数
private Integer unloadNum; //卸车车数
private Integer status; //状态
private Integer warnStatus; //预警使能:0禁用 1启用
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.linewarn;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description: 预警范围
* @Date: 2024/05/30 14:09:22
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class LineWarnRang implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private String orderGoodsNo; //货单编号
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private Integer status; //状态:1有效 2无效
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
......@@ -39,9 +39,10 @@ public class VehicleWarnChild implements HasKey<Integer> {
private Integer arriveReceiveExpectTime; //预计到达目的地时间 (min)
private LocalDateTime takeTime; //接单时间
private Integer receiveAddressDistance; //距离目的地距离(m)
private LocalDateTime estimateLoadTime; //轨迹更新时间
private LocalDateTime traceTime; //轨迹更新时间
private Integer traceStatus; //轨迹更新状态:0禁止 1启用
private Integer wanStatus; //预警更新状态:0禁用 1启用
private Integer warnStatus; //预警使能:0禁用 1启用
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -8,7 +8,7 @@ import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
/**
......@@ -29,7 +29,7 @@ public class VehicleWarnRang implements HasKey<Integer> {
private Integer warnConfigId; //预警配置id
private String warnName; //预警名称
private Integer warnRang; //预警屏蔽范围:1运单 2货单 3全部
private String orderNo; //货单编号
private String orderGoodsNo; //货单编号
private String childNo; //运单编号
private LocalDateTime warnEndTime; //预警屏蔽结束时间
private Integer status; //状态:1有效 2无效
......
......@@ -28,7 +28,8 @@ public class VehicleWarnUser implements HasKey<Integer> {
private Integer id; //id
private String name; //姓名
private String mobile; //手机
private String warmTypeJson; //预警配置
private String warnTypeJson; //预警配置
private String lineWarnTypeJson; //线路预警配置
private Integer deleteStatus; //删除状态: 0-否;1-是
private String createBy; //创建人
private LocalDateTime createTime; //创建时间
......
......@@ -95,5 +95,5 @@ public interface OrderChildService {
OrderChildVO getOwnerOrderChildInfo(String childNo);
String getOrderChildCheck(OrderChildCheckParam param);
Integer getOrderChildCheck(OrderChildCheckParam param);
}
......@@ -13,14 +13,12 @@ import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.owner.CreteAccountParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.clx.performance.vo.pc.*;
import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
import com.clx.user.vo.pc.owner.OwnerBindCardVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
......@@ -106,4 +104,6 @@ public interface OwnerAccountService {
OwnerLoanAccountVO loanAccount(Long userNo);
OwnerAccountAllVO accountAllInfo(Long userNo);
OwnerAccountArrearsVO accountArrearsInfo(Long userNo, BigDecimal prepaidArrearsOrder, BigDecimal marginArrearsOrder);
}
......@@ -89,6 +89,12 @@ public class IntegralRecordServiceImpl implements IntegralRecordService {
return;
}
//超过上限只能增加积分上限
if (sum + integral > ruleInfo.getDriverReportRule().getIntegralLimit()){
integral = ruleInfo.getDriverReportRule().getIntegralLimit() - sum;
}
// 更新积分
statistics.setIntegral(statistics.getIntegral()+integral);
integralStatisticsDao.updateIntegral(statistics);
......
......@@ -160,7 +160,6 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
@Override
public IPage<IntegralTruckVO> driverPageTruckRank(DriverPageIntegralTruckRankParam param) {
String time = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek().minusDays(7));
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
......@@ -172,6 +171,7 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
param.setTruckNoList(truckNoList);
param.setTime(LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek()));
param.setStatisticsDate(time);
IPage<IntegralTruckVO> page = integralTruckDao.driverPageTruckRank(param);
truckNoList = page.getRecords().stream().map(item -> item.getTruckNo()).collect(Collectors.toList());
......
......@@ -64,6 +64,7 @@ import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -1433,6 +1434,8 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setUnloadBeginTime(orderInfoFeign.getUnloadBeginTime());
result.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
result.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
result.setLoadEndTime(orderInfoFeign.getLoadEndTime());
//查询结算信息
Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo);
......@@ -1513,7 +1516,16 @@ public class OrderChildServiceImpl implements OrderChildService {
}
@Override
public String getOrderChildCheck(OrderChildCheckParam param) {
public Integer getOrderChildCheck(OrderChildCheckParam param) {
try {
return check(param);
} catch (Exception e) {
log.info("接单判断弹窗错误,错误信息:{}", e.getMessage());
return 0;
}
}
private int check(OrderChildCheckParam param) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).get();
BigDecimal sendLatitude = orderGoods.getSendLatitude();
BigDecimal sendLongitude = orderGoods.getSendLongitude();
......@@ -1521,14 +1533,22 @@ public class OrderChildServiceImpl implements OrderChildService {
BigDecimal longitude = param.getLongitude();
BigDecimal latitude = param.getLatitude();
TruckLocationDTO truckLocationDTO = zjxlGpsService.getTruckLastLocation(param.getTruckNo());
TruckLocationDTO truckLocationDTO = null;
try {
truckLocationDTO = zjxlGpsService.getTruckLastLocation(param.getTruckNo());
} catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage());
}
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0];
latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}",param.getTruckNo(), JSONUtil.parse(truckLocationDTO));
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", param.getTruckNo(), JSONUtil.parse(truckLocationDTO));
} else {
log.info("中交兴路获取失败,通过高德获取,相关参数:{}", JSONUtil.parse(param));
}
List<GdRouteDTO> route = gdService.getRoute(longitude, latitude, sendLongitude, sendLatitude);
......@@ -1540,8 +1560,8 @@ public class OrderChildServiceImpl implements OrderChildService {
LocalDate localDate = localDateTime.toLocalDate();
String begin = localDate + " " + param.getUnloadBeginTime();
String end = localDate + " " + param.getUnloadEndTime();
String begin = localDate + " " + param.getLoadBeginTime();
String end = localDate + " " + param.getLoadEndTime();
log.info("预计到达时间:{},可以装货时间:{},可以卸货时间:{}", localDateTime, begin, end);
//可以装货时间
LocalDateTime beginLocalDateTime = DateUtils.parseDateTime(begin).get();
......@@ -1549,13 +1569,13 @@ public class OrderChildServiceImpl implements OrderChildService {
if (localDateTime.isAfter(beginLocalDateTime) && localDateTime.isBefore(endLocalDateTime)) {
log.info("不用弹");
return "不用弹";
return 0;
} else {
log.info("需要弹");
return "需要弹";
return 1;
}
}
return "不用弹,高德数据为空";
return 0;
}
//计算亏吨吨数
......
......@@ -139,6 +139,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setSendAddressAll(orderInfoFeign.getSendAddressAll());
orderGoodsVO.setUnloadBeginTime(orderInfoFeign.getUnloadBeginTime());
orderGoodsVO.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
return orderGoodsVO;
}
......@@ -273,17 +275,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
List<OrderGoods> orderGoodsList = null;
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
String residueWeight = orderInfoFeign.getResidueWeight();
BigDecimal ans = new BigDecimal(residueWeight);
switch (optionType) {
case "1":
return new BigDecimal(residueWeight);
return ans;
case "2":
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
ans = orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
case "3":
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO;
......@@ -295,12 +301,15 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return new BigDecimal(residueWeight).add(orderGoodsResidueWeight).add(childResidueWeight);
ans = ans.add(orderGoodsResidueWeight).add(childResidueWeight);
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
default:throw new RuntimeException("参数错误");
}
}
......
......@@ -43,6 +43,7 @@ import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.feign.OwnerInfoVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
......@@ -1270,4 +1271,34 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
return ownerAccountAllVO;
}
@Override
public OwnerAccountArrearsVO accountArrearsInfo(Long userNo, BigDecimal prepaidArrearsOrder, BigDecimal marginArrearsOrder) {
List<OwnerAccount> accountList = ownerAccountDao.listByField(OwnerAccount::getOwnerUserNo, userNo);
OwnerAccountArrearsVO build = OwnerAccountArrearsVO.builder().build();
//查询保证金和预付运费欠多少金额
for (OwnerAccount ownerAccount : accountList) {
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) {
BigDecimal subtract = ownerAccount.getUsableBalance().subtract(marginArrearsOrder);
if (subtract.compareTo(BigDecimal.ZERO) >= 0) {
subtract = BigDecimal.ZERO;
}
build.setMarginArrearsOrderSumMoney(subtract);
log.info("当前用户:{},marginArrearsOrder:{}, 可用余额:{},欠款金额:{}", userNo, marginArrearsOrder, ownerAccount.getUsableBalance(), subtract);
}
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) {
BigDecimal subtract = ownerAccount.getUsableBalance().subtract(prepaidArrearsOrder);
if (subtract.compareTo(BigDecimal.ZERO) >= 0) {
subtract = BigDecimal.ZERO;
}
build.setPrepaidArrearsOrderSumMoney(subtract);
log.info("当前用户:{},prepaidArrearsOrder:{}, 可用余额:{},欠款金额:{}", userNo, prepaidArrearsOrder, ownerAccount.getUsableBalance(), subtract);
}
}
return build;
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Slf4j
@Service
public class LineWarnCommonServiceImpl implements LineWarnCommonService {
private final static int MIN_FER_HOUR = 60;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnMqService lineWarnMqService;
@Override
public void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig){
// 更新
if (lineWarnInfo != null){
// 计算下次生效时间
LocalDateTime nextTime = lineWarnInfo.getWarnTime().plusMinutes(lineWarnConfig.getInterval().multiply(new BigDecimal(MIN_FER_HOUR)).intValue());
if (nextTime.isAfter(LocalDateTime.now())) {return;}
lineWarnInfo.setWarnTime(LocalDateTime.now());
lineWarnInfoDao.updateWarnTime(lineWarnInfo);
// 发送mq (预警通知)
lineWarnMqService.lineWarnNotice(lineWarnInfo.getId());
return;
}
// 新增
lineWarnInfo = new LineWarnInfo();
lineWarnInfo.setWarnConfigId(lineWarnConfig.getId());
lineWarnInfo.setWarnType(lineWarnConfig.getWarnType());
lineWarnInfo.setWarnName(lineWarnConfig.getWarnName());
lineWarnInfo.setWarnLevel(lineWarnConfig.getWarnLevel());
lineWarnInfo.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
lineWarnInfo.setSendAddressId(orderGoods.getSendAddressId());
lineWarnInfo.setSendAddress(orderGoods.getSendAddressShorter());
lineWarnInfo.setReceiveAddressId(orderGoods.getReceiveAddressId());
lineWarnInfo.setReceiveAddress(orderGoods.getReceiveAddressShorter());
lineWarnInfo.setWarnTime(LocalDateTime.now());
lineWarnInfoDao.saveEntity(lineWarnInfo);
// 发送mq (预警通知)
lineWarnMqService.lineWarnNotice(lineWarnInfo.getId());
}
}
package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.service.linewarn.LineWarnConfigService;
import com.clx.performance.struct.linewarn.LineWarnConfigStruct;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnConfigServiceImpl implements LineWarnConfigService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnConfigStruct lineWarnConfigStruct;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(LineWarnConfigAddParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Optional<LineWarnConfig> optional = lineWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.LINE_WARN_CONFIG_EXIST);
}
LineWarnConfig lineWarnConfig = new LineWarnConfig();
lineWarnConfig.setWarnName(param.getWarnName());
lineWarnConfig.setWarnType(param.getWarnType());
lineWarnConfig.setWarnLevel(param.getWarnLevel());
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfigDao.saveEntity(lineWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateConfig(LineWarnConfigUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (!Objects.equals(lineWarnConfig.getWarnName(), param.getWarnName())){
Optional<LineWarnConfig> optional = lineWarnConfigDao.findByName(param.getWarnName());
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.LINE_WARN_CONFIG_EXIST);
}
}
lineWarnConfig.setWarnName(param.getWarnName());
lineWarnConfig.setWarnType(param.getWarnType());
lineWarnConfig.setWarnLevel(param.getWarnLevel());
lineWarnConfig.setInterval(param.getInterval());
lineWarnConfig.setTimeRatio(param.getTimeRatio());
lineWarnConfig.setTaskCompleteRatio(param.getTaskCompleteRatio());
lineWarnConfigDao.updateConfig(lineWarnConfig);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateStatus(LineWarnConfigStatusUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnConfig.setStatus(param.getStatus());
lineWarnConfigDao.updateStatus(lineWarnConfig);
}
@Override
public void deleteConfig(LineWarnConfigDeleteUpdateParam param) {
LineWarnConfig lineWarnConfig = lineWarnConfigDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnConfig.setDeleteStatus(LineWarnConfigEnum.DeleteStatus.YES.getCode());
lineWarnConfigDao.updateDelete(lineWarnConfig);
}
@Override
public LineWarnConfigVO getConfig(Integer id) {
return lineWarnConfigStruct.convert(lineWarnConfigDao.findById(id).orNull());
}
@Override
public IPage<LineWarnConfigVO> pageConfig(PageLineWarnConfigParam param) {
return lineWarnConfigStruct.convertPage(lineWarnConfigDao.pageByParam(param));
}
@Override
public List<LineWarnConfigVO.WarnTypeItem> listWarnType() {
List<LineWarnConfigVO.WarnTypeItem> list = new ArrayList<>();
for (LineWarnConfigEnum.WarnType item : LineWarnConfigEnum.WarnType.values()) {
list.add(new LineWarnConfigVO.WarnTypeItem(item.getCode(), item.getMsg()));
}
return list;
}
}
package com.clx.performance.service.impl.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.enums.ResultEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.enums.linewarn.LineWarnLogEnum;
import com.clx.performance.enums.linewarn.LineWarnRangEnum;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.model.linewarn.LineWarnLog;
import com.clx.performance.model.linewarn.LineWarnRang;
import com.clx.performance.param.pc.linewarn.LineWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.linewarn.LineWarnInfoSuspendUpdateParam;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import com.clx.performance.service.linewarn.LineWarnInfoService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.struct.linewarn.LineWarnInfoStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class LineWarnInfoServiceImpl implements LineWarnInfoService {
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnLogDao lineWarnLogDao;
@Autowired
private LineWarnRangeDao lineWarnRangeDao;
@Autowired
private LineWarnOrderGoodsDao lineWarnOrderGoodsDao;
@Autowired
private LineWarnInfoStruct lineWarnInfoStruct;
@Autowired
private TruckTraceService truckTraceService;
@Transactional(rollbackFor = Exception.class)
@Override
public void updateSuspend(LineWarnInfoSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
LineWarnInfo lineWarnInfo = lineWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnInfo.setSuspendTime(endTime);
lineWarnInfoDao.updateSuspendTime(lineWarnInfo);
LineWarnLog lineWarnLog = new LineWarnLog();
lineWarnLog.setInfoId(lineWarnInfo.getId());
lineWarnLog.setType(LineWarnLogEnum.Type.SUSPEND.getCode());
lineWarnLog.setContent(LineWarnLogEnum.Type.SUSPEND.getMsg());
lineWarnLog.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnLog.setWarnName(lineWarnInfo.getWarnName());
lineWarnLog.setWarnEndTime(endTime);
lineWarnLog.setWarnTime(lineWarnInfo.getWarnTime());
lineWarnLog.setCreateBy(loginUserInfo.getUserName());
lineWarnLogDao.saveEntity(lineWarnLog);
LineWarnRang lineWarnRang = new LineWarnRang();
lineWarnRang.setWarnConfigId(lineWarnInfo.getWarnConfigId());
lineWarnRang.setWarnName(lineWarnInfo.getWarnName());
lineWarnRang.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnRang.setWarnEndTime(endTime);
lineWarnRang.setStatus(LineWarnRangEnum.Status.ENABLE.getCode());
lineWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
lineWarnRangeDao.updateDisable(lineWarnRang);
// 新增新数据
lineWarnRangeDao.saveEntity(lineWarnRang);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateResolve(LineWarnInfoResolveUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LineWarnInfo lineWarnInfo = lineWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
lineWarnInfo.setStatus(LineWarnInfoEnum.Status.RESOLVE.getCode());
lineWarnInfoDao.updateStatus(lineWarnInfo);
LineWarnLog lineWarnLog = new LineWarnLog();
lineWarnLog.setInfoId(lineWarnInfo.getId());
lineWarnLog.setType(LineWarnLogEnum.Type.RESOLVE.getCode());
lineWarnLog.setContent(LineWarnLogEnum.Type.RESOLVE.getMsg());
lineWarnLog.setOrderGoodsNo(lineWarnInfo.getOrderGoodsNo());
lineWarnLog.setWarnName(lineWarnInfo.getWarnName());
lineWarnLog.setWarnTime(lineWarnInfo.getWarnTime());
lineWarnLog.setCreateBy(loginUserInfo.getUserName());
lineWarnLogDao.saveEntity(lineWarnLog);
}
//
// @Override
// public 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) {
return lineWarnInfoStruct.convert(lineWarnInfoDao.findById(id).orNull());
}
@Override
public IPage<LineWarnInfoVO> pageInfo(PageLineWarnInfoParam param) {
Page<LineWarnInfoVO> page = lineWarnInfoStruct.convertPage(lineWarnInfoDao.pageByParam(param));
List<String> orderGoodsNoList = page.getRecords().stream().map(item -> item.getOrderGoodsNo()).collect(Collectors.toList());
if (!orderGoodsNoList.isEmpty()) {
}
return page;
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.linewarn.LineWarnConfigDao;
import com.clx.performance.dao.linewarn.LineWarnInfoDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.linewarn.LineWarnConfigEnum;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnLoadWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnLoadWarnServiceImpl implements LineWarnLoadWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Override
public void loadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
int unloadTimeAvg = 0;
Integer arriveReceiveExpectTime = lineWarnCommonInfo.getArriveReceiveExpectTime();
long totalTime = Duration.between(lineWarnCommonInfo.getPendingOrderTime(),
lineWarnCommonInfo.getTransportEndTime()).toMinutes();
int needTime = unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.LOAD.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doTakeWarn(orderGoods, item,lineWarnCommonInfo.getPendingOrderTime(), difTime, taskCompleteRatio);
}
}
private void doTakeWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime pendingOrderTime,
long difTime, BigDecimal taskCompleteRatio){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.linewarn.LineWarnOrderGoodsDao;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnOrderGoods;
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.service.linewarn.LineWarnLoadWarnService;
import com.clx.performance.service.linewarn.LineWarnMqHandlerService;
import com.clx.performance.service.linewarn.LineWarnTakeWarnService;
import com.clx.performance.service.linewarn.LineWarnUnloadWarnService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.gd.GdUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Slf4j
@Service
public class LineWarnMqHandlerServiceImpl implements LineWarnMqHandlerService {
@Autowired
private OrderGoodsDao orderGoodsDao;
@Autowired
private LineWarnOrderGoodsDao lineWarnOrderGoodsDao;
@Autowired
private OrderFeign orderFeign;
@Autowired
private OrderService orderService;
@Autowired
private GdUtils gdUtils;
@Autowired
private LineWarnTakeWarnService lineWarnTakeWarnService;
@Autowired
private LineWarnUnloadWarnService lineWarnUnloadWarnService;
@Autowired
private LineWarnLoadWarnService lineWarnLoadWarnService;
@Autowired
private OrderChildDao orderChildDao;
@Override
public void orderGoodsAdd(LineWarnOrderGoodsAddMqParam mq) {
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(mq.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
FeignOrderInfoVO orderInfo = orderService
.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 计算货源地到
int arriveSendExpectTime = gdUtils.getNeedTime(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
LineWarnOrderGoods lineWarnOrderGoods = new LineWarnOrderGoods();
lineWarnOrderGoods.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
lineWarnOrderGoods.setTransportEndTime(LocalDateTimeUtils.parseTime(orderInfo.getTransportEndTime()));
lineWarnOrderGoods.setPendingOrderTime(orderGoods.getPendingOrderTime());
lineWarnOrderGoods.setArriveReceiveExpectTime(arriveSendExpectTime==0? null : arriveSendExpectTime);
lineWarnOrderGoodsDao.saveEntity(lineWarnOrderGoods);
}
@Override
public void lineWarn(LineWarnLineWarnMqParam mq) {
LineWarnOrderGoods lineWarnOrderGoods = lineWarnOrderGoodsDao
.getByOrderGoodsNo(mq.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(mq.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
LineWarnCommonInfoDTO lineWarnCommonInfo = new LineWarnCommonInfoDTO();
lineWarnCommonInfo.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
lineWarnCommonInfo.setTransportEndTime(lineWarnOrderGoods.getTransportEndTime());
lineWarnCommonInfo.setPendingOrderTime(lineWarnOrderGoods.getPendingOrderTime());
lineWarnCommonInfo.setArriveReceiveExpectTime(lineWarnOrderGoods.getArriveReceiveExpectTime());
Integer time = orderChildDao.loadTimeAvg(orderGoods.getSendAddressId(), orderGoods.getReceiveAddressId(),
orderGoods.getSendSystemAddressId(), orderGoods.getReceiveSystemAddressId(),
LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(7)));
// 接单预警
try {
lineWarnTakeWarnService.takeWarn(orderGoods, lineWarnCommonInfo);
}catch (Exception e){
log.info("接单预警异常,msg:{}", e.getMessage());
}
// 装车预警
try{
lineWarnLoadWarnService.loadWarn(orderGoods, lineWarnCommonInfo);
}catch (Exception e){
log.info("装车预警异常,msg:{}", e.getMessage());
}
// 卸车预警
try{
lineWarnUnloadWarnService.unloadWarn(orderGoods, lineWarnCommonInfo);
}catch (Exception e){
log.info("卸车预警异常,msg:{}", e.getMessage());
}
}
@Override
public void notice(LineWarnNoticeMqParam mq) {
}
}
package com.clx.performance.service.impl.linewarn;
import com.alibaba.fastjson.JSON;
import com.clx.performance.common.MqDelay;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyLineWarnConstants;
import com.clx.performance.param.mq.linewarn.LineWarnLineWarnMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnNoticeMqParam;
import com.clx.performance.param.mq.linewarn.LineWarnOrderGoodsAddMqParam;
import com.clx.performance.service.linewarn.LineWarnMqService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class LineWarnMqServiceImpl implements LineWarnMqService {
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void orderGoodsAdd(String orderGoodsNo) {
LineWarnOrderGoodsAddMqParam mq = new LineWarnOrderGoodsAddMqParam();
mq.setOrderGoodsNo(orderGoodsNo);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.ORDER_GOODS_ADD_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void lineWarn(String orderGoodsNo) {
LineWarnLineWarnMqParam mq = new LineWarnLineWarnMqParam();
mq.setOrderGoodsNo(orderGoodsNo);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.LINE_WARN_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void lineWarnNotice(Integer infoId) {
LineWarnNoticeMqParam mq = new LineWarnNoticeMqParam();
mq.setInfoId(infoId);
MqDelay delay = new MqDelay<>(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.LINE_WARN_NOTICE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeyLineWarnConstants.DEFAULT_EXCHANGE, RabbitKeyLineWarnConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
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.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
import com.clx.performance.service.linewarn.LineWarnCommonService;
import com.clx.performance.service.linewarn.LineWarnTakeWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnTakeWarnServiceImpl implements LineWarnTakeWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Override
public void takeWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
int loadTimeAvg = 0;
int unloadTimeAvg = 0;
Integer arriveReceiveExpectTime = lineWarnCommonInfo.getArriveReceiveExpectTime();
long totalTime = Duration.between(lineWarnCommonInfo.getPendingOrderTime(),
lineWarnCommonInfo.getTransportEndTime()).toMinutes();
int needTime = 60+loadTimeAvg+unloadTimeAvg+arriveReceiveExpectTime;
// 接单最长时间
long difTime = totalTime - needTime;
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.TAKE.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doTakeWarn(orderGoods, item,lineWarnCommonInfo.getPendingOrderTime(), difTime, taskCompleteRatio);
}
}
private void doTakeWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime pendingOrderTime,
long difTime, BigDecimal taskCompleteRatio){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
package com.clx.performance.service.impl.linewarn;
import com.clx.performance.dao.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.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.LineWarnUnloadWarnService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class LineWarnUnloadServiceImpl implements LineWarnUnloadWarnService {
@Autowired
private LineWarnConfigDao lineWarnConfigDao;
@Autowired
private LineWarnInfoDao lineWarnInfoDao;
@Autowired
private LineWarnCommonService lineWarnCommonService;
@Override
public void unloadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo) {
long totalTime = Duration.between(lineWarnCommonInfo.getPendingOrderTime(),
lineWarnCommonInfo.getTransportEndTime()).toMinutes();
int needTime = 0;
// 接单最长时间
long difTime = totalTime - needTime;
// 任务完成率
BigDecimal taskCompleteRatio = BigDecimal.ZERO;
List<LineWarnConfig> lineWarnConfigList = lineWarnConfigDao
.listByWarnType(LineWarnConfigEnum.WarnType.UNLOAD.getCode());
if (lineWarnConfigList.isEmpty()) {return;}
for (LineWarnConfig item : lineWarnConfigList) {
doTakeWarn(orderGoods, item,lineWarnCommonInfo.getPendingOrderTime(), difTime, taskCompleteRatio);
}
}
private void doTakeWarn(OrderGoods orderGoods, LineWarnConfig lineWarnConfig, LocalDateTime pendingOrderTime,
long difTime, BigDecimal taskCompleteRatio){
LineWarnInfo lineWarnInfo = lineWarnInfoDao
.findByOrderGoodsNoAndWarnConfigId(orderGoods.getOrderGoodsNo(), lineWarnConfig.getId()).orNull();
if (lineWarnInfo != null
&& Objects.equals(lineWarnInfo.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())){
return;
}
int time = lineWarnConfig.getTimeRatio().multiply(new BigDecimal(difTime)).intValue();
// 未达到时间占比
if (pendingOrderTime.plusMinutes(time).isBefore(LocalDateTime.now())){return;}
// 达到任务占比
if (lineWarnConfig.getTaskCompleteRatio().compareTo(taskCompleteRatio) >= 0) {return;}
// 更新
lineWarnCommonService.lineWarnInfoUpdate(orderGoods, lineWarnInfo, lineWarnConfig);
}
}
......@@ -2,17 +2,16 @@ package com.clx.performance.service.impl.trace;
import com.clx.order.enums.ResultEnum;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.pc.trace.QueryTraceParam;
import com.clx.performance.service.trace.TraceMonitorService;
import com.clx.performance.service.trace.TruckTraceService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.clx.performance.vo.pc.trace.OrderChildTraceVO;
import com.clx.user.feign.TruckFeign;
import com.clx.user.vo.feign.TruckOwnerInfoVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -21,6 +20,7 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
......@@ -29,9 +29,11 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
private final TruckTraceService truckTraceService;
private final OrderChildDao orderChildDao;
private final TruckFeign truckFeign;
//private final TruckFeign truckFeign;
private final int TRACE_DAY_MAX = 3;
private final int TRACE_DAY_MAX = 7;
@Override
public OrderChildTraceVO getOrderChildTrace(QueryTraceParam param) {
if(StringUtils.isBlank(param.getChildNo())){
......@@ -41,11 +43,23 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
OrderChild child = orderChildDao.getByChildNo(param.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND,
"运单数据不存在");
List<DriverTruckTraceVO> truckTrace = truckTraceService.listTruckTraceByTime(param.getTruckNo(),param.getBeginTime(),param.getEndTime());
// 接单重车、卸车空车
for (DriverTruckTraceVO item : truckTrace) {
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
if (child.getCancelTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(child.getCancelTime())){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
if (child.getUnloadTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(child.getUnloadTime())){
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.EMPTY.getCode());}
}
}
List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(child.getDriverUserNo(),param.getBeginTime(),param.getEndTime());
OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace);
result.setTruckTraceList(truckTrace);
result.setDriverTraceList(truckTraceService.splitDriverTrace(driverTrace));
result.setTruckTraceList(truckTraceService.splitTruckTrace(truckTrace));
return result;
}
......@@ -53,33 +67,34 @@ public class TraceMonitorServiceImpl implements TraceMonitorService {
public OrderChildTraceVO getTruckTrace(QueryTraceParam param) {
checkParam(param);
//查询车辆的车主信息
Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo(
/* Result<TruckOwnerInfoVO> result = truckFeign.getTruckOwnerInfo(
param.getTruckNo());
log.info("查询车辆车主信息,车牌号:{},结果:{}",param.getTruckNo(),result);
if(!result.succeed()){
if(!result.succeed() || Objects.isNull(result.getData())){
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND,"未查询到车辆车主信息");
}
long userNo = result.getData().getUserNo();
long userNo = result.getData().getUserNo();*/
return this.getTrace(userNo,param.getTruckNo(),param.getBeginTime(),param.getEndTime());
return this.getTrace(null,param.getTruckNo(),param.getBeginTime(),param.getEndTime());
}
private OrderChildTraceVO getTrace(long userNo,String truckNo,String beginTime,String endTime){
private OrderChildTraceVO getTrace(Long userNo,String truckNo,String beginTime,String endTime){
OrderChildTraceVO result = new OrderChildTraceVO();
List<DriverTruckTraceVO> truckTrace = truckTraceService.listTruckTraceByTime(truckNo,beginTime,endTime);
if(Objects.nonNull(userNo)){
List<DriverTraceVO> driverTrace = truckTraceService.listDriverTraceByTime(userNo,beginTime,endTime);
OrderChildTraceVO result = new OrderChildTraceVO();
result.setDriverTraceList(driverTrace);
result.setTruckTraceList(truckTrace);
result.setDriverTraceList(truckTraceService.splitDriverTrace(driverTrace));
}
result.setTruckTraceList(truckTraceService.splitTruckTrace(truckTrace));
return result;
}
public void checkParam(QueryTraceParam param){
LocalDateTime beginTime = DateUtils.parseDateTime(param.getBeginTime()).get();
LocalDateTime endTime = DateUtils.parseDateTime(param.getEndTime()).get();
if (endTime.isAfter(beginTime.plusDays(TRACE_DAY_MAX)) ) { //最多查询7天
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"选择的时间范围需小于7天");
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"选择的时间范围需小于"+TRACE_DAY_MAX+"天");
}
}
}
package com.clx.performance.service.impl.trace;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnChildDao;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnChildEnum;
import com.clx.performance.esplus.mapper.TruckTraceESPlusMapper;
import com.clx.performance.esplus.model.TruckTraceESPlus;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.utils.LocalDateTimeUtils;
......@@ -28,11 +22,6 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
@Autowired
private ZjxlGpsService zjxlGpsService;
@Autowired
private VehicleWarnChildDao vehicleWarnChildDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private TruckTraceESPlusMapper truckTraceESPlusMapper;
......@@ -40,13 +29,6 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
@Transactional(rollbackFor = Exception.class)
@Override
public void truckTracSync(TruckTraceSyncMqParam mq) {
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (orderChild.getFinishTime() != null) {
vehicleWarnChild.setTraceStatus(VehicleWarnChildEnum.TraceStatus.DISABLE.getCode());
}
vehicleWarnChild.setTraceTime(LocalDateTimeUtils.parseTime(mq.getEndTime()));
List<TruckTraceDTO> list = zjxlGpsService.getTruckTrace(mq.getTruckNo(), mq.getBeginTime(), mq.getEndTime());
if (list.isEmpty()) {return;}
......@@ -54,22 +36,20 @@ public class TruckTraceMqHandlerServiceImpl implements TruckTraceMqHandlerServic
List<TruckTraceESPlus> esList = new ArrayList<>();
for (TruckTraceDTO item : list) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(item.getTruckNo());
es.setTruckNo(mq.getTruckNo());
es.setAngle(item.getAngle());
es.setHeight(item.getHeight());
es.setLocation(new BigDecimal[]{item.getLocation()[0], item.getLocation()[1]});
es.setGpsTime(item.getGpsTime());
es.setMileage(item.getMileage());
es.setSpeed(item.getSpeed());
es.setCreateTime(LocalDateTimeUtils.formatTime());
esList.add(es);
}
// 保存
truckTraceESPlusMapper.insertBatch(esList);
// 更新同步时间
vehicleWarnChildDao.updateTraceTime(vehicleWarnChild);
}
}
......@@ -12,8 +12,10 @@ import com.clx.performance.struct.trace.TruckTraceStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import com.msl.common.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -41,6 +43,8 @@ public class TruckTraceServiceImpl implements TruckTraceService {
@Autowired
private DriverTraceStruct driverTraceStruct;
private final static long stopMinutes = 5;
@Override
public List<DriverTruckTraceVO> listTruckTraceByTime(String truckNo, String beginTime, String endTime) {
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
......@@ -49,46 +53,83 @@ public class TruckTraceServiceImpl implements TruckTraceService {
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
);
return truckTraceStruct.convert(list);
}
List<DriverTruckTraceVO> traceList = truckTraceStruct.convert(list);
//计算车辆的停留结束时间
@Override
public List<DriverTruckTraceVO> calcTruckStayTime(List<DriverTruckTraceVO> traceList){
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed() == null){continue;}
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
if (parkIdx == null) {parkIdx = i;}
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()),
LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=i; j++){
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(i).getGpsTime());
}
parkIdx = null;
}
}
if (parkIdx!=null && parkIdx < traceList.size()-1){
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()),
LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=traceList.size()-1; j++){
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(traceList.size()-1).getGpsTime());
}
}
return traceList;
}
//计算司机的停留结束时间
@Override
public List<DriverTraceVO> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
List<DriverTraceESPlus> list = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
);
List<DriverTraceVO> traceList = driverTraceStruct.convert(list);
public List<DriverTraceVO> calcDriverStayTime(List<DriverTraceVO> traceList){
// 停留时长计算
Integer parkIdx = null;
for (int i=0; i<traceList.size(); i++){
if (traceList.get(i).getSpeed() == null){continue;}
if (traceList.get(i).getSpeed().compareTo(new BigDecimal(PARK_SPEED)) < 0){
parkIdx = i;
if (parkIdx == null) {parkIdx = i;}
}
else {
if (parkIdx == null) {continue;}
long stayTime = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
traceList.get(parkIdx).setStayTime(new BigDecimal(stayTime).divide(new BigDecimal(60), 1, RoundingMode.HALF_UP));
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(i).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=i; j++) {
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(i).getGpsTime());
}
parkIdx = null;
}
}
if (parkIdx!=null && parkIdx < traceList.size()-1){
long duration = Duration.between(LocalDateTimeUtils.parseTime(traceList.get(parkIdx).getGpsTime()), LocalDateTimeUtils.parseTime(traceList.get(traceList.size()-1).getGpsTime())).getSeconds();
BigDecimal stayTime = new BigDecimal(duration)
.divide(new BigDecimal(60), 1, RoundingMode.HALF_UP);
for (int j= parkIdx; j<=traceList.size()-1; j++) {
traceList.get(j).setStayTime(stayTime);
traceList.get(j).setStayBeginTime(traceList.get(parkIdx).getGpsTime());
traceList.get(j).setStayEndTime(traceList.get(traceList.size() - 1).getGpsTime());
}
}
......@@ -96,6 +137,87 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public List<List<DriverTruckTraceVO>> splitTruckTrace(List<DriverTruckTraceVO> traceList){
List<List<DriverTruckTraceVO>> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(traceList)){
if(traceList.size() == 1){
result.add(traceList);
return result;
}else{
List<DriverTruckTraceVO> temp = new ArrayList<>();
temp.add(traceList.get(0));
for(int i = 1; i< traceList.size(); i ++){
DriverTruckTraceVO current = traceList.get(i);
DriverTruckTraceVO prev = traceList.get(i-1);
long minutes = LocalDateTimeUtils.betweenMin(DateUtils.parseDateTime(prev.getGpsTime()).get(),
DateUtils.parseDateTime(current.getGpsTime()).get());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if(minutes > stopMinutes){
result.add(temp);
temp = new ArrayList<>();
temp.add(current);
}else{
temp.add(current);
}
}
result.add(temp);
}
}
for (List<DriverTruckTraceVO> list : result) {
calcTruckStayTime(list);
}
return result;
}
//如果停留时间超过指定时间,则切分轨迹信息为多段
public List<List<DriverTraceVO>> splitDriverTrace(List<DriverTraceVO> driverTraceList){
List<List<DriverTraceVO>> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(driverTraceList)){
if(driverTraceList.size() == 1){
result.add(driverTraceList);
return result;
}else{
List<DriverTraceVO> temp = new ArrayList<>();
temp.add(driverTraceList.get(0));
for(int i = 1; i< driverTraceList.size(); i ++){
DriverTraceVO current = driverTraceList.get(i);
DriverTraceVO prev = driverTraceList.get(i-1);
long minutes = LocalDateTimeUtils.betweenMin(DateUtils.parseDateTime(prev.getGpsTime()).get(),
DateUtils.parseDateTime(current.getGpsTime()).get());
//如果两个坐标停留的时间超过指定时间,则为新的一段路线。
if(minutes > stopMinutes){
result.add(temp);
temp = new ArrayList<>();
temp.add(current);
}else{
temp.add(current);
}
}
result.add(temp);
}
}
for (List<DriverTraceVO> list : result) {
calcDriverStayTime(list);
}
return result;
}
@Override
public List<DriverTraceVO> listDriverTraceByTime(Long userNo, String beginTime, String endTime) {
List<DriverTraceESPlus> list = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
);
return driverTraceStruct.convert(list);
}
@Override
public void truckTraceSave(TruckTraceAddParam param){
......@@ -120,14 +242,16 @@ public class TruckTraceServiceImpl implements TruckTraceService {
public void driverTraceSave(DriverTraceAddParam param){
List<DriverTraceESPlus> list = new ArrayList<>();
DriverTraceESPlus es = null;
for (DriverTraceAddParam.DriverTraceItem item : param.getTraceList()) {
DriverTraceESPlus es = new DriverTraceESPlus();
es = new DriverTraceESPlus();
es.setUserNo(item.getUserNo());
es.setDataType(item.getDataType());
es.setLocation(item.getLocation());
es.setPositionTime(item.getGpsTime());
es.setCreateTime(LocalDateTimeUtils.formatTime());
es.setModifiedTime(es.getCreateTime());
es.setSpeed(item.getSpeed());
list.add(es);
}
......@@ -168,53 +292,73 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
@Override
public int getParkTime(String truckNo, Long userNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusDays(1));
String endTime = LocalDateTimeUtils.formatTime();
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime) {
return getParkTime(truckNo, userNo, beginDateTime, LocalDateTime.now());
}
@Override
public int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime, LocalDateTime endDateTime) {
String beginTime = LocalDateTimeUtils.formatTime(beginDateTime);
String endTime = LocalDateTimeUtils.formatTime(endDateTime);
boolean flag = false;
// 车辆
// 非停留最大时间
List<TruckTraceESPlus> list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getSpeed, PARK_SPEED)
.ge(TruckTraceESPlus::getGpsTime, beginTime)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByAsc("gpsTime")
.orderByDesc("gpsTime")
.limit(1)
);
String time = beginTime;
if (!list.isEmpty()){
time = list.get(0).getGpsTime();
flag = true; //车辆存在轨迹
}
// 停留时间段
list = truckTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<TruckTraceESPlus>()
.eq(TruckTraceESPlus::getTruckNo, truckNo)
.gt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, list.get(0).getGpsTime())
.lt(TruckTraceESPlus::getSpeed, PARK_SPEED)
.gt(TruckTraceESPlus::getGpsTime, time)
.le(TruckTraceESPlus::getGpsTime, endTime)
.orderByDesc("gpsTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(0).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime())).toMinutes();
if (!list.isEmpty()) {
// 停留时长
return (int)Duration.between(LocalDateTimeUtils.parseTime(list.get(list.size() - 1).getGpsTime()), LocalDateTimeUtils.parseTime(list.get(0).getGpsTime())).toMinutes();
}
if (flag) {return 0;}
// 司机
List<DriverTraceESPlus> list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.ge(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, beginTime)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByAsc("positionTime")
.orderByDesc("positionTime")
.limit(1)
);
if (!list1.isEmpty()){
time = beginTime;
if (!list1.isEmpty()){time = list1.get(0).getPositionTime();}
list1 = driverTraceESPlusMapper.selectList(new LambdaEsQueryWrapper<DriverTraceESPlus>()
.eq(DriverTraceESPlus::getUserNo, userNo)
.eq(DriverTraceESPlus::getSpeed, PARK_SPEED)
.ge(DriverTraceESPlus::getPositionTime, list1.get(0).getPositionTime())
.lt(DriverTraceESPlus::getSpeed, PARK_SPEED)
.gt(DriverTraceESPlus::getPositionTime, time)
.le(DriverTraceESPlus::getPositionTime, endTime)
.orderByDesc("positionTime")
);
return (int)Duration.between(LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime())).toMinutes();
if (!list1.isEmpty()) {
return (int) Duration.between(LocalDateTimeUtils.parseTime(list1.get(list1.size() - 1).getPositionTime()), LocalDateTimeUtils.parseTime(list1.get(0).getPositionTime())).toMinutes();
}
return 0;
}
@Override
public BigDecimal[] getCurrentTruckPosition(String truckNo) {
String beginTime = LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5));
......@@ -235,5 +379,34 @@ public class TruckTraceServiceImpl implements TruckTraceService {
}
/**
* 生成指定大小的车辆轨迹数据插入到es中
**/
@Override
public void saveTruckTrace(String truckNo,Integer size,String gpsTime){
if(size > 20000){
size = 20000;
}
List<TruckTraceESPlus> esList = new ArrayList<>();
for (int i = 0 ;i < size ; i ++ ) {
TruckTraceESPlus es = new TruckTraceESPlus();
es.setTruckNo(truckNo);
es.setAngle(new BigDecimal("1"));
es.setHeight(null);
es.setLocation(new BigDecimal[]{new BigDecimal("116.473705"), new BigDecimal("40.004198")});
if(StringUtils.isNotBlank(gpsTime)){
es.setGpsTime(gpsTime);
}else{
es.setGpsTime(DateUtils.formatDateTime(LocalDateTime.now()).get());
}
es.setMileage(null);
es.setSpeed(new BigDecimal("3"));
esList.add(es);
}
// 保存
truckTraceESPlusMapper.insertBatch(esList);
}
}
......@@ -54,6 +54,9 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
vehicleWarnInfo.setWarnTime(LocalDateTime.now());
vehicleWarnInfoDao.updateWarnTime(vehicleWarnInfo);
// 发送mq (预警通知)
vehicleWarnMqService.truckWarnNotice(vehicleWarnInfo.getId());
return;
}
......@@ -67,6 +70,7 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
vehicleWarnInfo.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnInfo.setChildNo(orderChild.getChildNo());
vehicleWarnInfo.setChildStatus(orderChild.getStatus());
vehicleWarnInfo.setSendAddressId(orderChild.getSendAddressId());
vehicleWarnInfo.setSendAddress(orderChild.getSendAddress());
vehicleWarnInfo.setReceiveAddressId(orderChild.getReceiveAddressId());
......@@ -99,7 +103,7 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
if (Objects.equals(item.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())){
if (Objects.equals(vehicleWarnChild.getOrderGoodsNo(), item.getOrderNo())) {
if (Objects.equals(vehicleWarnChild.getOrderGoodsNo(), item.getOrderGoodsNo())) {
return item.getWarnEndTime().isAfter(LocalDateTime.now());
}
}
......@@ -120,6 +124,7 @@ public class VehicleWarnCommonServiceImpl implements VehicleWarnCommonService {
@Override
public BigDecimal[] getCurrentPosition(String truckNo, Long userNo){
BigDecimal[] currentPosition = truckTraceService.getCurrentPosition(truckNo, userNo);
log.info("获取车辆位置, truckNo:{}, userNo:{}, currentPosition:{}", truckNo, userNo, currentPosition);
return currentPosition;
}
......
......@@ -2,9 +2,11 @@ package com.clx.performance.service.impl.vehiclewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.vehiclewarn.VehicleWarnConfigDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnConfig;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.param.pc.vehiclewarn.*;
import com.clx.performance.service.vehiclewarn.VehicleWarnConfigService;
import com.clx.performance.struct.vehiclewarn.VehicleWarnConfigStruct;
......@@ -32,6 +34,9 @@ public class VehicleWarnConfigServiceImpl implements VehicleWarnConfigService {
@Autowired
private VehicleWarnConfigStruct vehicleWarnConfigStruct;
@Autowired
private VehicleWarnInfoDao vehicleWarnInfoDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void saveConfig(VehicleWarnConfigAddParam param) {
......@@ -82,6 +87,10 @@ public class VehicleWarnConfigServiceImpl implements VehicleWarnConfigService {
vehicleWarnConfig.setRadius(param.getRadius());
vehicleWarnConfigDao.updateConfig(vehicleWarnConfig);
// 同步历史数据
VehicleWarnInfo vehicleWarnInfo = new VehicleWarnInfo();
vehicleWarnInfoDao.updateByConfig(vehicleWarnConfig.getId(), vehicleWarnConfig.getWarnName(), vehicleWarnConfig.getWarnLevel());
}
@Transactional(rollbackFor = Exception.class)
@Override
......
......@@ -43,6 +43,7 @@ public class VehicleWarnDelayWarnServiceImpl implements VehicleWarnDelayWarnServ
@Transactional(rollbackFor = Exception.class)
@Override
public void delayTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 拉运结束时间
LocalDateTime transportEndTime = commonInfo.getTransportEndTime();
......
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.OrderChildDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnInfoDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnLogDao;
import com.clx.performance.dao.vehiclewarn.VehicleWarnRangeDao;
import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnLogEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnRangEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnLog;
import com.clx.performance.model.vehiclewarn.VehicleWarnRang;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoResolveUpdateParam;
import com.clx.performance.param.pc.vehiclewarn.VehicleWarnInfoSuspendUpdateParam;
......@@ -30,6 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
@Service
......@@ -41,6 +49,8 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Autowired
private VehicleWarnLogDao vehicleWarnLogDao;
@Autowired
private VehicleWarnRangeDao vehicleWarnRangeDao;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
......@@ -53,10 +63,11 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Override
public void updateSuspend(VehicleWarnInfoSuspendUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime endTime = LocalDateTimeUtils.parseTime(param.getWarnEndTime());
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
vehicleWarnInfo.setSuspendTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnInfo.setSuspendTime(endTime);
vehicleWarnInfoDao.updateSuspendTime(vehicleWarnInfo, param.getWarnRang());
VehicleWarnLog vehicleWarnLog = new VehicleWarnLog();
......@@ -66,10 +77,29 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
vehicleWarnLog.setChildNo(vehicleWarnInfo.getChildNo());
vehicleWarnLog.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnLog.setWarnRang(param.getWarnRang());
vehicleWarnLog.setWarnEndTime(LocalDateTimeUtils.parseTime(param.getWarnEndTime()));
vehicleWarnLog.setWarnEndTime(endTime);
vehicleWarnLog.setWarnTime(vehicleWarnInfo.getWarnTime());
vehicleWarnLog.setCreateBy(loginUserInfo.getUserName());
vehicleWarnLogDao.saveEntity(vehicleWarnLog);
VehicleWarnRang vehicleWarnRang = new VehicleWarnRang();
vehicleWarnRang.setWarnConfigId(vehicleWarnInfo.getWarnConfigId());
vehicleWarnRang.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnRang.setWarnRang(param.getWarnRang());
vehicleWarnRang.setOrderGoodsNo(
Objects.equals(param.getWarnRang(), VehicleWarnRangEnum.WarnRange.ORDER_GOODS.getCode())
? vehicleWarnInfo.getOrderGoodsNo() : null);
vehicleWarnRang.setChildNo(
Objects.equals(param.getWarnRang(), VehicleWarnRangEnum.WarnRange.CHILD.getCode())
? vehicleWarnInfo.getChildNo() : null);
vehicleWarnRang.setWarnEndTime(endTime);
vehicleWarnRang.setStatus(VehicleWarnRangEnum.Status.ENABLE.getCode());
vehicleWarnRang.setCreateBy(loginUserInfo.getUserName());
// 禁用旧数据
vehicleWarnRangeDao.updateDisable(vehicleWarnRang);
// 新增新数据
vehicleWarnRangeDao.saveEntity(vehicleWarnRang);
}
@Transactional(rollbackFor = Exception.class)
......@@ -87,6 +117,7 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
vehicleWarnLog.setContent(VehicleWarnLogEnum.Type.RESOLVE.getMsg());
vehicleWarnLog.setChildNo(vehicleWarnInfo.getChildNo());
vehicleWarnLog.setWarnName(vehicleWarnInfo.getWarnName());
vehicleWarnLog.setWarnTime(vehicleWarnInfo.getWarnTime());
vehicleWarnLog.setCreateBy(loginUserInfo.getUserName());
vehicleWarnLogDao.saveEntity(vehicleWarnLog);
......@@ -108,23 +139,26 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
if (orderChild.getFinishTime() != null) {endTime = orderChild.getFinishTime();}
if (endTime.isAfter(beginTime.plusDays(TRUCK_TRACE_DAY_MAX))) {endTime = beginTime.plusDays(TRUCK_TRACE_DAY_MAX);} //最多查询3天
List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
List<DriverTraceVO> driverTraceList = truckTraceService.listDriverTraceByTime(vehicleWarnInfo.getDriverUserNo(), LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
List<DriverTruckTraceVO> truckTraceList = truckTraceService.listTruckTraceByTime(vehicleWarnInfo.getTruckNo(),
LocalDateTimeUtils.formatTime(beginTime), LocalDateTimeUtils.formatTime(endTime));
// 接单重车、卸车空车
for (DriverTruckTraceVO item : truckTraceList) {
item.setTruckStatus(1);
item.setTruckStatus(DriverTruckEnum.TraceTruckStatus.HEAVY.getCode());
if (orderChild.getCancelTime() != null){
if (LocalDateTimeUtils.parseTime(item.getGpsTime()).isAfter(orderChild.getCancelTime())){item.setTruckStatus(0);}
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(0);}
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(driverTraceList);
result.setTruckTraceList(truckTraceList);
result.setDriverTraceList(truckTraceService.splitDriverTrace(driverTraceList));
result.setTruckTraceList(truckTraceService.splitTruckTrace(truckTraceList));
return result;
}
......@@ -137,7 +171,17 @@ public class VehicleWarnInfoServiceImpl implements VehicleWarnInfoService {
@Override
public IPage<VehicleWarnInfoVO> pageInfo(PageVehicleWarnInfoParam param) {
return vehicleWarnInfoStruct.convertPage(vehicleWarnInfoDao.pageByParam(param));
Page<VehicleWarnInfoVO> page = vehicleWarnInfoStruct.convertPage(vehicleWarnInfoDao.pageByParam(param));
List<String> childNoList = page.getRecords().stream().map(item -> item.getChildNo()).collect(Collectors.toList());
if (!childNoList.isEmpty()) {
List<OrderChild> list = orderChildDao.listByChildNoList(childNoList);
Map<String, OrderChild> map = list.stream().collect(Collectors.toMap(item -> item.getChildNo(), item -> item));
for (VehicleWarnInfoVO record : page.getRecords()) {
record.setChildStatus(map.get(record.getChildNo()).getStatus());
}
}
return page;
}
}
......@@ -3,7 +3,7 @@ package com.clx.performance.service.impl.vehiclewarn;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.batch.AliBatchSmsMessageReq;
import com.clx.message.req.message.AliSmsMessageReq;
import com.clx.message.req.message.ClinkMessageReq;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.config.ClxMessageConfig;
......@@ -16,15 +16,18 @@ import com.clx.performance.dto.vehiclewarn.VehicleWarnCommonInfoDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnChildEnum;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.vehiclewarn.VehicleWarnChild;
import com.clx.performance.model.vehiclewarn.VehicleWarnInfo;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnChildAddMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnMqParam;
import com.clx.performance.param.mq.vehiclewarn.VehicleWarnTruckWarnNoticeMqParam;
import com.clx.performance.service.trace.TruckTraceMqHandlerService;
import com.clx.performance.service.vehiclewarn.*;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -41,6 +44,7 @@ import java.util.Objects;
@Slf4j
@Service
public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerService {
private static final Integer DISTANCE_DEFAULT = 2000;
@Autowired
private OrderChildDao orderChildDao;
......@@ -70,19 +74,39 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
private OrderService orderService;
@Autowired
private VehicleWarnDelayWarnService vehicleWarnDelayWarnService;
@Autowired
private TruckTraceMqHandlerService truckTraceMqHandlerService;
@Override
public void orderChildAdd(VehicleWarnChildAddMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
// 同步车辆轨迹
TruckTraceSyncMqParam truckTraceSyncMqParam = new TruckTraceSyncMqParam();
truckTraceSyncMqParam.setChildNo(orderChild.getChildNo());
truckTraceSyncMqParam.setTruckNo(orderChild.getTruckNo());
truckTraceSyncMqParam.setBeginTime(LocalDateTimeUtils.formatTime(LocalDateTime.now().minusMinutes(5)));
truckTraceSyncMqParam.setEndTime(LocalDateTimeUtils.formatTime());
try {
truckTraceMqHandlerService.truckTracSync(truckTraceSyncMqParam);
}catch (Exception e){
log.info("同步车辆轨迹失败, msg:{}", e.getMessage());
}
// 计算预计时间
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(), orderChild.getDriverUserNo());
int arriveSendExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getSendLongitude(), orderGoods.getSendLatitude());
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
BigDecimal[] currentPosition = vehicleWarnCommonService.getCurrentPosition(orderChild.getTruckNo(),
orderChild.getDriverUserNo());
int arriveSendExpectTime = vehicleWarnCommonService.getNeedTime(currentPosition,
orderGoods.getSendLongitude(), orderGoods.getSendLatitude());
int arriveReceiveExpectTime = vehicleWarnCommonService.getNeedTime(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
int needDistance = vehicleWarnCommonService.getNeedDistance(new BigDecimal[]{orderGoods.getSendLongitude(),
orderGoods.getSendLatitude()}, orderGoods.getReceiveLongitude(), orderGoods.getReceiveLatitude());
VehicleWarnChild vehicleWarnChild = new VehicleWarnChild();
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderNo());
vehicleWarnChild.setOrderGoodsNo(orderChild.getOrderGoodsNo());
vehicleWarnChild.setChildNo(orderChild.getChildNo());
vehicleWarnChild.setTruckNo(orderChild.getTruckNo());
vehicleWarnChild.setDriverUserNo(orderChild.getDriverUserNo());
......@@ -92,8 +116,11 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
vehicleWarnChild.setReceiveLatitude(orderGoods.getReceiveLatitude());
vehicleWarnChild.setArriveSendExpectTime(arriveSendExpectTime==0? null : arriveSendExpectTime);
vehicleWarnChild.setArriveReceiveExpectTime(arriveReceiveExpectTime==0? null : arriveReceiveExpectTime);
vehicleWarnChild.setReceiveAddressDistance(needDistance);
vehicleWarnChild.setTraceTime(orderChild.getPayTime());
vehicleWarnChild.setTakeTime(orderChild.getPayTime());
vehicleWarnChild.setTraceTime(LocalDateTime.now());
vehicleWarnChild.setWarnStatus(VehicleWarnChildEnum.WarnStatus.ENABLE.getCode());
vehicleWarnChildDao.saveEntity(vehicleWarnChild);
}
......@@ -106,8 +133,9 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
VehicleWarnChild vehicleWarnChild = vehicleWarnChildDao.findByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
VehicleWarnCommonInfoDTO commonInfo = new VehicleWarnCommonInfoDTO();
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveSendTime());
commonInfo.setChildNo(orderChild.getChildNo());
commonInfo.setLastArriveSendTime(orderGoods.getLastArriveSendTime());
commonInfo.setLastArriveReceiveTime(orderGoods.getLastArriveReceiveTime());
commonInfo.setCurrentTime(LocalDateTime.now());
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
......@@ -134,6 +162,35 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
commonInfo.setReceiveAddressDistance(vehicleWarnCommonService.getNeedDistance(commonInfo.getCurrentPosition(), vehicleWarnChild.getReceiveLongitude(), vehicleWarnChild.getReceiveLatitude()));
}
// 未装车前往目的地判断
commonInfo.setGotoReceive(false);
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getEstimateLoadTime() != null){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(vehicleWarnChild.getEstimateLoadTime());
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance > DISTANCE_DEFAULT){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(LocalDateTime.now());
vehicleWarnChild.setEstimateLoadTime(commonInfo.getGotoReceiveTime());
vehicleWarnChildDao.updateEstimateLoadTime(vehicleWarnChild);
}
}
}
else {
if (orderChild.getLoadTime() != null){
commonInfo.setGotoReceive(true);
commonInfo.setGotoReceiveTime(orderChild.getLoadTime());
}
}
log.info("commonInfo:{}", commonInfo);
// 前往货源地超时
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.CREATED.getCode())
......@@ -239,11 +296,17 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
}
}
// 更新目的地距离
if (commonInfo.getReceiveAddressDistance() != null) {
vehicleWarnChild.setReceiveAddressDistance(commonInfo.getReceiveAddressDistance());
vehicleWarnChildDao.updateReceiveAddressDistance(vehicleWarnChild);
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.COMPLETE.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.DRIVER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.PLATFORM_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.OWNER_CANCEL.getCode())
|| Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode())
) {
// 运单结束不再预警
vehicleWarnChild.setWarnStatus(VehicleWarnChildEnum.TraceStatus.DISABLE.getCode());
vehicleWarnChildDao.updateWarnStatus(vehicleWarnChild);
}
}
@Override
......@@ -255,7 +318,7 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
// 过滤需要通知的人员
List<VehicleWarnUser> list = vehicleWarnUserDao.listAllEnable();
for (VehicleWarnUser item : list) {
List<Integer> warnTypeList = JSON.parseArray(item.getWarmTypeJson(),Integer.class);
List<Integer> warnTypeList = JSON.parseArray(item.getWarnTypeJson(),Integer.class);
if (warnTypeList.contains(vehicleWarnInfo.getWarnType())){
mobileList.add(item.getMobile());
}
......@@ -267,7 +330,8 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
if (vehicleWarnInfo.getWarnLevel() == 2){ //2级短信
sendSms(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
else if (vehicleWarnInfo.getWarnLevel() == 3) { //3级外呼
else if (vehicleWarnInfo.getWarnLevel() == 3) { //3级外呼+短信
sendSms(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
sendClink(mobileList, vehicleWarnInfo.getWarnName(), vehicleWarnInfo.getTruckNo(), vehicleWarnInfo.getChildNo());
}
......@@ -279,18 +343,22 @@ public class VehicleWarnMqHandlerServiceImpl implements VehicleWarnMqHandlerServ
@Override
public void sendSms(List<String> mobileList, String warnName, String truckNo, String childNo) {
//触发${warnName}预警;车牌号${truckNo};运单${childNo};请尽快核实情况
AliBatchSmsMessageReq req = new AliBatchSmsMessageReq();
AliSmsMessageReq req = new AliSmsMessageReq();
req.setTemplateCode(clxMessageConfig.getVehicleWarnTemplateCode());
JSONObject jsonObject = new JSONObject();
jsonObject.set("warnName", warnName);
jsonObject.set("truckNo", truckNo);
jsonObject.set("childNo", childNo);
req.setTemplateCode(clxMessageConfig.getVehicleWarnTemplateCode());
req.setChannelId(clxMessageConfig.getChannelId());
req.setAppId(clxMessageConfig.getAppId().toString());
req.setMobileList(mobileList);
req.setContent(jsonObject.toString());
clxMessageOpenapiFeign.sendAliSmsBatch(req);
req.setExpire(300L);
for (String mobile : mobileList) {
req.setMobile(mobile);
clxMessageOpenapiFeign.sendAliSms(req);
}
}
......
......@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
......@@ -27,6 +28,7 @@ import java.util.Objects;
public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnService {
private static final Integer MIN_FER_HOUR = 60;
private static final Integer DISTANCE_DEFAULT = 2000;
private static final Integer PARK_TIMEOUT_DEFAULT = 5;
@Autowired
private VehicleWarnConfigDao vehicleWarnConfigDao;
@Autowired
......@@ -45,22 +47,11 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
public void packTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
if (!commonInfo.isGotoReceive()) {return;}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), orderChild.getLoadTime());
if (parkTime == 0) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.PARK_TIMEOUT.getCode());
......@@ -73,7 +64,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
}
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTimee){
private void doParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnConfig vehicleWarnConfig, int parkTime){
VehicleWarnInfo vehicleWarnInfo = vehicleWarnInfoDao.findByChildNoAndWarnConfigId(vehicleWarnChild.getChildNo(), vehicleWarnConfig.getId()).orNull();
if (vehicleWarnInfo != null && Objects.equals(vehicleWarnInfo.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())){
return;
......@@ -85,7 +76,7 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
// 超时判断
int time = vehicleWarnConfig.getTimeoutRatio().multiply(new BigDecimal(MIN_FER_HOUR)).intValue();
if (parkTimee > time){return;}
if (parkTime < time){return;}
// 更新
vehicleWarnCommonService.vehicleWarnInfoUpdate(orderChild, vehicleWarnInfo, vehicleWarnConfig);
......@@ -96,24 +87,12 @@ public class VehicleWarnParkWarnServiceImpl implements VehicleWarnParkWarnServic
public void sensitiveAreaParkTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo) {
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
if (!commonInfo.isGotoReceive()) {return;}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 停留时间
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo());
if (parkTime == 0) {return;}
int parkTime = truckTraceService.getParkTime(vehicleWarnChild.getTruckNo(), vehicleWarnChild.getDriverUserNo(), vehicleWarnChild.getTakeTime());
if (parkTime < PARK_TIMEOUT_DEFAULT) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.SENSITIVE_AREA_PARK_TIMEOUT.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......
......@@ -44,22 +44,9 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
if (!commonInfo.isGotoReceive()) {return;}
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
// 假定当前已装车
orderChild.setLoadTime(LocalDateTime.now());
}
}
orderChild.setLoadTime(commonInfo.getGotoReceiveTime());
// 理论时间
Integer expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
......@@ -105,19 +92,8 @@ public class VehicleWarnReceiveAddressWarnServiceImpl implements VehicleWarnRece
if (vehicleWarnChild.getArriveReceiveExpectTime() == null) {return;}
// 未装车前往目的地判断
if (Objects.equals(orderChild.getStatus(), OrderChildEnum.Status.ARRIVE_SEND.getCode())){
if (!commonInfo.isGotoReceive()) {return;}
// 首次不处理预警
if (vehicleWarnChild.getReceiveAddressDistance() == null){
return;
}
else {
Integer needDistance = commonInfo.getReceiveAddressDistance();
// 未前往目的地不处理预警
if (vehicleWarnChild.getReceiveAddressDistance()-needDistance < DISTANCE_DEFAULT){return;}
}
}
// 计算需要的时间
int needTime = commonInfo.getReceiveAddressTime();
......
......@@ -41,7 +41,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
public void gotoSendAddressTimeout(OrderChild orderChild, VehicleWarnChild vehicleWarnChild, VehicleWarnCommonInfoDTO commonInfo){
if (vehicleWarnChild.getArriveSendExpectTime() == null) {return;}
long expectTime = vehicleWarnChild.getArriveReceiveExpectTime();
long expectTime = vehicleWarnChild.getArriveSendExpectTime();
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
......@@ -75,7 +75,7 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
}
/**
* 到达货源地超时
* 到达货源地延误
*/
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -84,10 +84,11 @@ public class VehicleWarnSendAddressWarnServiceImpl implements VehicleWarnSendAdd
// 计算需要的时间
Integer needTime = commonInfo.getSendAddressTime();
LocalDateTime lastArriveSendTime = commonInfo.getLastArriveSendTime();
// 超时判断
LocalDateTime now = LocalDateTime.now();
if (vehicleWarnChild.getTakeTime().plusMinutes(vehicleWarnChild.getArriveSendExpectTime()).isAfter(now.plusMinutes(needTime))) {return;}
if (lastArriveSendTime.isAfter(now.plusMinutes(needTime))) {return;}
List<VehicleWarnConfig> vehicleWarnConfigList = vehicleWarnConfigDao.listByWarnType(VehicleWarnConfigEnum.WarnType.ARRIVE_SEND_DELAY.getCode());
if (vehicleWarnConfigList.isEmpty()) {return;}
......
......@@ -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.vehiclewarn.VehicleWarnConfigEnum;
import com.clx.performance.enums.vehiclewarn.VehicleWarnUserEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.pc.vehiclewarn.*;
......@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -43,11 +45,13 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
if (optional.isPresent()){
throw new ServiceSystemException(ResultEnum.VEHICLE_WARN_USER_EXIST);
}
List<Integer> warnTypeList = Arrays.stream(VehicleWarnConfigEnum.WarnType.values())
.map(item -> item.getCode()).collect(Collectors.toList());
VehicleWarnUser vehicleWarnUser = new VehicleWarnUser();
vehicleWarnUser.setName(param.getName());
vehicleWarnUser.setMobile(param.getMobile());
vehicleWarnUser.setWarmTypeJson(JSON.toJSONString(new ArrayList<>()));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setLineWarnTypeJson(JSON.toJSONString(new ArrayList<>()));
vehicleWarnUser.setCreateBy(loginUserInfo.getUserName());
vehicleWarnUserDao.saveEntity(vehicleWarnUser);
......@@ -75,7 +79,7 @@ public class VehicleWarnUserServiceImpl implements VehicleWarnUserService {
List<Integer> warnTypeList = param.getWarnTypeList().stream().filter(item -> Objects.equals(item.getEnable(), 1)).map(item->item.getWarnType()).collect(Collectors.toList());
vehicleWarnUser.setWarmTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUser.setWarnTypeJson(JSON.toJSONString(warnTypeList));
vehicleWarnUserDao.updateWarnType(vehicleWarnUser);
}
......
package com.clx.performance.service.linewarn;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.linewarn.LineWarnConfig;
import com.clx.performance.model.linewarn.LineWarnInfo;
public interface LineWarnCommonService {
void lineWarnInfoUpdate(OrderGoods orderGoods, LineWarnInfo lineWarnInfo, LineWarnConfig lineWarnConfig);
}
package com.clx.performance.service.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.linewarn.*;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
import java.util.List;
public interface LineWarnConfigService {
void saveConfig(LineWarnConfigAddParam param);
void updateConfig(LineWarnConfigUpdateParam param);
void updateStatus(LineWarnConfigStatusUpdateParam param);
void deleteConfig(LineWarnConfigDeleteUpdateParam param);
LineWarnConfigVO getConfig(Integer id);
IPage<LineWarnConfigVO> pageConfig(PageLineWarnConfigParam param);
List<LineWarnConfigVO.WarnTypeItem> listWarnType();
}
package com.clx.performance.service.linewarn;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.vo.pc.linewarn.LineWarnInfoVO;
public interface LineWarnInfoService {
void updateSuspend(LineWarnInfoSuspendUpdateParam param);
void updateResolve(LineWarnInfoResolveUpdateParam param);
// VehicleTraceVO getTrace(Integer id);
LineWarnInfoVO getInfo(Integer id);
IPage<LineWarnInfoVO> pageInfo(PageLineWarnInfoParam param);
}
package com.clx.performance.service.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
public interface LineWarnLoadWarnService {
void loadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
}
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.LineWarnOrderGoodsAddMqParam;
public interface LineWarnMqHandlerService {
void orderGoodsAdd(LineWarnOrderGoodsAddMqParam mq);
void lineWarn(LineWarnLineWarnMqParam mq);
void notice(LineWarnNoticeMqParam mq);
}
package com.clx.performance.service.linewarn;
public interface LineWarnMqService {
void orderGoodsAdd(String orderGoodsNo);
void lineWarn(String childNo);
void lineWarnNotice(Integer infoId);
}
package com.clx.performance.service.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
public interface LineWarnTakeWarnService {
void takeWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
}
package com.clx.performance.service.linewarn;
import com.clx.performance.dto.linewarn.LineWarnCommonInfoDTO;
import com.clx.performance.model.OrderGoods;
public interface LineWarnUnloadWarnService {
void unloadWarn(OrderGoods orderGoods, LineWarnCommonInfoDTO lineWarnCommonInfo);
}
......@@ -6,6 +6,7 @@ import com.clx.performance.vo.pc.trace.DriverTraceVO;
import com.clx.performance.vo.pc.trace.DriverTruckTraceVO;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
public interface TruckTraceService {
......@@ -19,8 +20,21 @@ public interface TruckTraceService {
BigDecimal[] getCurrentPosition(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginDateTime);
int getParkTime(String truckNo, Long userNo, LocalDateTime beginTime, LocalDateTime endTime);
BigDecimal[] getCurrentTruckPosition(String truckNo);
List<List<DriverTraceVO>> splitDriverTrace(List<DriverTraceVO> driverTraceList);
List<DriverTruckTraceVO> calcTruckStayTime(List<DriverTruckTraceVO> traceList);
List<DriverTraceVO> calcDriverStayTime(List<DriverTraceVO> traceList);
List<List<DriverTruckTraceVO>> splitTruckTrace(List<DriverTruckTraceVO> traceList);
void saveTruckTrace(String truckNo,Integer size,String gpsTime);
}
package com.clx.performance.sqlProvider.linewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.linewarn.PageLineWarnConfigParam;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class LineWarnConfigSqlProvider {
private static final String TABLE = "line_warn_config";
public String pageByParam(@Param("page") Page page, @Param("param") PageLineWarnConfigParam param) {
return new SQL(){{
SELECT("*");
FROM(TABLE);
WHERE("delete_status = 0");
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
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())) {WHERE("status = #{param.status}");}
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();
}
}
package com.clx.performance.sqlProvider.linewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.linewarn.LineWarnInfoEnum;
import com.clx.performance.param.pc.linewarn.PageLineWarnInfoParam;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class LineWarnInfoSqlProvider {
private static final String TABLE = "vehicle_warn_info";
public String pageByParam(@Param("page") Page page, @Param("param") PageLineWarnInfoParam param) {
return new SQL(){{
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 (Objects.nonNull(param.getWarnType())) {WHERE("warn_type = #{param.warnType}");}
if (Objects.nonNull(param.getWarnLevel())) {WHERE("warn_level = #{param.warnLevel}");}
if (Objects.nonNull(param.getStatus())) {
if (Objects.equals(param.getStatus(), LineWarnInfoEnum.Status.RESOLVE.getCode())) {
WHERE("status = #{param.status}");
}
else if (Objects.equals(param.getStatus(), LineWarnInfoEnum.Status.INIT.getCode())) {
WHERE("(status = 1 and (suspend_time is null or suspend_time < now()))");
}
else {
WHERE("(status = 1 and(suspend_time is not null and suspend_time > now()))");
}
}
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}");}
ORDER_BY("id desc");
}}.toString();
}
}
......@@ -19,7 +19,7 @@ public class VehicleWarnConfigSqlProvider {
SELECT("*");
FROM(TABLE);
WHERE("delete_status = 0");
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name = #{param.warnName}");}
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
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())) {WHERE("status = #{param.status}");}
......
package com.clx.performance.sqlProvider.vehiclewarn;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.vehiclewarn.VehicleWarnInfoEnum;
import com.clx.performance.param.pc.vehiclewarn.PageVehicleWarnInfoParam;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
......@@ -18,12 +19,23 @@ public class VehicleWarnInfoSqlProvider {
SELECT("*");
FROM(TABLE);
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name = #{param.warnName}");}
if (StringUtils.isNotBlank(param.getWarnName())) {WHERE("warn_name like CONCAT('%', #{param.warnName},'%')");}
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}");}
if (Objects.nonNull(param.getStatus())) {WHERE("status = #{param.status}");}
if (Objects.nonNull(param.getStatus())) {
if (Objects.equals(param.getStatus(), VehicleWarnInfoEnum.Status.RESOLVE.getCode())) {
WHERE("status = #{param.status}");
}
else if (Objects.equals(param.getStatus(), VehicleWarnInfoEnum.Status.INIT.getCode())) {
WHERE("(status = 1 and (suspend_time is null or suspend_time < now()))");
}
else {
WHERE("(status = 1 and(suspend_time is not null and suspend_time > now()))");
}
}
if (StringUtils.isNotBlank(param.getSendAddress())) {WHERE("send_address like CONCAT('%',#{param.sendAddress},'%')");}
if (StringUtils.isNotBlank(param.getReceiveAddress())) {WHERE("receive_address like CONCAT('%',#{param.receiveAddress},'%')");}
......
......@@ -4,12 +4,14 @@ import com.clx.performance.model.collect.CollectTruckWait;
import com.clx.performance.vo.pc.collect.CollectTruckWaitVO;
import com.msl.common.utils.DateStructUtil;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.util.Objects;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {Objects.class})
public interface CollectTruckWaitStruct {
@Mapping(target = "stationTime", source = "stationInTime")
CollectTruckWaitVO convert(CollectTruckWait item);
}
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.model.linewarn.LineWarnConfig;
import com.clx.performance.vo.pc.linewarn.LineWarnConfigVO;
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 LineWarnConfigStruct {
LineWarnConfigVO convert(LineWarnConfig item);
Page<LineWarnConfigVO> convertPage(IPage<LineWarnConfig> page);
}
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.model.linewarn.LineWarnInfo;
import com.clx.performance.vo.pc.linewarn.LineWarnInfoVO;
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 LineWarnInfoStruct {
LineWarnInfoVO convert(LineWarnInfo item);
Page<LineWarnInfoVO> convertPage(IPage<LineWarnInfo> page);
}
......@@ -409,4 +409,9 @@ public class LocalDateTimeUtils {
Duration duration = Duration.between(startTime, endTime);
return duration.getSeconds();
}
public static long betweenMin(LocalDateTime startTime, LocalDateTime endTime){
Duration duration = Duration.between(startTime, endTime);
return duration.toMinutes();
}
}
package com.clx.performance.utils.gd;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.gps.GpsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
@Slf4j
@Component
public class GdUtils {
private static final Integer SEC_FER_MIN = 60;
@Autowired
private GdService gdService;
/**
* 获取需要时间(min)
*/
public int getNeedTime(BigDecimal originLongitude, BigDecimal originLatitude,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(originLongitude, originLatitude, destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
return gdRouteDTOS.get(0).getDuration() /SEC_FER_MIN;
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return 0;
}
/**
* 获取需要时间(min)
*/
public int getNeedTime(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return 0;}
return getNeedTime(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
/**
* 获取需要距离(m)
*/
public int getNeedDistance(BigDecimal[] currentPosition,
BigDecimal destinationLongitude, BigDecimal destinationLatitude){
int needDistance = 0;
if (currentPosition == null) {return 0;}
try {
List<GdRouteDTO> gdRouteDTOS = gdService.getRoute(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
if (!gdRouteDTOS.isEmpty()){
needDistance = gdRouteDTOS.get(0).getDistance();
}
} catch (ServiceSystemException e) {
log.info("获取高德线路失败, msg:{}", e.getMessage());
}
return needDistance;
}
public Integer getDistance(BigDecimal[] currentPosition, BigDecimal destinationLongitude, BigDecimal destinationLatitude) {
if (currentPosition == null) {return null;}
return GpsUtil.distanceM(currentPosition[0], currentPosition[1], destinationLongitude, destinationLatitude);
}
}
package com.clx.performance.utils.zjxl;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.GPSConstants;
import com.clx.performance.dto.zjxl.*;
......@@ -96,7 +97,7 @@ public class ZjxlGpsService {
if (lastLocation == null){return null;}
TruckLocationDTO location = new TruckLocationDTO(lastLocation.getDrc(), lastLocation.getSpd(), lastLocation.getLon(), lastLocation.getLat(), lastLocation.getUtc(),
lastLocation.getProvince(), lastLocation.getCity(), lastLocation.getCountry(), lastLocation.getAdr());
log.info("获取车辆位置成功, truckNo:{}", truckNo);
log.info("获取车辆位置成功, truckNo:{}, location:{}", truckNo, JSONUtil.parse(location));
return location;
}
......@@ -168,7 +169,6 @@ public class ZjxlGpsService {
* 统一post请求
*/
public ZjxlResultDTO postHttps(String api, String token, Map<String, String> map){
if ("dev".equals(active)
|| "test".equals(active)
|| "release".equals(active)) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论