提交 9b67a0ce authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'master' into v20.6_carrier_station_pound_20240802

# Conflicts: # performance-api/src/main/java/com/clx/performance/enums/AppEnum.java # performance-web/pom.xml # performance-web/src/main/java/com/clx/performance/dao/AppDao.java # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/mapper/AppMapper.java # performance-web/src/main/java/com/clx/performance/model/App.java # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<groupId>com.clx.cy</groupId> <groupId>com.clx.cy</groupId>
<artifactId>performance-api</artifactId> <artifactId>performance-api</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>${clx-performance-api.version}</version>
<name>performance-api</name> <name>performance-api</name>
<parent> <parent>
......
...@@ -16,6 +16,7 @@ public enum AppEnum { ...@@ -16,6 +16,7 @@ public enum AppEnum {
public enum UniqueIdentifier { public enum UniqueIdentifier {
SMART_WEIGHT(1, "场站-smart-weight"), SMART_WEIGHT(1, "场站-smart-weight"),
PURCHASE_MANAGE(2, "供应链-purchase-manage"),
; ;
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
@Getter
@AllArgsConstructor
public enum EnabledStatusEnum {
ENABLE(1, "启用"),
DISABLE(0, "禁用"),
;
private final Integer code;
private final String msg;
public static Optional<EnabledStatusEnum> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.code, code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(EnabledStatusEnum::getMsg).orElse(null);
}
}
\ No newline at end of file
...@@ -177,6 +177,14 @@ public enum OrderChildEnum { ...@@ -177,6 +177,14 @@ public enum OrderChildEnum {
); );
public static final List<Integer> CARRIER_CAN_CANCEL_STATUS_LIST = Arrays.asList(
Status.CREATED.getCode(),
Status.GO_TO_SEND.getCode(),
Status.ARRIVE_SEND.getCode()
);
public static ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap(); public static ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap();
static { static {
for(OrderChildEnum.Status for(OrderChildEnum.Status
...@@ -185,4 +193,113 @@ public enum OrderChildEnum { ...@@ -185,4 +193,113 @@ public enum OrderChildEnum {
} }
} }
@Getter
@AllArgsConstructor
public enum OperateRecordType {
CANCEL_ORDER(1, "取消订单"),
REMOVE_LIMIT(2, "解除装车限制"),
;
private final int code;
private final String msg;
public static Optional<OperateRecordType> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(OperateRecordType::getMsg).orElse(null);
}
}
/**
* 驶入驶离货源地状态
*/
@Getter
@AllArgsConstructor
public enum EnterExitSendStatus {
INIT(0, "到达货源地"),
DRIVE_IN(1, "驶入"),
DRIVE_OUT(2, "驶离");
private final Integer code;
private final String name;
public static Optional<EnterExitSendStatus> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(EnterExitSendStatus::getName).orElse(null);
}
}
/**
* 驶离通知状态
*/
@Getter
@AllArgsConstructor
public enum ExitNoticeStatus {
NOT_NOTIFIED(0, "未通知"),
NOTIFIED(1, "已通知");
private final Integer code;
private final String name;
public static Optional<ExitNoticeStatus> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(ExitNoticeStatus::getName).orElse(null);
}
}
/**
* 驶入驶离货源地状态
*/
@Getter
@AllArgsConstructor
public enum RemoveLoadLimitStatus {
NOT_REMOVED(0, "未解除"),
REMOVED(1, "已解除"),
;
private final Integer code;
private final String name;
public static Optional<RemoveLoadLimitStatus> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(RemoveLoadLimitStatus::getName).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum NeedAlertEnum {
OK(0, "不用弹窗"),
FAIL(1, "需要弹");
private final int code;
private final String msg;
}
@Getter
@AllArgsConstructor
public enum SuperviseTypeEnum {
SUPERVISE_LOAD(1, "监装"),
SUPERVISE_UNLOAD(2, "监卸");
private final int code;
private final String msg;
}
} }
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum OrderGoodsEnum {
;
@Getter
@AllArgsConstructor
public enum SendWaitModeEnum {
// 发货-排队系统形式 1:小程序 2:app
WECHAT_PROGRAM(1, "微信小程序"),
APP(2, "app");
private final Integer code;
private final String msg;
public static Optional<SendWaitModeEnum> getByCode(Integer code) {
if (code == null) {
return Optional.empty();
}
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(SendWaitModeEnum::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum SendWaitSystemMsgEnum {
YES(1, "需要"),
NO(0, "不需要");
private final Integer code;
private final String msg;
public static Optional<SendWaitSystemMsgEnum> getByCode(Integer code) {
if (code == null) {
return Optional.empty();
}
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(SendWaitSystemMsgEnum::getMsg).orElse(null);
}
}
public static void main(String[] args) {
System.out.println(SendWaitModeEnum.getMsgByCode(null));
}
}
...@@ -4,6 +4,9 @@ import com.msl.common.enums.ResultEnum; ...@@ -4,6 +4,9 @@ import com.msl.common.enums.ResultEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
...@@ -101,6 +104,20 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -101,6 +104,20 @@ public enum PerformanceResultEnum implements ResultEnum {
APP_POP_UP_DRIVER_RESIDUE_ERROR(-500, "app弹窗提示"), APP_POP_UP_DRIVER_RESIDUE_ERROR(-500, "app弹窗提示"),
/**车主提示语 **/ /**车主提示语 **/
APP_POP_UP_OWNER_RESIDUE_ERROR(-499, "app弹窗提示"), APP_POP_UP_OWNER_RESIDUE_ERROR(-499, "app弹窗提示"),
/**司机未绑卡提示语 **/
APP_POP_UP_DRIVER_NO_BANKCARD_ERROR(-498, "司机未绑卡"),
/**车主未绑卡提示语 **/
APP_POP_UP_OWNER_NO_BANKCARD_ERROR(-497, "车主未绑卡"),
/**司机钱包不存在提示语 **/
APP_POP_UP_DRIVER_WALLET_NULL_NOT_EXIST_ERROR(-494, "司机钱包不存在"),
/**车主钱包不存在提示语 **/
APP_POP_UP_OWNER_WALLET_NULL_NOT_EXIST_ERROR(-493, "车主钱包不存在"),
/**司机未实名 **/
APP_POP_UP_DRIVER_NOT_AUTH(-496, "司机钱包不存在"),
/**车主未实名 **/
APP_POP_UP_OWNER_NOT_AUTH(-495, "车主钱包不存在"),
WALLET_CODE_IS_NULL(1704, "用户钱包不存在"), WALLET_CODE_IS_NULL(1704, "用户钱包不存在"),
ORDER_GOODS_SAVE_FAIL(1801, "保存货单失败,请稍后再试"), ORDER_GOODS_SAVE_FAIL(1801, "保存货单失败,请稍后再试"),
...@@ -169,7 +186,28 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -169,7 +186,28 @@ public enum PerformanceResultEnum implements ResultEnum {
UNLOAD_TIME_BEFORE_ARRIVE_RECEIVE_TIME(2106, "交货时间不可早于到达目的地时间"), UNLOAD_TIME_BEFORE_ARRIVE_RECEIVE_TIME(2106, "交货时间不可早于到达目的地时间"),
UNLOAD_TIME_AFTER_NOW(2107, "交货时间不可晚于当前时间"), UNLOAD_TIME_AFTER_NOW(2107, "交货时间不可晚于当前时间"),
UNLOAD_TIME_AFTER_FIRST_UNLOAD_TIME(2108, "交货时间不可晚于首次提交时间"), UNLOAD_TIME_AFTER_FIRST_UNLOAD_TIME(2108, "交货时间不可晚于首次提交时间"),
/**
* 运单装车限制配置
*/
ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR(2201, "运单装车限制配置错误"),
TRUCK_LOCATION_OUT_OF_SEND_RANGE(2202, "请在货源地%.2f公里范围内上传装车信息"),
ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED(2203, "运单装车限制配置禁用"),
GAODE_DISTANCE_ERROR(2204, "调用高德获取货源地距离失败"),
TRUCK_LOCATION_ERROR(2205, "获取卡车位置失败"),
; ;
private final int code; private final int code;
private final String msg; private final String msg;
public static Optional<PerformanceResultEnum> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code == (code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(PerformanceResultEnum::getMsg).orElse(null);
}
public static PerformanceResultEnum getEnumByCode(Integer code) {
return getByCode(code).orElse(null);
}
} }
...@@ -11,6 +11,7 @@ import com.clx.performance.param.pc.owner.ThawAccountParam; ...@@ -11,6 +11,7 @@ import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.param.pc.owner.UpdateStatusParam; import com.clx.performance.param.pc.owner.UpdateStatusParam;
import com.clx.performance.vo.app.collect.AppCollectTruckVO; import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.clx.performance.vo.feign.FreightEstimateVO; import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO; import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.feign.PlatformServiceFeeConfigFeignVO; import com.clx.performance.vo.feign.PlatformServiceFeeConfigFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO; import com.clx.performance.vo.pc.OwnerAccountAllVO;
...@@ -153,4 +154,16 @@ public interface PerformanceFeign { ...@@ -153,4 +154,16 @@ public interface PerformanceFeign {
*/ */
@GetMapping(value = {"clx-performance/feign/platformServiceFee/getPlatformServiceFeeConfig"}) @GetMapping(value = {"clx-performance/feign/platformServiceFee/getPlatformServiceFeeConfig"})
Result<PlatformServiceFeeConfigFeignVO> getPlatformServiceFeeConfig(); Result<PlatformServiceFeeConfigFeignVO> getPlatformServiceFeeConfig();
@GetMapping(value = {"clx-performance/feign/order/weight/getOrderResidueWeight"})
Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo") String orderNo);
@GetMapping(value = {"clx-performance/feign/order/weight/getOrderCanExtractWeight"})
Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo") String orderNo);
} }
package com.clx.performance.feign; package com.clx.performance.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction; import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction; import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO; import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.vo.pc.OwnerAccountAllVO; import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.PerformanceProgressOperationLogVO;
import com.clx.performance.vo.pc.PerformanceProgressVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO; import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
...@@ -13,6 +17,8 @@ import org.springframework.web.bind.annotation.PostMapping; ...@@ -13,6 +17,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@FeignClient(name = "clx-performance", configuration = PerformanceClientConfiguration.class) @FeignClient(name = "clx-performance", configuration = PerformanceClientConfiguration.class)
public interface PerformanceSDKFeign { public interface PerformanceSDKFeign {
...@@ -34,4 +40,16 @@ public interface PerformanceSDKFeign { ...@@ -34,4 +40,16 @@ public interface PerformanceSDKFeign {
@PostMapping("clx-performance/feign/sdk/getOwnerRuleFile") @PostMapping("clx-performance/feign/sdk/getOwnerRuleFile")
Result<BreakContractOwnerRuleFileVO> getOwnerRuleFile(@RequestBody GetOrderBreakContractOwnerRuleFileAction action); Result<BreakContractOwnerRuleFileVO> getOwnerRuleFile(@RequestBody GetOrderBreakContractOwnerRuleFileAction action);
@GetMapping("clx-performance/feign/sdk/queryPerformanceProgress")
Result<List<PerformanceProgressVO>> queryPerformanceProgress(@RequestBody QueryPerformanceProgressAction action);
@GetMapping("clx-performance/feign/sdk/queryPerformanceProgressLog")
Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action);
@GetMapping(value = {"clx-performance/feign/sdk/getOrderCanExtractWeight"})
Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo") String orderNo);
} }
package com.clx.performance.param.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* 装车范围校验检查参数
*/
@Getter
@Setter
@NoArgsConstructor
public class NeedAlertSuperviseInfoParam {
@ApiModelProperty(value = "运单编号", example = "100000000")
@NotBlank(message = "运单编号不能为空")
private String childNo;
@ApiModelProperty(value = "类型 1-监装 2-监卸", example = "1")
private Integer type;
}
package com.clx.performance.param.app;
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 OrderChildLoadRangeCheckParam {
@ApiModelProperty(value = "运单编号", example = "100000000")
@NotBlank(message = "运单编号不能为空")
private String childNo;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty("经度")
private BigDecimal longitude;
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class ArtificialCancelOrderQueryParam {
@ApiModelProperty("运单编号")
private String orderChildNo;
@ApiModelProperty("车牌号")
private String truckNo;
public void checkParam() {
if (orderChildNo == null && truckNo == null) {
throw new IllegalArgumentException("运单编号和车牌号不能同时为空");
}
}
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class OrderChildCarrierBatchCancelParam {
@ApiModelProperty(value = "运单编号集合", example = "")
@NotEmpty(message = "运单编号集合不能为空")
private List<String> childNoList;
@ApiModelProperty(value = "取消原因", example = "信息错误")
private String remark;
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @author jiangwujie
*/
@Getter
@Setter
public class SaveDriverNoticeConfigParam {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty("配置名称")
private String name;
@ApiModelProperty(value = "通知触发距离:默认1.5,最大9999.9")
private BigDecimal noticeTriggerDistance;
@ApiModelProperty(value = "启用状态 ,0:禁用,1:启用")
private Integer status;
}
\ No newline at end of file
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @author jiangwujie
*/
@Getter
@Setter
public class SaveOrderChildOperateLimitConfigParam {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty("配置名称")
private String name;
@ApiModelProperty("可上传装车信息范围")
private BigDecimal allowUploadDistance;
}
package com.clx.performance.vo.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* 是否需要监装结果VO
*/
@Getter
@Setter
@NoArgsConstructor
public class NeedAlertSuperviseInfoResultVO {
@ApiModelProperty(value = "是否需要弹信息 0 不需要 1 需要", example = "0")
private Integer needAlert;
@ApiModelProperty(value = "监装人", example = "张三")
private String supervisor;
@ApiModelProperty(value = "联系方式", example = "12345678901")
private String mobile;
@ApiModelProperty(value = "监装位置", example = "北业亿林洗煤厂")
private String location;
}
\ No newline at end of file
package com.clx.performance.vo.app;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Objects;
import static com.clx.performance.enums.PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED;
/**
* 是否需要监装结果VO
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class OrderChildLoadRangeCheckResultVO {
@ApiModelProperty(value = "是否需要弹信息 0 不需要 1 需要", example = "0")
private Integer needAlert;
@ApiModelProperty(value = "错误码", example = "-1")
private Integer code;
@ApiModelProperty(value = "错误信息", example = "错误")
private String msg;
public Result<OrderChildLoadRangeCheckResultVO> toResult() {
if (Objects.equals(code, OrderChildEnum.NeedAlertEnum.OK.getCode())
//配置禁用也不弹窗
|| (Objects.equals(code, ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getCode()))
) {
return Result.ok();
} else {
Result<OrderChildLoadRangeCheckResultVO> result = Result.fail(PerformanceResultEnum.getEnumByCode(code));
result.setData(this);
result.setMsg(msg);
return result;
}
}
}
\ No newline at end of file
package com.clx.performance.vo.app; package com.clx.performance.vo.app;
import cn.hutool.json.JSONUtil;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsEnum;
import com.msl.common.convertor.type.MoneyOutConvert; import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -8,10 +10,12 @@ import lombok.Getter; ...@@ -8,10 +10,12 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -230,4 +234,61 @@ public class OrderChildVO { ...@@ -230,4 +234,61 @@ public class OrderChildVO {
@ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示") @ApiModelProperty("接单保证金 平台服务费费率 弹窗和文案显示 0 不显示 1 显示")
private Integer goodsOrderDetailShow = 0; private Integer goodsOrderDetailShow = 0;
} /* 20240730 增加货源地信息 */
\ No newline at end of file
@ApiModelProperty(value = "货源地现场联系人")
private String sendContact;
@ApiModelProperty(value = "货源地联系人手机号")
private String sendContactPhone;
@ApiModelProperty(value = "发货-是否需要系统排队 0 否 1 是")
private Integer sendWaitSystem;
@ApiModelProperty(value = "发货-是否需要系统排队 描述: 需要 不需要")
public String getSendWaitSystemMsg() {
return OrderGoodsEnum.SendWaitSystemMsgEnum.getMsgByCode(sendWaitSystem);
}
@ApiModelProperty(value = "发货-排队系统名称")
private String sendWaitSystemName;
@ApiModelProperty(value = "发货-排队系统形式 1:小程序 2:app")
private Integer sendWaitMode;
@ApiModelProperty(value = "发货-排队系统形式 描述: 微信小程序 app")
public String getSendWaitModeMsg() {
return OrderGoodsEnum.SendWaitModeEnum.getMsgByCode(sendWaitMode);
}
@ApiModelProperty(value = "发货采样位置")
private String sendQualityPosition;
@ApiModelProperty(value = "发货地采样视频")
private String sendSamplingVideo;
@ApiModelProperty(value = "发货地采样照片")
private String sendSamplingPic;
@ApiModelProperty(value = "监装联系人")
private String superviseContacts;
@ApiModelProperty(value = "监装联系人电话")
private String superviseMobile;
@ApiModelProperty(value = "是否解除监装限制 0 未解除 1 解除")
private Integer removeLoadLimitStatus;
@ApiModelProperty(value = "发货地采样照片")
public List<String> getSendSamplingPicList() {
if (StringUtils.isNotBlank(sendSamplingPic)) {
return JSONUtil.toList(sendSamplingPic, String.class);
}
return new ArrayList<>();
}
@ApiModelProperty(value = "发货地采样视频")
public List<String> getSendSamplingVideoList() {
if (StringUtils.isNotBlank(sendSamplingVideo)) {
return JSONUtil.toList(sendSamplingVideo, String.class);
}
return new ArrayList<>();
}
}
...@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
...@@ -29,6 +29,11 @@ public class OrderGoodsAPPVO { ...@@ -29,6 +29,11 @@ public class OrderGoodsAPPVO {
@ApiModelProperty("剩余拉运吨数") @ApiModelProperty("剩余拉运吨数")
private String residueTransportWeight; private String residueTransportWeight;
public String getResidueTransportWeight(){
return new BigDecimal(extractWeight).subtract(StringUtils.isNotBlank(alreadyTransportWeight)
?new BigDecimal(alreadyTransportWeight):BigDecimal.ZERO).toString();
}
@ApiModelProperty("已拉运吨数") @ApiModelProperty("已拉运吨数")
private String alreadyTransportWeight; private String alreadyTransportWeight;
......
package com.clx.performance.vo.feign;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
/**
* @ClassName OrderExtractWeightVO
* @Description
* @Author kavin
* @Date 2024/8/5 11:54
* @Version 1.0
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderExtractWeightVO {
@ApiModelProperty("用车需求: 1平台车辆 2部分平台车辆 3自有车辆")
private Integer truckDemand;
@ApiModelProperty(value = "拉运吨数")
private BigDecimal transportWeight;
@ApiModelProperty("可提取吨数")
private BigDecimal canExtractWeight;
@ApiModelProperty("平台承运吨数")
private BigDecimal platformCarryWeight;
@ApiModelProperty("自有承运吨数")
private BigDecimal ownCarryWeight;
@ApiModelProperty("平台可提取吨数")
private BigDecimal platCanExtractWeight;
@ApiModelProperty("自有可提取吨数")
private BigDecimal ownCanExtractWeight;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
/**
* 司机通知配置
* @author jiangwujie
*/
@Getter
@Setter
@ToString
public class DriverNoticeConfigVO {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty("配置名称")
private String name;
@ApiModelProperty(value = "通知触发距离:默认1.5,最大9999.9")
private BigDecimal noticeTriggerDistance;
@ApiModelProperty(value = "启用状态:0禁用 1启用")
private Integer status;
public Integer getNoticeTriggerDistanceMeter() {
return noticeTriggerDistance != null ? noticeTriggerDistance.multiply(new BigDecimal(1000)).intValue() : 0;
}
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @author yangqifa
*/
@Getter
@Setter
@ToString
public class OrderChildOperateLimitConfigVO {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty("配置名称")
private String name;
@ApiModelProperty("可上传装车信息范围:默认2.0,最大9999.9")
private BigDecimal allowUploadDistance;
@ApiModelProperty(value = "启用状态 0 禁用 1 启用")
private Integer status;
public Integer allowUploadDistanceMeter() {
return allowUploadDistance.multiply(new BigDecimal(1000)).intValue();
}
}
package com.clx.performance.vo.pc;
import com.clx.performance.enums.OrderChildEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OrderChildOperateRecordVO {
@ApiModelProperty(value = "运单编号", example = "100000000")
private String childNo;
@ApiModelProperty(value = "操作类型 1 取消运单 2 解除装车限制", example = "1")
private Integer type;
@ApiModelProperty(value = "主车牌照", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "司机名称", example = "张三")
private String driverName;
@ApiModelProperty(value = "联系方式", example = "130000000")
private String driverMobile;
@ApiModelProperty(value = "货源地", example = "朝阳")
private String sendAddress;
@ApiModelProperty(value = "目的地", example = "西城")
private String receiveAddress;
@ApiModelProperty(value = "货物类型名称", example = "面煤")
public String goodTypeName;
@ApiModelProperty(value = "备注", example = "备注xxxx")
public String remark;
@ApiModelProperty(value = "操作时间", example = "2020-01-01 10:10:10")
public String operateTime;
@ApiModelProperty(value = "操作人", example = "张三")
public String operator;
@ApiModelProperty(value = "操作类型 取消运单 解除装车限制", example = "取消运单")
public String getTypeMsg() {
return OrderChildEnum.OperateRecordType.getMsgByCode(type);
}
}
\ No newline at end of file
...@@ -30,4 +30,12 @@ public class OrderChildPCVO { ...@@ -30,4 +30,12 @@ public class OrderChildPCVO {
@ApiModelProperty("司机手机号") @ApiModelProperty("司机手机号")
private String driverMobile; private String driverMobile;
@ApiModelProperty("接单时间")
private String createTime;
@ApiModelProperty("完成时间")
private String finishTime;
} }
\ No newline at end of file
package com.clx.performance.vo.pc; package com.clx.performance.vo.pc;
import com.clx.performance.enums.OrderGoodsEnum;
import com.msl.common.convertor.type.MoneyOutConvert; import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
...@@ -169,4 +170,35 @@ public class OrderGoodsVO { ...@@ -169,4 +170,35 @@ public class OrderGoodsVO {
@ApiModelProperty("已派单数") @ApiModelProperty("已派单数")
private Integer dispatchedOrders; private Integer dispatchedOrders;
/* 20240730 增加货源地信息 */
@ApiModelProperty(value = "货源地现场联系人")
private String sendContact;
@ApiModelProperty(value = "货源地联系人手机号")
private String sendContactPhone;
@ApiModelProperty(value = "发货-是否需要系统排队 0 否 1 是")
private Integer sendWaitSystem;
@ApiModelProperty(value = "发货-是否需要系统排队 描述: 需要 不需要")
public String getSendWaitSystemMsg() {
return OrderGoodsEnum.SendWaitSystemMsgEnum.getMsgByCode(sendWaitSystem);
}
@ApiModelProperty(value = "发货-排队系统名称")
private String sendWaitSystemName;
@ApiModelProperty(value = "发货-排队系统形式 1:小程序 2:app")
private Integer sendWaitMode;
@ApiModelProperty(value = "发货-排队系统形式 描述: 微信小程序 app")
public String getSendWaitModeMsg() {
return OrderGoodsEnum.SendWaitModeEnum.getMsgByCode(sendWaitMode);
}
@ApiModelProperty("当前货单总吨数是否超过总拉运量 1:超过 ")
private Integer overOrderWeight;
} }
\ No newline at end of file
package com.clx.performance.vo.pc.child;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @ClassName UpdateCarrierBatchCancelVO
* @Description
* @Author kavin
* @Date 2024/8/6 15:17
* @Version 1.0
*/
@Getter
@Setter
public class UpdateCarrierBatchCancelVO {
@ApiModelProperty("成功取消运单数量")
private Integer successCount;
@ApiModelProperty("失败的运单编号集合")
private List<String> failChildNoList;
}
...@@ -103,6 +103,12 @@ ...@@ -103,6 +103,12 @@
<artifactId>smart-weight-sdk</artifactId> <artifactId>smart-weight-sdk</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.clx.cy</groupId>
<artifactId>purchase-manage-sdk</artifactId>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.msl</groupId>--> <!-- <groupId>com.msl</groupId>-->
<!-- <artifactId>cache-spring-boot-starter</artifactId>--> <!-- <artifactId>cache-spring-boot-starter</artifactId>-->
......
...@@ -99,23 +99,6 @@ public class GoodsOrderTruckRecordComponent { ...@@ -99,23 +99,6 @@ public class GoodsOrderTruckRecordComponent {
} }
orderGoodsTruckBindDao.updateOrderGoodsBindStatusExpire(orderGoodsNo, truckNo); orderGoodsTruckBindDao.updateOrderGoodsBindStatusExpire(orderGoodsNo, truckNo);
}
//货单剩余吨数低于35吨时,自动恢复到订单,并释放未接单车辆
public void releaseOrderGoodsDriverAndTruck(String orderGoodsNo) {
List<OrderGoodsTruckBind> truckBindList = orderGoodsTruckBindDao.selectListByOrderGoodsNo(orderGoodsNo);
List<Integer> ids = new ArrayList<>();
for (OrderGoodsTruckBind bind : truckBindList) {
if (Objects.equals(OrderGoodsTruckBindEnum.Status.NORMAL.getCode(),bind.getStatus())) {
ids.add(bind.getId());
this.deleteTruckRecord(orderGoodsNo, bind.getTruckNo());
}
}
//释放车辆bind
if(CollectionUtils.isNotEmpty(ids)){
log.info("定向单进行车辆释放,货单编号:{},释放的绑定车辆的id集合:{}",orderGoodsNo,ids);
orderGoodsTruckBindDao.updateTruckBindExpire(ids);
}
} }
public Set<String> getFleetPublicTruckList(String orderGoodsNo) { public Set<String> getFleetPublicTruckList(String orderGoodsNo) {
......
...@@ -3,11 +3,9 @@ package com.clx.performance.component; ...@@ -3,11 +3,9 @@ package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.clx.order.enums.OrderEnum; import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum; import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam; import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
...@@ -25,7 +23,6 @@ import com.clx.performance.service.OrderGoodsTruckBindService; ...@@ -25,7 +23,6 @@ import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService; import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
...@@ -161,7 +158,9 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -161,7 +158,9 @@ public class OrderCancelComponent implements InitializingBean {
reduce = reduce.add(orderChild.getWeight()); reduce = reduce.add(orderChild.getWeight());
} }
if (orderGoods.getExtractWeight().compareTo(orderGoods.getResidueTransportWeight().add(reduce)) == 0) { BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (orderGoods.getExtractWeight().compareTo(residueTransportWeight.add(reduce)) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else { } else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode(); orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
...@@ -191,7 +190,11 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -191,7 +190,11 @@ public class OrderCancelComponent implements InitializingBean {
for (OrderGoods orderGoods : orderGoodsList) { for (OrderGoods orderGoods : orderGoodsList) {
OrderGoods update = new OrderGoods(); OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId()); update.setId(orderGoods.getId());
if (orderGoods.getResidueTransportWeight().compareTo(orderGoods.getExtractWeight()) == 0) {
BigDecimal residueTransportWeight = orderGoodsService.calcOrderGoodsResidueWeight
(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());
if (residueTransportWeight.compareTo(orderGoods.getExtractWeight()) == 0) {
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.CANCEL.getCode());
} else { } else {
orderStatusCode = OrderEnum.Status.COMPLETED.getCode(); orderStatusCode = OrderEnum.Status.COMPLETED.getCode();
...@@ -279,83 +282,6 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -279,83 +282,6 @@ public class OrderCancelComponent implements InitializingBean {
} }
} }
/**
* @Author kavin
* @Description 货单低于35吨自动归还吨数到订单/货单吨数不够扣减,从订单上借吨数
* @Param [orderGoods, weight,updateType(1: 增加 2:减少)]
* @return
**/
public void backFillOrderWeight(OrderGoods orderGoods, BigDecimal weight, Integer updateType) {
Integer truckDemand = orderGoods.getTruckDemand();
java.util.Optional<UpdateEnum> byCode1 = UpdateEnum.getByCode(updateType);
String updateTypeMsg = byCode1.isPresent()?byCode1.get().getMsg():"未知调整类型";
java.util.Optional<TruckDemandEnum.TruckType> byCode = TruckDemandEnum.TruckType.getByCode(truckDemand);
String truckDemandValue = byCode.isPresent()?byCode.get().getMsg():"未知用车需求";
log.info("订单号:{},货单号:{},用车需求:{},进行订单剩余吨数{} ,调整吨数:{}",
orderGoods.getOrderNo(),orderGoods.getOrderGoodsNo(),truckDemandValue,updateTypeMsg,weight);
String orderNo = orderGoods.getOrderNo();
Optional<FeignOrderInfoVO> optional = orderService.getOrderInfo(orderNo);
if(!optional.isPresent()){
log.warn("通过订单号未查询到对应的订单信息,订单号:{}",orderNo);
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
FeignOrderInfoVO orderInfo = optional.get();
boolean isSub = Objects.equals(UpdateEnum.SUB.getCode(), updateType);
RollbackOrderWeightParam rollbackOrderWeightParam = new RollbackOrderWeightParam();
rollbackOrderWeightParam.setOrderNo(orderGoods.getOrderNo());
rollbackOrderWeightParam.setResidueWeight(weight);
rollbackOrderWeightParam.setUpdateType(updateType);
//归还吨数
if (!truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getCode())) {
if (truckDemand.equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())) {
if(isSub && weight.compareTo(orderInfo.getResidueWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),orderInfo.getPlatformResidueCarryWeight()
,weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
} else if (truckDemand.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
if(isSub && weight.compareTo(orderInfo.getResidueWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),orderInfo.getOwnResidueCarryWeight()
,weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
}
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (Objects.equals(orderGoods.getVehicleUsage(),VehicleUsageEnum.Status.OWN.getCode())) {
if(isSub && weight.compareTo(orderInfo.getOwnResidueCarryWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},自有剩余吨数:{},需要扣减吨数:{},不足扣减",
TruckDemandEnum.TruckType.PLATFORM_ANY_CAR.getMsg(),orderNo,orderGoods.getOrderGoodsNo(),
orderInfo.getOwnResidueCarryWeight(),weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
rollbackOrderWeightParam.setPlatformResidueCarryWeight(BigDecimal.ZERO);
rollbackOrderWeightParam.setOwnResidueCarryWeight(weight);
} else {
if(isSub && weight.compareTo(orderInfo.getPlatformResidueCarryWeight()) > 0 ){
log.warn("货单用车需求: {},订单号:{},货单号:{},平台剩余吨数:{},需要扣减吨数:{},不足扣减",
truckDemandValue,orderNo,orderGoods.getOrderGoodsNo(),
orderInfo.getPlatformResidueCarryWeight(),weight);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
rollbackOrderWeightParam.setPlatformResidueCarryWeight(weight);
rollbackOrderWeightParam.setOwnResidueCarryWeight(BigDecimal.ZERO);
}
}
Result<Object> result = orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
if (!result.succeed()) {
log.warn("订单号:{} 的订单做吨数调整,对应货单号:{} 调整失败,调整吨数:{},调整类型:{}",
orderNo,orderGoods.getOrderGoodsNo(),weight,updateTypeMsg);
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
}
/** /**
* 客服取消归还吨数 * 客服取消归还吨数
* *
...@@ -400,7 +326,6 @@ public class OrderCancelComponent implements InitializingBean { ...@@ -400,7 +326,6 @@ public class OrderCancelComponent implements InitializingBean {
} }
ArrayList<OrderGoods> list = new ArrayList<>(); ArrayList<OrderGoods> list = new ArrayList<>();
list.add(orderGoods); list.add(orderGoods);
orderGoodsService.batchUpdateResidueWeight(list);
} else { } else {
//返回到货单 //返回到货单
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId()); orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(weight, weight, orderGoods.getId());
......
package com.clx.performance.component; package com.clx.performance.component;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.param.feign.RollbackOrderWeightParam;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao; import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService; import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService; import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.utils.spring.ApplicationContextUtils;
import com.clx.user.enums.driver.DriverInfoEnum; import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
...@@ -30,7 +33,9 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -30,7 +33,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/** /**
* 货单最晚接单时间、最晚到达货源地时间处理 * 货单最晚接单时间、最晚到达货源地时间处理
...@@ -61,6 +66,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -61,6 +66,7 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final OrderChildPostService orderChildPostService; private final OrderChildPostService orderChildPostService;
//根据货单最晚接单时间处理 //根据货单最晚接单时间处理
public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) { public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) {
redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()); redisTemplate.opsForZSet().add(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, orderGoodsNo, localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
...@@ -90,7 +96,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -90,7 +96,6 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
public void consumingLastOrderTime() { public void consumingLastOrderTime() {
log.info("货单-最晚接单时间-定时器启动"); log.info("货单-最晚接单时间-定时器启动");
long nowTimeMillis = System.currentTimeMillis(); long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores( Set<ZSetOperations.TypedTuple<String>> orderGoodsIds = redisTemplate.opsForZSet().rangeByScoreWithScores(
RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME, RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ORDER_TIME,
0, nowTimeMillis //延时任务score最小值 0, nowTimeMillis //延时任务score最小值
...@@ -118,11 +123,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -118,11 +123,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
continue; continue;
} }
OrderGoods orderGoods = optional.get(); OrderGoods orderGoods = optional.get();
// if(Objects.equals(orderGoods.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CANCEL.getCode())){ BigDecimal residueTransportWeight = ApplicationContextUtils.getBean(OrderGoodsService.class).
// continue; calcOrderGoodsResidueWeight(orderGoods.getExtractWeight(),orderGoods.getAlreadyTransportWeight());;
// }
if (orderGoods.getResidueTransportWeight().compareTo(BigDecimal.ZERO) == 0) { if (residueTransportWeight.compareTo(BigDecimal.ZERO) <= 0) {
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo); List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildByOrderGoodsNo(orderGoodsNo);
if (CollectionUtil.isNotEmpty(orderChildren)) { if (CollectionUtil.isNotEmpty(orderChildren)) {
//更新货单已完结 //更新货单已完结
...@@ -134,33 +138,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -134,33 +138,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode()); orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.SUCCESS.getCode());
} }
} else { } else {
OrderGoods update = new OrderGoods(); OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId()); update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode()); update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//大于35吨的归还吨数在这里处理
if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(orderGoods.getResidueTransportWeight());
if (orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.PLATFORM_CAR.getCode())
|| orderGoods.getTruckDemand().equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
orderFeign.rollbackOrderWeight(param);
//更新剩余吨数
update.setResidueTransportWeight(BigDecimal.ZERO);
}
//更新已完结 //更新已完结
orderGoodsDao.updateEntityByKey(update); orderGoodsDao.updateEntityByKey(update);
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue()); log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
...@@ -238,35 +219,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean { ...@@ -238,35 +219,10 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统自动取消,未按照最晚装货时间到达货源地", now, now, childNoList); orderChildDao.batchUpdateOrderChildStatus(OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), "系统自动取消,未按照最晚装货时间到达货源地", now, now, childNoList);
} }
//更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
//当前货单已经到了最晚接单时间,所有相关状态均已经处理完毕,此刻单独处理运单的数据
if (OrderGoodsStatusEnum.Status.SUCCESS.getCode().equals(orderGoods.getOrderGoodsStatus())
|| OrderGoodsStatusEnum.Status.COMPLETED.getCode().equals(orderGoods.getOrderGoodsStatus())
) {
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
param.setOrderNo(orderGoods.getOrderNo());
param.setResidueWeight(childSum);
//当前情况需要回填订单的余量
if (orderGoods.getTruckDemand().equals(1) || orderGoods.getTruckDemand().equals(3)) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
} else {
if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.PLATFORM.getCode())) {
param.setOwnResidueCarryWeight(BigDecimal.ZERO);
param.setPlatformResidueCarryWeight(orderGoods.getResidueTransportWeight());
} else if (orderGoods.getVehicleUsage().equals(VehicleUsageEnum.Status.OWN.getCode())) {
param.setOwnResidueCarryWeight(orderGoods.getResidueTransportWeight());
param.setPlatformResidueCarryWeight(BigDecimal.ZERO);
}
}
//只更新货单已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
orderFeign.rollbackOrderWeight(param);
} else {
//只更新货单未拉运吨数,已拉运吨数
orderGoodsDao.updateOrderGoodsSetResidueWeightAndAlreadyWeight(childSum, childSum, orderGoods.getId());
}
redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue()); redisTemplate.opsForZSet().remove(RedisConstants.ORDER_GOODS_STATUS_LAZY_LAST_ARRIVE_SEND_TIME, orderGoodsId.getValue());
......
...@@ -35,5 +35,13 @@ public class ClxMessageConfig { ...@@ -35,5 +35,13 @@ public class ClxMessageConfig {
private Integer vehicleWarnChannelId; private Integer vehicleWarnChannelId;
//线路报警短信模板 //线路报警短信模板
private String lineWarnTemplateCode; private String lineWarnTemplateCode;
/**
* 上传装货信息短信模板
*/
private String uploadLoadInfoTemplateCode;
/**
* 提示监装信息短信模板
*/
private String noticeSupervisionTemplateCode;
} }
package com.clx.performance.config;
import com.clx.performance.dao.AppDao;
import com.clx.performance.enums.AppEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.App;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author liruixin
* @create 2024-01-10 13:19
*/
@Component
public class LoadAppConfig {
private App purchaseManageApp;
@Autowired
private AppDao appDao;
public App getPurchaseManageApp() {
if (purchaseManageApp == null) {
purchaseManageApp = appDao.getOneByField(App::getUniqueIdentifier, AppEnum.UniqueIdentifier.PURCHASE_MANAGE.getCode()).orElseThrow(
PerformanceResultEnum.DATA_NOT_FIND);;
}
return purchaseManageApp;
}
}
package com.clx.performance.constant;
import java.math.BigDecimal;
/**
* @ClassName BusinessConstants
* @Description
* @Author kavin
* @Date 2024/7/22 15:26
* @Version 1.0
*/
public class BusinessConstants {
//承运订单需要减去的吨数
public static final BigDecimal ORDER_SUB_WEIGHT = new BigDecimal("35");
}
...@@ -42,4 +42,19 @@ public class RedisConstants { ...@@ -42,4 +42,19 @@ public class RedisConstants {
*/ */
public static final String LINE_WARN_WEATHER = "clx-performance:lineWarn:weather:"; public static final String LINE_WARN_WEATHER = "clx-performance:lineWarn:weather:";
/**
* 电子围栏短信通知 未装车
*/
public static final String NOTICE_MESSAGE_LIMIT_UNLOAD = "clx-performance:notice_message_limit_unload:";
/**
* 电子围栏短信通知 未监装
*/
public static final String NOTICE_MESSAGE_LIMIT_UNSUPERVISED = "clx-performance:notice_message_limit_unsupervised:";
/**
* 订单最后一车
*/
public static final String ORDER_LAST_TRUCK_CHILD = "clx-performance:order:last:truck:child:";
} }
...@@ -16,4 +16,9 @@ public class RedissonConstants { ...@@ -16,4 +16,9 @@ public class RedissonConstants {
public static final String OWNER_LOAN_EVENT_USERID_LOCK = "clx-performance:ownerLoanEvent:ownerUserId:"; public static final String OWNER_LOAN_EVENT_USERID_LOCK = "clx-performance:ownerLoanEvent:ownerUserId:";
public static final String CALC_ORDER_LAST_TRUCK_LOCK = "clx-performance:order:last:truck:orderNo:";
} }
...@@ -195,4 +195,20 @@ public class AppDriverOrderChildController { ...@@ -195,4 +195,20 @@ public class AppDriverOrderChildController {
return Result.ok(orderChildService.ocrRecognition(param)); return Result.ok(orderChildService.ocrRecognition(param));
} }
@ApiOperation(value = "司机端装货范围检查拦截", notes = "<br>By:姜武杰")
@PostMapping("/loadRangeCheck")
public Result<OrderChildLoadRangeCheckResultVO> loadRangeCheck(@RequestBody @Validated OrderChildLoadRangeCheckParam param) {
return orderChildService.loadRangeCheck(param).toResult();
}
@ApiOperation(value = "是否需要弹出监装信息", notes = "<br>By:姜武杰")
@PostMapping("/needAlertSuperviseInfo")
public Result<NeedAlertSuperviseInfoResultVO> needAlertSuperviseInfo(@RequestBody @Validated NeedAlertSuperviseInfoParam param) {
// todo :jiangwujie 临时设置type 前端给type后删除
if (param.getType() == null) {
param.setType(1);
}
return Result.ok(orderChildService.needAlertSuperviseInfo(param));
}
} }
package com.clx.performance.controller.feign;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/feign/order/weight")
@Validated
@Api(tags = "订单量查询")
@AllArgsConstructor
public class OrderWeightFeignController {
private final OrderWeightService orderWeightService;
@ApiOperation(value = "查询订单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderCanExtractWeight(orderNo));
}
@ApiOperation(value = "查询订单剩余量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderResidueWeight")
public Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderResidueWeight(orderNo));
}
}
package com.clx.performance.controller.feign; package com.clx.performance.controller.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction; import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction; import com.clx.open.sdk.request.action.GetOwnerAccountInfoAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO; import com.clx.open.sdk.request.dto.OwnerCancelResidueWeightDTO;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderGoodsService; import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.service.OwnerAccountService; import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.PerformanceProgressService;
import com.clx.performance.service.breakcontract.BreakContractOwnerRuleService; import com.clx.performance.service.breakcontract.BreakContractOwnerRuleService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO; import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.PerformanceProgressOperationLogVO;
import com.clx.performance.vo.pc.PerformanceProgressVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO; import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
...@@ -16,10 +24,15 @@ import io.swagger.annotations.Api; ...@@ -16,10 +24,15 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import static com.clx.performance.enums.PerformanceProgressEnum.LogType.PERFORMANCE_ABNORMAL_REASON;
import javax.validation.constraints.NotBlank;
@Slf4j @Slf4j
@RestController @RestController
...@@ -38,6 +51,12 @@ public class PerformanceSdkFeignController { ...@@ -38,6 +51,12 @@ public class PerformanceSdkFeignController {
private final BreakContractOwnerRuleService breakContractOwnerRuleService; private final BreakContractOwnerRuleService breakContractOwnerRuleService;
private final OrderWeightService orderWeightService;
private final PerformanceProgressService performanceProgressService;
@ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆") @ApiOperation(value = "货主端取消订单", notes = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre") @PostMapping("/ownCancelOrderPre")
...@@ -67,4 +86,26 @@ public class PerformanceSdkFeignController { ...@@ -67,4 +86,26 @@ public class PerformanceSdkFeignController {
return Result.ok(breakContractOwnerRuleService.getRuleFile(action.getId())); return Result.ok(breakContractOwnerRuleService.getRuleFile(action.getId()));
} }
@ApiOperation(value = "查询履约进度", notes = "<br>By:杨启发")
@GetMapping("/queryPerformanceProgress")
Result<List<PerformanceProgressVO>> queryPerformanceProgress(@RequestBody QueryPerformanceProgressAction action){
return Result.ok(performanceProgressService.queryPerformanceProgress(action.getOrderNoList()));
}
@ApiOperation(value = "查询履约进度操作日志", notes = "<br>By:杨启发")
@GetMapping("/queryPerformanceProgressLog")
Result<List<PerformanceProgressOperationLogVO>> queryPerformanceProgressLog(@RequestBody QueryPerformanceProgressLogAction action){
return Result.ok(performanceProgressService.getOperationLog(action.getOrderNo(),PERFORMANCE_ABNORMAL_REASON.getCode()));
}
@ApiOperation(value = "获取当前订单的可提取吨数", notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderCanExtractWeightDTO> getOrderCanExtractWeight(@RequestParam(value = "orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(orderNo);
OrderCanExtractWeightDTO data = new OrderCanExtractWeightDTO();
BeanUtils.copyProperties(orderCanExtractWeight,data);
return Result.ok(data);
}
} }
...@@ -2,11 +2,13 @@ package com.clx.performance.controller.pc; ...@@ -2,11 +2,13 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.pc.OrderChildCarrierBatchCancelParam;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam; import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam; import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam; import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.OrderChildService;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result; import com.msl.common.result.Result;
...@@ -127,4 +129,11 @@ public class CarrierOrderChildController { ...@@ -127,4 +129,11 @@ public class CarrierOrderChildController {
} }
@ApiOperation(value = "批量取消运单", notes = "<br>By:刘海泉")
@PostMapping("/updateCarrierBatchCancel")
public Result<UpdateCarrierBatchCancelVO> updateCarrierBatchCancel(@RequestBody @Validated OrderChildCarrierBatchCancelParam param) {
return Result.ok(orderChildService.updateCarrierBatchCancel(param));
}
} }
package com.clx.performance.controller.pc;
import com.clx.performance.param.pc.SaveDriverNoticeConfigParam;
import com.clx.performance.service.DriverNoticeConfigService;
import com.clx.performance.vo.pc.DriverNoticeConfigVO;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
/**
* @author jiangwujie
*/
@Slf4j
@RestController
@RequestMapping(value = "/pc/carrier/driverNoticeConfig")
@Validated
@Api(tags = "司机通知配置")
@AllArgsConstructor
public class DriverNoticeConfigController {
private final DriverNoticeConfigService driverNoticeConfigService;
@ApiOperation(value = "司机通知配置列表", notes = "<br>By:姜武杰")
@GetMapping("/listConfig")
@UnitCovert(param = false)
public Result<DriverNoticeConfigVO> listConfig() {
return Result.ok(driverNoticeConfigService.listConfig());
}
@ApiOperation(value = "司机通知配置详情", notes = "<br>By:姜武杰")
@GetMapping("/getDetail")
@UnitCovert(param = false)
public Result<DriverNoticeConfigVO> getDetail(@NotNull(message = "id不能为空") Integer id) {
return Result.ok(driverNoticeConfigService.getDetail(id));
}
@ApiOperation(value = "编辑司机通知配置", notes = "<br>By:姜武杰")
@PostMapping("/update")
@UnitCovert
public Result updateConfig(@RequestBody @Validated SaveDriverNoticeConfigParam param) {
driverNoticeConfigService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "司机通知配置启用", notes = "<br>By:姜武杰")
@PostMapping("/enable")
@UnitCovert
public Result enableConfig(@ApiParam("id") @RequestParam("id") @NotNull(message = "id不能为空") @Validated Integer id) {
driverNoticeConfigService.enableConfig(id);
return Result.ok();
}
@ApiOperation(value = "司机通知配置禁用", notes = "<br>By:姜武杰")
@PostMapping("/disable")
@UnitCovert
public Result disableConfig(@ApiParam("id") @RequestParam("id") @NotNull(message = "id不能为空") Integer id) {
driverNoticeConfigService.disableConfig(id);
return Result.ok();
}
}
...@@ -7,10 +7,8 @@ import com.clx.performance.component.GoodsOrderStrategyContext; ...@@ -7,10 +7,8 @@ import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.constant.RedisConstants; import com.clx.performance.constant.RedisConstants;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.*; import com.clx.performance.param.pc.*;
import com.clx.performance.service.OrderChildService; import com.clx.performance.service.*;
import com.clx.performance.service.OrderGoodsAdjustmentPriceService; import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
...@@ -71,6 +69,9 @@ public class GoodsOrderController { ...@@ -71,6 +69,9 @@ public class GoodsOrderController {
@Autowired @Autowired
private OrderGoodsAdjustmentPriceService orderGoodsAdjustmentPriceService; private OrderGoodsAdjustmentPriceService orderGoodsAdjustmentPriceService;
@Autowired
private OrderWeightService orderWeightService;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆") @ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder") @PostMapping("/saveGoodsOrder")
@UnitCovert(result = false) @UnitCovert(result = false)
...@@ -88,7 +89,11 @@ public class GoodsOrderController { ...@@ -88,7 +89,11 @@ public class GoodsOrderController {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo); FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
//1平台车辆 2部分平台车辆 3自有车辆 //1平台车辆 2部分平台车辆 3自有车辆
Integer truckDemand = orderInfo.getTruckDemand(); Integer truckDemand = orderInfo.getTruckDemand();
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo, now, rabbitTemplate);
OrderExtractWeightVO orderCanExtractWeight = orderWeightService.getOrderCanExtractWeight(orderNo);
goodsOrderStrategyContext.strategyContext.get(truckDemand).saveGoodsOrder(orderGoodsParams, orderInfo,
orderCanExtractWeight,now);
} catch (Exception e) { } catch (Exception e) {
log.info(e.getMessage()); log.info(e.getMessage());
......
package com.clx.performance.controller.pc;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/lastTruck")
@Validated
@Api(tags = "最后一车")
@AllArgsConstructor
public class LastTruckController {
private final LastTruckService lastTruckService;
private final OrderChildStruct orderChildStruct;
@ApiOperation(value = "查询订单下的最后一车",notes = "<br>By:刘海泉")
@GetMapping("/getOrderLastTruck")
public Result<OrderChildVO> getOrderLastTruck(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) throws Exception{
OrderChild child = lastTruckService.getOrderLastTruck(orderNo);
return Result.ok(orderChildStruct.convert(child));
}
}
...@@ -2,24 +2,19 @@ package com.clx.performance.controller.pc; ...@@ -2,24 +2,19 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.param.pc.ArtificialCancelOrderParam; import com.clx.performance.param.pc.ArtificialCancelOrderParam;
import com.clx.performance.param.pc.ArtificialCancelOrderQueryParam;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam; import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.service.OrderCancelService; import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -50,8 +45,8 @@ public class OrderCancelController { ...@@ -50,8 +45,8 @@ public class OrderCancelController {
@ApiOperation(value = "客服取消运单查询", notes = "<br>By:胡宇帆") @ApiOperation(value = "客服取消运单查询", notes = "<br>By:胡宇帆")
@GetMapping("/findArtificialCancelOrder") @GetMapping("/findArtificialCancelOrder")
public Result<OrderChildVO> findArtificialCancelOrder(@RequestParam String orderChildNo) { public Result<OrderChildVO> findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
OrderChildVO vo = orderCancelService.findArtificialCancelOrder(orderChildNo); OrderChildVO vo = orderCancelService.findArtificialCancelOrder(param);
return Result.ok(vo); return Result.ok(vo);
} }
...@@ -70,5 +65,19 @@ public class OrderCancelController { ...@@ -70,5 +65,19 @@ public class OrderCancelController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages()); return Result.page(page.getRecords(), page.getTotal(), page.getPages());
} }
@ApiOperation(value = "运单处理记录", notes = "<br>By:姜武杰")
@PostMapping("/orderChildOperateRecord")
public Result<PageData<OrderChildOperateRecordVO>> orderChildOperateRecord(@RequestBody OrderChildCancelRecordParam param) {
IPage<OrderChildOperateRecordVO> page = orderCancelService.orderChildOperateRecord(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "客服解除装车限制", notes = "<br>By:姜武杰")
@PostMapping("/artificialRemoveLoadLimit")
public Result<Object> artificialRemoveLoadLimit(@RequestBody ArtificialCancelOrderParam param) {
orderCancelService.removeLoadLimit(param);
return Result.ok();
}
} }
package com.clx.performance.controller.pc;
import com.clx.performance.param.pc.SaveOrderChildOperateLimitConfigParam;
import com.clx.performance.service.OrderChildOperateLimitConfigService;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
/**
* @author jiangwujie
*/
@Slf4j
@RestController
@RequestMapping(value = "/pc/carrier/orderChildOperateLimitConfig")
@Validated
@Api(tags = "运单操作限制配置")
@AllArgsConstructor
public class OrderChildOperateLimitConfigController {
private final OrderChildOperateLimitConfigService orderChildOperateLimitService;
@ApiOperation(value = "运单操作限制配置列表", notes = "<br>By:姜武杰")
@GetMapping("/listConfig")
@UnitCovert(param = false)
public Result<OrderChildOperateLimitConfigVO> listConfig() {
return Result.ok(orderChildOperateLimitService.listConfig());
}
@ApiOperation(value = "运单操作限制配置详情", notes = "<br>By:姜武杰")
@GetMapping("/getDetail")
@UnitCovert(param = false)
public Result<OrderChildOperateLimitConfigVO> getDetail(@NotNull(message = "id不能为空") Integer id) {
return Result.ok(orderChildOperateLimitService.getDetail(id));
}
@ApiOperation(value = "编辑运单操作限制配置", notes = "<br>By:姜武杰")
@PostMapping("/update")
@UnitCovert
public Result updateConfig(@RequestBody @Validated SaveOrderChildOperateLimitConfigParam param) {
orderChildOperateLimitService.updateConfig(param);
return Result.ok();
}
@ApiOperation(value = "运单操作限制配置启用", notes = "<br>By:姜武杰")
@PostMapping("/enable")
@UnitCovert
public Result enableConfig(@NotNull(message = "id不能为空") @RequestParam("id") Integer id) {
orderChildOperateLimitService.enableConfig(id);
return Result.ok();
}
@ApiOperation(value = "运单操作限制配置禁用", notes = "<br>By:姜武杰")
@PostMapping("/disable")
@UnitCovert
public Result disableConfig(@ApiParam("id") @RequestParam("id") @NotNull(message = "id不能为空") Integer id) {
orderChildOperateLimitService.disableConfig(id);
return Result.ok();
}
}
package com.clx.performance.controller.pc;
import com.clx.performance.service.OrderGoodsWeightService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/orderGoods/weight")
@Validated
@Api(tags = "货单量查询")
@AllArgsConstructor
public class OrderGoodsWeightController {
private final OrderGoodsWeightService orderGoodsWeightService;
@ApiOperation(value = "查询货单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderGoodsCanExtractWeight")
public Result<BigDecimal> getOrderGoodsCanExtractWeight(@RequestParam("orderGoodsNo")
@NotBlank(message = "货单编号不能为空") String orderGoodsNo) {
return Result.ok(orderGoodsWeightService.getOrderGoodsCanExtractWeight(orderGoodsNo));
}
}
package com.clx.performance.controller.pc;
import com.clx.performance.service.OrderWeightService;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* @ClassName OrderWeightController
* @Description
* @Author kavin
* @Date 2024/8/5 11:45
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/order/weight")
@Validated
@Api(tags = "订单量查询")
@AllArgsConstructor
public class OrderWeightController {
private final OrderWeightService orderWeightService;
@ApiOperation(value = "查询订单可提取量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderCanExtractWeight")
public Result<OrderExtractWeightVO> getOrderCanExtractWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderCanExtractWeight(orderNo));
}
@ApiOperation(value = "查询订单剩余量",notes = "<br>By:刘海泉")
@GetMapping("/getOrderResidueWeight")
public Result<BigDecimal> getOrderResidueWeight(@RequestParam("orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderWeightService.getOrderResidueWeight(orderNo));
}
}
...@@ -75,7 +75,7 @@ public class CarrierPerformanceProgressController { ...@@ -75,7 +75,7 @@ public class CarrierPerformanceProgressController {
@ApiOperation(value = "获取履约进度编辑日志列表",notes = "<br>By:刘海泉") @ApiOperation(value = "获取履约进度编辑日志列表",notes = "<br>By:刘海泉")
@GetMapping("/getOperationLog") @GetMapping("/getOperationLog")
public Result<List<PerformanceProgressOperationLogVO>> getOperationLog(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo) { public Result<List<PerformanceProgressOperationLogVO>> getOperationLog(@RequestParam("orderNo") @NotBlank(message = "订单编号不能为空") String orderNo) {
List<PerformanceProgressOperationLogVO> list = performanceProgressService.getOperationLog(orderNo); List<PerformanceProgressOperationLogVO> list = performanceProgressService.getOperationLog(orderNo,null);
return Result.ok(list); return Result.ok(list);
} }
......
package com.clx.performance.controller.temp; package com.clx.performance.controller.temp;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.dto.gd.GdRouteDTO; import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.esplus.model.TruckLatestPosESPlus;
import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam; import com.clx.performance.param.mq.trace.TruckTraceSyncMqParam;
import com.clx.performance.param.temp.DriverTraceAddParam; import com.clx.performance.param.temp.DriverTraceAddParam;
import com.clx.performance.param.temp.TruckTraceAddParam; import com.clx.performance.param.temp.TruckTraceAddParam;
...@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -113,4 +114,16 @@ public class TempTraceController { ...@@ -113,4 +114,16 @@ public class TempTraceController {
} }
@ApiOperation(value = "获取车辆最新位置信息", notes = "<br>By:姜武杰")
@GetMapping("/calDistance")
public Result<Integer> getTruckLatestPos(
@RequestParam("l1") @NotNull(message = "当前经度不能为空") BigDecimal l1,
@RequestParam("l2") @NotNull(message = "当前纬度不能为空") BigDecimal l2,
@RequestParam("l3") @NotNull(message = "货源经度不能为空") BigDecimal l3,
@RequestParam("l4") @NotNull(message = "货源纬度不能为空") BigDecimal l4
) {
return Result.ok( gdService.getShortestRouteDistance(l1,l2,l3,l4));
}
} }
...@@ -5,11 +5,7 @@ import com.clx.performance.mapper.AppMapper; ...@@ -5,11 +5,7 @@ import com.clx.performance.mapper.AppMapper;
import com.clx.performance.model.App; import com.clx.performance.model.App;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
public interface AppDao extends BaseDao<AppMapper, App, Integer> { public interface AppDao extends BaseDao<AppMapper, App, Integer> {
} }
package com.clx.performance.dao;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.DriverNoticeConfigMapper;
import com.clx.performance.model.DriverNoticeConfig;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface DriverNoticeConfigDao extends BaseDao<DriverNoticeConfigMapper, DriverNoticeConfig, Integer> {
DriverNoticeConfig listConfig();
boolean updateConfig(DriverNoticeConfig config);
boolean updateStatus(Integer id, Integer status);
}
...@@ -3,6 +3,7 @@ package com.clx.performance.dao; ...@@ -3,6 +3,7 @@ package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO; import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.mapper.OrderChildMapper; import com.clx.performance.mapper.OrderChildMapper;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
...@@ -151,7 +152,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -151,7 +152,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
* @param orderChildNo * @param orderChildNo
* @return * @return
*/ */
OrderChildVO findArtificialCancelOrder(String orderChildNo); OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param);
IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param); IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param);
...@@ -206,4 +207,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -206,4 +207,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
List<OrderChild> listBeforeUnloadOrderChild(LocalDateTime startTime,LocalDateTime endTime); List<OrderChild> listBeforeUnloadOrderChild(LocalDateTime startTime,LocalDateTime endTime);
List<OrderChild> listChidNosByStatus(List<Integer> status); List<OrderChild> listChidNosByStatus(List<Integer> status);
List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList);
void batchUpdateCancel(List<OrderChild> canCancelOrderChildList);
} }
package com.clx.performance.dao;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.OrderChildOperateLimitConfigMapper;
import com.clx.performance.model.OrderChildOperateLimitConfig;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface OrderChildOperateLimitConfigDao extends BaseDao<OrderChildOperateLimitConfigMapper, OrderChildOperateLimitConfig, Integer> {
OrderChildOperateLimitConfig listConfig();
boolean updateConfig(OrderChildOperateLimitConfig config);
boolean updateStatus(Integer id, Integer status);
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.OrderChildOperateRecordMapper;
import com.clx.performance.model.OrderChildOperateRecord;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import com.msl.common.dao.BaseDao;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
public interface OrderChildOperateRecordDao extends BaseDao<OrderChildOperateRecordMapper, OrderChildOperateRecord, Integer> {
IPage<OrderChildOperateRecordVO> orderChildOperateRecord(OrderChildCancelRecordParam param);
}
...@@ -2,6 +2,7 @@ package com.clx.performance.dao; ...@@ -2,6 +2,7 @@ package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsFleetOpenTruck; import com.clx.performance.model.OrderGoodsFleetOpenTruck;
...@@ -14,7 +15,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO; ...@@ -14,7 +15,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -26,7 +26,6 @@ import java.util.List; ...@@ -26,7 +26,6 @@ import java.util.List;
* Time 16:45 * Time 16:45
*/ */
public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Integer> { public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Integer> {
boolean updateWeight(@Param("orderId")Integer orderId, @Param("weight") BigDecimal weight);
String getMaxOrderGoodsId(); String getMaxOrderGoodsId();
...@@ -41,7 +40,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -41,7 +40,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus); void updateOrderGoodsWeightAlreadyAndStatus(Integer id, BigDecimal residueWeight,Integer orderGoodsStatus);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam,List<String> orderGoodsNoList); IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam,List<String> orderGoodsNoList);
...@@ -72,7 +71,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -72,7 +71,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeight(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer id); Integer updateOrderGoodsSetResidueWeightAndAlreadyWeight(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer id);
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer status, Integer id); Integer updateOrderGoodsSetAlreadyWeightAndStatus( BigDecimal alreadyWeight, Integer status, Integer id);
OrderGoodsVO findOrderGoodsById(Integer id); OrderGoodsVO findOrderGoodsById(Integer id);
...@@ -83,7 +82,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -83,7 +82,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
boolean batchUpdateOrderGoodsStatus(Integer status, List<Integer> ids); boolean batchUpdateOrderGoodsStatus(Integer status, List<Integer> ids);
boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids);
void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId); void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId);
...@@ -99,7 +97,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -99,7 +97,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param); IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param);
void batchUpdateResidueWeight(List<Integer> list, BigDecimal residueWeight);
List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList(); List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList();
...@@ -111,4 +108,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -111,4 +108,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> listAfterCreatedByOrderNo(String orderNo); List<OrderGoods> listAfterCreatedByOrderNo(String orderNo);
void batchUpdateOrderGoodsPaying(List<OrderGoods> updateOrderGoods);
void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList);
} }
...@@ -69,4 +69,6 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe ...@@ -69,4 +69,6 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNo); void batchUpdateBindTruckList(String orderGoodsNo, Integer code, List<String> truckNo);
List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList); List<OrderGoodsTruckBind> queryNotOrderTruck(List<String> cancelTruckBindOrderGoodsNoList);
void batchCancelTruckList(List<OrderGoodsTruckBind> updateList);
} }
...@@ -12,5 +12,5 @@ import java.util.List; ...@@ -12,5 +12,5 @@ import java.util.List;
* Time 16:02 * Time 16:02
*/ */
public interface PerformanceProgressLogDao extends BaseDao<PerformanceProgressLogMapper, PerformanceProgressLog, Integer> { public interface PerformanceProgressLogDao extends BaseDao<PerformanceProgressLogMapper, PerformanceProgressLog, Integer> {
List<PerformanceProgressLog> getOperationLog(String orderNo); List<PerformanceProgressLog> getOperationLog(String orderNo,Integer operateType);
} }
package com.clx.performance.dao.impl;
import com.clx.performance.dao.DriverNoticeConfigDao;
import com.clx.performance.mapper.DriverNoticeConfigMapper;
import com.clx.performance.model.DriverNoticeConfig;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Repository
public class DriverNoticeConfigDaoImpl extends BaseDaoImpl<DriverNoticeConfigMapper, DriverNoticeConfig, Integer> implements DriverNoticeConfigDao {
@Override
public DriverNoticeConfig listConfig() {
return list().get(0);
}
@Override
public boolean updateConfig(DriverNoticeConfig config) {
return update(lUdWrapper()
.eq(DriverNoticeConfig::getId, config.getId())
.set(StringUtils.isNotBlank(config.getName()), DriverNoticeConfig::getName, config.getName())
.set(config.getNoticeTriggerDistance() != null, DriverNoticeConfig::getNoticeTriggerDistance, config.getNoticeTriggerDistance())
.set(config.getStatus() != null, DriverNoticeConfig::getStatus, config.getStatus())
);
}
@Override
public boolean updateStatus(Integer id, Integer status) {
return update(lUdWrapper()
.eq(DriverNoticeConfig::getId, id)
.set(DriverNoticeConfig::getStatus, status)
);
}
}
...@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO; import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.mapper.OrderChildMapper; import com.clx.performance.mapper.OrderChildMapper;
...@@ -440,8 +441,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -440,8 +441,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
} }
@Override @Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) { public OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
return baseMapper.findArtificialCancelOrder(orderChildNo); return baseMapper.findArtificialCancelOrder(param);
} }
@Override @Override
...@@ -691,4 +692,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -691,4 +692,14 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.in(OrderChild :: getStatus, status) .in(OrderChild :: getStatus, status)
); );
} }
@Override
public List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(List<String> orderGoodsList) {
return baseMapper.countValidByOrderGoodsNoList(orderGoodsList);
}
@Override
public void batchUpdateCancel(List<OrderChild> canCancelOrderChildList) {
baseMapper.batchUpdateCancel(canCancelOrderChildList);
}
} }
package com.clx.performance.dao.impl;
import com.clx.performance.dao.OrderChildOperateLimitConfigDao;
import com.clx.performance.mapper.OrderChildOperateLimitConfigMapper;
import com.clx.performance.model.OrderChildOperateLimitConfig;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Repository
public class OrderChildOperateLimitConfigDaoImpl extends BaseDaoImpl<OrderChildOperateLimitConfigMapper, OrderChildOperateLimitConfig, Integer> implements OrderChildOperateLimitConfigDao {
@Override
public OrderChildOperateLimitConfig listConfig() {
return list().get(0);
}
@Override
public boolean updateConfig(OrderChildOperateLimitConfig config) {
return update(lUdWrapper()
.eq(OrderChildOperateLimitConfig::getId, config.getId())
.set(StringUtils.isNotBlank(config.getName()), OrderChildOperateLimitConfig::getName, config.getName())
.set(config.getAllowUploadDistance() != null, OrderChildOperateLimitConfig::getAllowUploadDistance, config.getAllowUploadDistance())
.set(config.getStatus() != null, OrderChildOperateLimitConfig::getStatus, config.getStatus())
);
}
@Override
public boolean updateStatus(Integer id, Integer status) {
return update(lUdWrapper()
.eq(OrderChildOperateLimitConfig::getId, id)
.set(OrderChildOperateLimitConfig::getStatus, status)
);
}
}
package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildOperateRecordDao;
import com.clx.performance.mapper.OrderChildOperateRecordMapper;
import com.clx.performance.model.OrderChildOperateRecord;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
@Repository
public class OrderChildOperateRecordDaoImpl extends BaseDaoImpl<OrderChildOperateRecordMapper, OrderChildOperateRecord, Integer> implements OrderChildOperateRecordDao {
@Override
public IPage<OrderChildOperateRecordVO> orderChildOperateRecord(OrderChildCancelRecordParam param) {
Page<OrderChildOperateRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.orderChildOperateRecord(page, param);
}
}
...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.enums.OrderGoodsStatusEnum; import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.mapper.OrderGoodsMapper; import com.clx.performance.mapper.OrderGoodsMapper;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
...@@ -18,7 +19,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO; ...@@ -18,7 +19,6 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO; import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -33,11 +33,6 @@ import java.util.List; ...@@ -33,11 +33,6 @@ import java.util.List;
@Repository @Repository
public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, Integer> implements OrderGoodsDao { public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, Integer> implements OrderGoodsDao {
@Override
public boolean updateWeight(@Param("orderId") Integer orderId, @Param("weight") BigDecimal weight) {
return baseMapper.updateWeight(orderId, weight) > 0;
}
@Override @Override
public String getMaxOrderGoodsId() { public String getMaxOrderGoodsId() {
return baseMapper.getMaxOrderGoodsId(); return baseMapper.getMaxOrderGoodsId();
...@@ -82,8 +77,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -82,8 +77,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override @Override
public void updateOrderGoodsWeightResidueAndAlreadyAndStatus(Integer id, BigDecimal alreadyTransportWeight,BigDecimal residueTransportWeight,Integer orderGoodsStatus) { public void updateOrderGoodsWeightAlreadyAndStatus(Integer id, BigDecimal residueWeight,Integer orderGoodsStatus) {
baseMapper.updateOrderGoodsWeightResidueAndAlreadyAndStatus(id, alreadyTransportWeight, residueTransportWeight, orderGoodsStatus); baseMapper.updateOrderGoodsWeightAlreadyAndStatus(id, residueWeight, orderGoodsStatus);
} }
@Override @Override
...@@ -191,8 +186,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -191,8 +186,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override @Override
public Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(BigDecimal residueWeight, BigDecimal alreadyWeight, Integer status, Integer id) { public Integer updateOrderGoodsSetAlreadyWeightAndStatus(BigDecimal alreadyWeight, Integer status, Integer id) {
return baseMapper.updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(residueWeight,alreadyWeight,status,id); return baseMapper.updateOrderGoodsSetAlreadyWeightAndStatus(alreadyWeight,status,id);
} }
@Override @Override
...@@ -217,13 +212,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -217,13 +212,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
; ;
} }
@Override
public boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids) {
return update(lUdWrapper().in(OrderGoods :: getId,ids)
.set(OrderGoods::getResidueTransportWeight, residueWeight)
);
}
@Override @Override
public List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo) { public List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo) return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
...@@ -273,14 +261,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -273,14 +261,6 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
return baseMapper.indexOrderGoodsListSearch(page,param); return baseMapper.indexOrderGoodsListSearch(page,param);
} }
@Override
public void batchUpdateResidueWeight(List<Integer> list, BigDecimal residueWeight) {
update(lUdWrapper()
.in(OrderGoods::getId, list)
.set(OrderGoods::getResidueTransportWeight, residueWeight)
);
}
@Override @Override
public List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList() { public List<OrderGoodsFleetOpenTruck> queryProcessFleetOpenTruckList() {
return baseMapper.queryProcessFleetOpenTruckList(); return baseMapper.queryProcessFleetOpenTruckList();
...@@ -312,7 +292,15 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -312,7 +292,15 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
.ne(OrderGoods::getOrderGoodsStatus,OrderGoodsStatusEnum.Status.CREATED.getCode()) .ne(OrderGoods::getOrderGoodsStatus,OrderGoodsStatusEnum.Status.CREATED.getCode())
.orderByDesc(OrderGoods :: getPendingOrderTime) .orderByDesc(OrderGoods :: getPendingOrderTime)
); );
}
@Override
public void batchUpdateOrderGoodsPaying(List<OrderGoods> updateOrderGoods) {
baseMapper.batchUpdateOrderGoodsPaying(updateOrderGoods);
} }
@Override
public void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList) {
baseMapper.batchCancelOrderGoodsWeight(cancelOrderGoodsList);
}
} }
...@@ -231,4 +231,9 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM ...@@ -231,4 +231,9 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getOrderGoodsNo, cancelTruckBindOrderGoodsNoList) return baseMapper.selectList(lQrWrapper().in(OrderGoodsTruckBind::getOrderGoodsNo, cancelTruckBindOrderGoodsNoList)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())); .eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode()));
} }
@Override
public void batchCancelTruckList(List<OrderGoodsTruckBind> updateList) {
baseMapper.batchCancelTruckList(updateList);
}
} }
...@@ -8,6 +8,7 @@ import com.msl.common.dao.impl.BaseDaoImpl; ...@@ -8,6 +8,7 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author kavin * @author kavin
...@@ -17,9 +18,10 @@ import java.util.List; ...@@ -17,9 +18,10 @@ import java.util.List;
@Repository @Repository
public class PerformanceProgressLogDaoImpl extends BaseDaoImpl<PerformanceProgressLogMapper, PerformanceProgressLog, Integer> implements PerformanceProgressLogDao { public class PerformanceProgressLogDaoImpl extends BaseDaoImpl<PerformanceProgressLogMapper, PerformanceProgressLog, Integer> implements PerformanceProgressLogDao {
@Override @Override
public List<PerformanceProgressLog> getOperationLog(String orderNo) { public List<PerformanceProgressLog> getOperationLog(String orderNo,Integer operateType) {
LambdaQueryWrapper<PerformanceProgressLog> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PerformanceProgressLog> query = new LambdaQueryWrapper<>();
query.eq(PerformanceProgressLog :: getOrderNo,orderNo); query.eq(PerformanceProgressLog :: getOrderNo,orderNo);
query.eq(Objects.nonNull(operateType),PerformanceProgressLog :: getOperateType,operateType);
query.orderByDesc(PerformanceProgressLog :: getId); query.orderByDesc(PerformanceProgressLog :: getId);
return baseMapper.selectList(query); return baseMapper.selectList(query);
} }
......
package com.clx.performance.dto;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @ClassName OrderGoodsNotCancelChildDTO
* @Description
* @Author kavin
* @Date 2024/8/6 10:52
* @Version 1.0
*/
@Getter
@Setter
public class OrderGoodsCancelWeightDTO {
private String orderGoodsNo; //货单编号
private BigDecimal weight; //归还货单的吨数
}
package com.clx.performance.dto;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName OrderGoodsNotCancelChildDTO
* @Description
* @Author kavin
* @Date 2024/8/6 10:52
* @Version 1.0
*/
@Getter
@Setter
public class OrderGoodsNotCancelChildDTO {
private String orderGoodsNo; //货单编号
private Long count; //货单下未取消的运单数量
}
package com.clx.performance.extranal.user; package com.clx.performance.extranal.user;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.vo.feign.DriverInfoFeignVo; import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.FeignDriverTruckModelVo; import com.clx.user.vo.feign.FeignDriverTruckModelVo;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import java.util.List;
public interface DriverService { public interface DriverService {
...@@ -18,4 +21,7 @@ public interface DriverService { ...@@ -18,4 +21,7 @@ public interface DriverService {
Optional<FeignDriverTruckModelVo> getDumpType(String truckModel);//通过车型获取自卸非自卸 Optional<FeignDriverTruckModelVo> getDumpType(String truckModel);//通过车型获取自卸非自卸
//批量恢复司机和车辆状态
void batchUpdateDriverAndTruckStatusCancel(List<BatchUpdateDriverAndTruckParam> list);
} }
...@@ -5,6 +5,7 @@ import com.msl.common.base.Optional; ...@@ -5,6 +5,7 @@ import com.msl.common.base.Optional;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
import java.util.Map;
public interface OrderService { public interface OrderService {
...@@ -14,4 +15,8 @@ public interface OrderService { ...@@ -14,4 +15,8 @@ public interface OrderService {
Optional<List<String>> getMonthSameLineOrderList(String orderNo); Optional<List<String>> getMonthSameLineOrderList(String orderNo);
Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList);
} }
...@@ -2,6 +2,7 @@ package com.clx.performance.extranal.user.impl; ...@@ -2,6 +2,7 @@ package com.clx.performance.extranal.user.impl;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.user.feign.DriverFeign; import com.clx.user.feign.DriverFeign;
import com.clx.user.param.feign.BatchUpdateDriverAndTruckParam;
import com.clx.user.vo.feign.DriverInfoFeignVo; import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo; import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.FeignDriverTruckModelVo; import com.clx.user.vo.feign.FeignDriverTruckModelVo;
...@@ -13,6 +14,7 @@ import lombok.AllArgsConstructor; ...@@ -13,6 +14,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects; import java.util.Objects;
@Slf4j @Slf4j
...@@ -66,4 +68,10 @@ public class DriverServiceImpl implements DriverService { ...@@ -66,4 +68,10 @@ public class DriverServiceImpl implements DriverService {
return Optional.ofNullable(result.getData()); return Optional.ofNullable(result.getData());
} }
@Override
public void batchUpdateDriverAndTruckStatusCancel(List<BatchUpdateDriverAndTruckParam> list) {
Optional.ofNullable(driverFeign.batchUpdateOrderStatus(list))
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL);
}
} }
...@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
@Slf4j @Slf4j
...@@ -31,4 +32,11 @@ public class OrderServiceImpl implements OrderService { ...@@ -31,4 +32,11 @@ public class OrderServiceImpl implements OrderService {
.filter(Result::succeed) .filter(Result::succeed)
.map(Result::getData); .map(Result::getData);
} }
@Override
public Optional<Map<String,FeignOrderInfoVO>> queryListOrderByOrderNoList(List<String> orderNoList) {
return Optional.ofNullable(orderFeign.queryListOrderByOrderNoList(orderNoList))
.filter(Result::succeed)
.map(Result::getData);
}
} }
package com.clx.performance.job;
import com.clx.performance.service.OrderChildService;
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;
/**
* 运单监控实时位置耗时信息job
* @author jiangwujie
*/
@Slf4j
@Component
public class OrderChildMessageNoticeJob {
@Autowired
OrderChildService orderChildService;
/**
* 运单监控实时位置耗时信息
*/
@XxlJob("orderChildMessageNotice")
public void orderChildMessageNotice() {
try {
log.info("开始实时计算进行中的运单的实时位置计算任务================================================");
orderChildService.orderChildMessageNotice();
log.info("结束实时计算进行中的运单的实时位置计算任务================================================");
} catch (Exception e) {
log.warn("定时任务计算进行中的运单的实时位置失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("定时任务计算进行中的运单的实时位置失败,异常原因=====================", e);
}
}
}
...@@ -166,7 +166,7 @@ public class OrderChildDtsListener { ...@@ -166,7 +166,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态"); Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo()); child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态 }else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo()); child = lastTruckService.getOrderLastTruck(after.getOrderNo());
} }
if (Objects.nonNull(child)) { if (Objects.nonNull(child)) {
log.info("开始同步新货主客户端最后一车的运单,运单编号:{}", child.getChildNo()); log.info("开始同步新货主客户端最后一车的运单,运单编号:{}", child.getChildNo());
...@@ -217,7 +217,7 @@ public class OrderChildDtsListener { ...@@ -217,7 +217,7 @@ public class OrderChildDtsListener {
} }
} }
public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after){ public void syncLastTruck(FeignOrderVO orderInfoFeign,OrderChildMessage after) {
//当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑 //当运单状态为到达目的地之后的状态时候,需要判断最后一车的逻辑
if(Objects.equals(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode(),after.getStatus()) || if(Objects.equals(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode(),after.getStatus()) ||
(after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode())){ (after.getStatus() >= OrderChildEnum.Status.ARRIVE_RECEIVE.getCode() && after.getStatus() <= OrderChildEnum.Status.COMPLETE.getCode())){
...@@ -229,7 +229,7 @@ public class OrderChildDtsListener { ...@@ -229,7 +229,7 @@ public class OrderChildDtsListener {
Objects.nonNull(byCode)?byCode.getName():"未知状态"); Objects.nonNull(byCode)?byCode.getName():"未知状态");
child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo()); child = lastTruckService.getOrderCompleteLastTruck(after.getOrderNo());
}else{ // 订单除 已完成 || 已完结 外的其他状态 }else{ // 订单除 已完成 || 已完结 外的其他状态
child = lastTruckService.getLastTruckChild(after.getOrderNo()); child = lastTruckService.getOrderLastTruck(after.getOrderNo());
} }
if(Objects.nonNull(child)){ if(Objects.nonNull(child)){
lastTruckService.syncLastTruckChild(child); lastTruckService.syncLastTruckChild(child);
......
package com.clx.performance.listener; package com.clx.performance.listener;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.common.MqWrapper; import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.GoodsOrderTruckRecordComponent; import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent; import com.clx.performance.component.OrderCancelComponent;
...@@ -10,8 +8,6 @@ import com.clx.performance.constant.RabbitKeyConstants; ...@@ -10,8 +8,6 @@ import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderGoodsDao; import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO; import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum; import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderGoodsLogsEnum;
import com.clx.performance.enums.OrderGoodsPendingOrderWayStatusEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum; import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsAdjustmentPrice; import com.clx.performance.model.OrderGoodsAdjustmentPrice;
...@@ -57,7 +53,6 @@ public class OrderGoodsDtsListener { ...@@ -57,7 +53,6 @@ public class OrderGoodsDtsListener {
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after)); log.info("修改:{}",JSON.toJSONString(after));
backFillOrderWeight(after);
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode()); syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
...@@ -69,31 +64,6 @@ public class OrderGoodsDtsListener { ...@@ -69,31 +64,6 @@ public class OrderGoodsDtsListener {
} }
} }
//货单剩余吨数不足35吨,自动恢复吨数到订单上
public void backFillOrderWeight(OrderGoods after){
//剩余吨数小于35吨并且大于0,自动归还订单上
if(new BigDecimal("35").compareTo(after.getResidueTransportWeight()) > 0 &&
after.getResidueTransportWeight().compareTo(BigDecimal.ZERO) > 0){
log.info("开始自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}",
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
orderCancelComponent.backFillOrderWeight(after,after.getResidueTransportWeight(), UpdateEnum.ADD.getCode());
OrderGoods orderGoods = new OrderGoods();
orderGoods.setId(after.getId());
orderGoods.setResidueTransportWeight(BigDecimal.ZERO);
orderGoodsDao.updateEntityByKey(orderGoods);
orderGoodsLogService.saveLog(after.getOrderGoodsNo(), 0L, "系统", OrderGoodsLogsEnum.Type.SYSTEM_RELEASE.getName(),
String.format("系统自动释放:%s吨", after.getResidueTransportWeight()));
//释放定向单(非自由车辆)对应的定向车辆
if( ( Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.EXCLUSIVE.getCode())
|| Objects.equals(after.getPendingOrderWay(), OrderGoodsPendingOrderWayStatusEnum.Status.FLEET_EXCLUSIVE.getCode()) )
&& !Objects.equals(after.getVehicleUsage(), VehicleUsageEnum.Status.OWN.getCode())){
goodsOrderTruckRecordComponent.releaseOrderGoodsDriverAndTruck(after.getOrderGoodsNo());
}
log.info("结束自动恢复吨数到订单,订单号:{},货单号:{},货单剩余吨数:{}",
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
}
}
public void syncPerformanceProgress(OrderGoods before,OrderGoods after, Integer updateType) { public void syncPerformanceProgress(OrderGoods before,OrderGoods after, Integer updateType) {
boolean isSend = false; boolean isSend = false;
...@@ -135,6 +105,8 @@ public class OrderGoodsDtsListener { ...@@ -135,6 +105,8 @@ public class OrderGoodsDtsListener {
|| //挂单中之后的状态的挂单运费发生变化 || //挂单中之后的状态的挂单运费发生变化
(after.getOrderGoodsStatus() >= OrderGoodsStatusEnum.Status.PAYING.getCode() && (after.getOrderGoodsStatus() >= OrderGoodsStatusEnum.Status.PAYING.getCode() &&
!Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight())) !Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight()))
//提取吨数发生变化
|| (after.getExtractWeight().compareTo(BigDecimal.ZERO) != 0)
) )
){ ){
isSend = true; isSend = true;
......
...@@ -4,10 +4,6 @@ package com.clx.performance.mapper; ...@@ -4,10 +4,6 @@ package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.App; import com.clx.performance.model.App;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
public interface AppMapper extends BaseMapper<App> { public interface AppMapper extends BaseMapper<App> {
} }
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.DriverNoticeConfig;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface DriverNoticeConfigMapper extends BaseMapper<DriverNoticeConfig> {
}
...@@ -4,14 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,14 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsNotCancelChildDTO;
import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO; import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam; import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam; import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam; import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.OrderChildReportParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.param.pc.PagePoundAuditParam;
import com.clx.performance.sqlProvider.OrderChildSqlProvider; import com.clx.performance.sqlProvider.OrderChildSqlProvider;
import com.clx.performance.vo.MonthInComeAndOrderedVO; import com.clx.performance.vo.MonthInComeAndOrderedVO;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
...@@ -83,7 +81,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -83,7 +81,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "findArtificialCancelOrder") @SelectProvider(type = OrderChildSqlProvider.class, method = "findArtificialCancelOrder")
OrderChildVO findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo); OrderChildVO findArtificialCancelOrder(@Param("param") ArtificialCancelOrderQueryParam param);
@SelectProvider(type = OrderChildSqlProvider.class, method = "orderChildCancelRecord") @SelectProvider(type = OrderChildSqlProvider.class, method = "orderChildCancelRecord")
IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderChildVO> page, @Param(value = "param") OrderChildCancelRecordParam param); IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderChildVO> page, @Param(value = "param") OrderChildCancelRecordParam param);
...@@ -176,4 +174,13 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -176,4 +174,13 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
" group by order_goods_no " + " group by order_goods_no " +
"</script>") "</script>")
List<CancelOrderGoodsWeightDTO> statisticsCancelOrderGoodsWeight(@Param("list") List<String> childNos); List<CancelOrderGoodsWeightDTO> statisticsCancelOrderGoodsWeight(@Param("list") List<String> childNos);
@SelectProvider(type = OrderChildSqlProvider.class, method = "countValidByOrderGoodsNoList")
List<OrderGoodsNotCancelChildDTO> countValidByOrderGoodsNoList(@Param("orderGoodsList") List<String> orderGoodsList);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateCancel")
void batchUpdateCancel(List<OrderChild> canCancelOrderChildList);
} }
\ No newline at end of file
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderChildOperateLimitConfig;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface OrderChildOperateLimitConfigMapper extends BaseMapper<OrderChildOperateLimitConfig> {
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.OrderChildOperateRecord;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.sqlProvider.OrderChildOperateRecordSqlProvider;
import com.clx.performance.sqlProvider.OrderChildSqlProvider;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
public interface OrderChildOperateRecordMapper extends BaseMapper<OrderChildOperateRecord> {
@SelectProvider(type = OrderChildOperateRecordSqlProvider.class, method = "orderChildOperateRecord")
IPage<OrderChildOperateRecordVO> orderChildOperateRecord(Page<OrderChildOperateRecordVO> page, OrderChildCancelRecordParam param);
}
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dto.CancelOrderGoodsWeightDTO; import com.clx.performance.dto.CancelOrderGoodsWeightDTO;
import com.clx.performance.dto.OrderGoodsCancelWeightDTO;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsFleetOpenTruck; import com.clx.performance.model.OrderGoodsFleetOpenTruck;
import com.clx.performance.param.app.AppGoodsOrderSearchParam; import com.clx.performance.param.app.AppGoodsOrderSearchParam;
...@@ -24,11 +25,6 @@ import java.util.List; ...@@ -24,11 +25,6 @@ import java.util.List;
*/ */
public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{weight} " +
" where id = #{orderId}")
int updateWeight(@Param("orderId") Integer orderId, @Param("weight") BigDecimal weight);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getMaxOrderGoodsId") @SelectProvider(type = OrderGoodsSqlProvider.class, method = "getMaxOrderGoodsId")
String getMaxOrderGoodsId(); String getMaxOrderGoodsId();
...@@ -36,18 +32,16 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -36,18 +32,16 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
IPage<OrderGoodsVO> pageOrderGoodsList(@Param("page") Page<OrderGoodsVO> page, @Param("param") PageOrderGoodsListParam param); IPage<OrderGoodsVO> pageOrderGoodsList(@Param("page") Page<OrderGoodsVO> page, @Param("param") PageOrderGoodsListParam param);
@Update(" update order_goods set " + @Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{weight}," +
" already_transport_weight = already_transport_weight+#{weight}," + " already_transport_weight = already_transport_weight+#{weight}," +
"order_goods_status = #{orderGoodsStatus} " + "order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}") " where id = #{id}")
void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus); void updateOrderGoodsWeightAndStatus(@Param("id") Integer id, @Param("weight") BigDecimal orderChildWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
@Update(" update order_goods set " + @Update(" update order_goods set " +
" residue_transport_weight = residue_transport_weight-#{residueTransportWeight}," + " already_transport_weight = already_transport_weight - #{residueWeight}," +
" already_transport_weight = already_transport_weight+#{alreadyTransportWeight}," +
"order_goods_status = #{orderGoodsStatus} " + "order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}") " where id = #{id}")
void updateOrderGoodsWeightResidueAndAlreadyAndStatus(@Param("id") Integer id, @Param("alreadyTransportWeight") BigDecimal alreadyTransportWeight, @Param("residueTransportWeight") BigDecimal residueTransportWeight,@Param("orderGoodsStatus") Integer orderGoodsStatus); void updateOrderGoodsWeightAlreadyAndStatus(@Param("id") Integer id, @Param("residueWeight") BigDecimal residueWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList") @SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList")
...@@ -76,8 +70,8 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -76,8 +70,8 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoods") @UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoods")
Integer updateOrderGoods(@Param(value = "params") OrderGoodsEditParams orderGoodsEditParams); Integer updateOrderGoods(@Param(value = "params") OrderGoodsEditParams orderGoodsEditParams);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus") @UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetAlreadyWeightAndStatus")
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id); Integer updateOrderGoodsSetAlreadyWeightAndStatus(@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight") @SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight")
BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo); BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo);
...@@ -108,4 +102,11 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -108,4 +102,11 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight); void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "batchUpdateOrderGoodsPaying")
void batchUpdateOrderGoodsPaying(@Param("updateOrderGoods") List<OrderGoods> updateOrderGoods);
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "batchCancelOrderGoodsWeight")
void batchCancelOrderGoodsWeight(@Param("cancelOrderGoodsList") List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList);
} }
...@@ -38,4 +38,8 @@ public interface OrderGoodsTruckBindMapper extends BaseMapper<OrderGoodsTruckBin ...@@ -38,4 +38,8 @@ public interface OrderGoodsTruckBindMapper extends BaseMapper<OrderGoodsTruckBin
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "queryOrderGoodsTruckNum") @SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "queryOrderGoodsTruckNum")
List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList); List<OrderGoodsBindTruckNumDTO> queryOrderGoodsTruckNum(List<String> fleetNoList);
@SelectProvider(type = OrderGoodsTruckBindSqlProvider.class, method = "batchCancelTruckList")
void batchCancelTruckList(List<OrderGoodsTruckBind> updateList);
} }
\ No newline at end of file
...@@ -13,11 +13,7 @@ import lombok.experimental.Accessors; ...@@ -13,11 +13,7 @@ import lombok.experimental.Accessors;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/**
* @author Min
* Date 2024-06-14
* Time 11:51
*/
@Getter @Getter
@Setter @Setter
@Accessors(chain = true) @Accessors(chain = true)
......
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("driver_notice_config")
public class DriverNoticeConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("name")
@ApiModelProperty("配置名称")
private String name;
@TableField("notice_trigger_distance")
@ApiModelProperty("通知触发距离")
private BigDecimal noticeTriggerDistance;
@TableField("status")
@ApiModelProperty("启用状态:0禁用1启用")
private Integer status;
@TableField("created_time")
@ApiModelProperty("创建时间")
private LocalDateTime createdTime;
@TableField("modified_time")
@ApiModelProperty("更新时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
...@@ -105,6 +105,19 @@ public class OrderChild implements HasKey<Integer> { ...@@ -105,6 +105,19 @@ public class OrderChild implements HasKey<Integer> {
private BigDecimal platformServiceFeeRate; //平台服务费费率% private BigDecimal platformServiceFeeRate; //平台服务费费率%
private BigDecimal deposit; //接单保证金(分/车) private BigDecimal deposit; //接单保证金(分/车)
/**
* 驶入驶离货源地状态 0 初始 1 驶入 2 驶离
*/
private Integer enterExitSendStatus;
/**
* 驶离通知状态 0 未通知 1 已通知
*/
private Integer exitNoticeStatus;
/**
* 是否解除监装限制 0 未解除 1 解除
*/
private Integer removeLoadLimitStatus;
private LocalDateTime createTime; //创建时间 private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间 private LocalDateTime modifiedTime; //修改时间
......
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_operate_limit_config")
public class OrderChildOperateLimitConfig implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("name")
@ApiModelProperty("配置名称")
private String name;
@TableField("allow_upload_distance")
@ApiModelProperty("可上传装车信息范围")
private BigDecimal allowUploadDistance;
@TableField("status")
@ApiModelProperty("启用状态0禁用,1启用")
private Integer status;
@TableField("created_time")
@ApiModelProperty("创建时间")
private LocalDateTime createdTime;
@TableField("modified_time")
@ApiModelProperty("更新时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_operate_record")
public class OrderChildOperateRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("child_no")
@ApiModelProperty("运单编号")
private String childNo;
@TableField("type")
@ApiModelProperty("操作类型 1 取消运单 2 解除装车限制")
private Integer type;
@TableField("truck_no")
@ApiModelProperty("主车牌照")
private String truckNo;
@TableField("driver_name")
@ApiModelProperty("司机名称")
private String driverName;
@TableField("driver_mobile")
@ApiModelProperty("司机手机号")
private String driverMobile;
@TableField("send_address")
@ApiModelProperty("货源地")
private String sendAddress;
@TableField("receive_address")
@ApiModelProperty("目的地")
private String receiveAddress;
@TableField("good_type_name")
@ApiModelProperty("货物类型名称")
private String goodTypeName;
@TableField("remark")
@ApiModelProperty("备注")
private String remark;
@TableField("operate_time")
@ApiModelProperty("操作时间")
private LocalDateTime operateTime;
@TableField("operator")
@ApiModelProperty("操作人")
private String operator;
@TableField("created_time")
@ApiModelProperty("创建时间")
private LocalDateTime createdTime;
@TableField("modified_time")
@ApiModelProperty("更新时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.service;
import com.clx.performance.param.pc.SaveDriverNoticeConfigParam;
import com.clx.performance.vo.pc.DriverNoticeConfigVO;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface DriverNoticeConfigService {
DriverNoticeConfigVO listConfig();
DriverNoticeConfigVO getDetail(Integer id);
void updateConfig(SaveDriverNoticeConfigParam param);
void enableConfig(Integer id);
void disableConfig(Integer id);
}
...@@ -5,7 +5,6 @@ import com.msl.common.result.Result; ...@@ -5,7 +5,6 @@ import com.msl.common.result.Result;
public interface LastTruckService { public interface LastTruckService {
OrderChild getLastTruckChild(String orderNo);
Result<?> syncLastTruckChild(OrderChild child); Result<?> syncLastTruckChild(OrderChild child);
...@@ -14,4 +13,8 @@ public interface LastTruckService { ...@@ -14,4 +13,8 @@ public interface LastTruckService {
Result<?> syncLastTruckChild4OrderTrigger(String orderNo); Result<?> syncLastTruckChild4OrderTrigger(String orderNo);
OrderChild getOrderLastTruck(String orderNo);
} }
package com.clx.performance.service; package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.ArtificialCancelOrderParam;
import com.clx.performance.param.pc.ArtificialCancelOrderQueryParam;
import com.clx.performance.param.pc.OrderCancelParam; import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam; import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.base.PageParam; import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import java.util.List;
public interface OrderCancelService { public interface OrderCancelService {
...@@ -47,7 +47,20 @@ public interface OrderCancelService { ...@@ -47,7 +47,20 @@ public interface OrderCancelService {
* @param orderChildNo * @param orderChildNo
* @return * @return
*/ */
OrderChildVO findArtificialCancelOrder(String orderChildNo); OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param);
IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param); IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param);
/**
* 异常运单处理记录
* @param param
* @return
*/
IPage<OrderChildOperateRecordVO> orderChildOperateRecord(OrderChildCancelRecordParam param);
/**
* 客服移除监装限制
* @param param
*/
void removeLoadLimit(ArtificialCancelOrderParam param);
} }
...@@ -16,4 +16,5 @@ public interface OrderChildLogService { ...@@ -16,4 +16,5 @@ public interface OrderChildLogService {
void saveBatchOrderChildLog(List<OrderChildLog> logs); void saveBatchOrderChildLog(List<OrderChildLog> logs);
void batchSaveCarrierOrderChildLogs(List<OrderChild> canCancelOrderChildList,Long userNo,String userName);
} }
package com.clx.performance.service;
import com.clx.performance.param.pc.SaveOrderChildOperateLimitConfigParam;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
public interface OrderChildOperateLimitConfigService {
OrderChildOperateLimitConfigVO listConfig();
OrderChildOperateLimitConfigVO getDetail(Integer id);
void updateConfig(SaveOrderChildOperateLimitConfigParam param);
void enableConfig(Integer id);
void disableConfig(Integer id);
}
package com.clx.performance.service;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
public interface OrderChildOperateRecordService {
}
...@@ -8,10 +8,10 @@ import com.clx.performance.param.app.*; ...@@ -8,10 +8,10 @@ import com.clx.performance.param.app.*;
import com.clx.performance.param.app.owner.PageOwnerOrderChildListParam; import com.clx.performance.param.app.owner.PageOwnerOrderChildListParam;
import com.clx.performance.param.feign.CancelOrderGoodsParam; import com.clx.performance.param.feign.CancelOrderGoodsParam;
import com.clx.performance.param.pc.*; import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.vo.app.*; import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO; import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*; import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.msl.common.base.PageParam; import com.msl.common.base.PageParam;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
...@@ -109,4 +109,13 @@ public interface OrderChildService { ...@@ -109,4 +109,13 @@ public interface OrderChildService {
List<OrderChildExpectDTO> getOrderChildExpect(String orderChildNo); List<OrderChildExpectDTO> getOrderChildExpect(String orderChildNo);
void cacheOrderChildExpectData(String childNo, OrderChildExpectDTO expect); void cacheOrderChildExpectData(String childNo, OrderChildExpectDTO expect);
OrderChildLoadRangeCheckResultVO loadRangeCheck(OrderChildLoadRangeCheckParam param);
void orderChildMessageNotice();
NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param);
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
} }
...@@ -34,9 +34,6 @@ public interface OrderGoodsService { ...@@ -34,9 +34,6 @@ public interface OrderGoodsService {
void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatusAmountLoad(OrderGoods orderGoods, BigDecimal orderChildWeight, Integer orderGoodsStatus);
void borrowWeight(OrderGoods orderGoods,String orderChildNo,BigDecimal subOrderGoodsResidue, BigDecimal addAlready,BigDecimal borrowOrderWeight,
Integer orderGoodsStatus);
void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus); void updateOrderGoodsReduceWeightAndStatus(OrderGoods orderGoods, OrderChild orderChild, Integer orderGoodsStatus);
...@@ -102,8 +99,6 @@ public interface OrderGoodsService { ...@@ -102,8 +99,6 @@ public interface OrderGoodsService {
IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param); IPage<OrderGoodsAPPVO> indexOrderGoodsListSearch(AppGoodsOrderSearchParam param);
void batchUpdateResidueWeight(List<OrderGoods> list);
void saveBindTruck(DistributionTruckParam param); void saveBindTruck(DistributionTruckParam param);
...@@ -113,4 +108,7 @@ public interface OrderGoodsService { ...@@ -113,4 +108,7 @@ public interface OrderGoodsService {
List<DriverFreightPriceVO> getDriverFreightPriceList(String orderNo); List<DriverFreightPriceVO> getDriverFreightPriceList(String orderNo);
List<OrderGoodsPendingVO> getOrderGoodsPendingList(String orderNo); List<OrderGoodsPendingVO> getOrderGoodsPendingList(String orderNo);
BigDecimal calcOrderGoodsResidueWeight(BigDecimal extractWeight,BigDecimal alreadyWeight);
} }
package com.clx.performance.service;
import java.math.BigDecimal;
public interface OrderGoodsWeightService {
BigDecimal getOrderGoodsCanExtractWeight(String orderGoodsNo);
}
package com.clx.performance.service;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.feign.OrderExtractWeightVO;
import java.math.BigDecimal;
public interface OrderWeightService {
OrderExtractWeightVO getOrderCanExtractWeight(String orderNo);
BigDecimal getOrderResidueWeight(String orderNo);
//计算货单真实的提取量
BigDecimal calcOrderGoodsRealExtractWeight(OrderGoods item);
}
...@@ -30,11 +30,11 @@ public interface PerformanceProgressService { ...@@ -30,11 +30,11 @@ public interface PerformanceProgressService {
PerformanceProgressDetailVO getPerformanceProgressDetail(Integer id); PerformanceProgressDetailVO getPerformanceProgressDetail(Integer id);
List<PerformanceProgressOperationLogVO> getOperationLog(String orderNo); List<PerformanceProgressOperationLogVO> getOperationLog(String orderNo,Integer operateType);
void dealPerformanceProgress4OrderInfo(OrderInfoMessage data); void dealPerformanceProgress4OrderInfo(OrderInfoMessage data);
List<PerformanceProgressVO> queryPerformanceProgress(List<String> orderNoList);
void dealPerformanceProgress4OrderGoods(OrderGoods data); void dealPerformanceProgress4OrderGoods(OrderGoods data);
......
package com.clx.performance.service.impl;
import com.clx.performance.dao.DriverNoticeConfigDao;
import com.clx.performance.enums.EnabledStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.DriverNoticeConfig;
import com.clx.performance.param.pc.SaveDriverNoticeConfigParam;
import com.clx.performance.service.DriverNoticeConfigService;
import com.clx.performance.struct.DriverNoticeConfigStruct;
import com.clx.performance.vo.pc.DriverNoticeConfigVO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Service
@AllArgsConstructor
public class DriverNoticeConfigServiceImpl implements DriverNoticeConfigService {
private final DriverNoticeConfigDao dao;
private final DriverNoticeConfigStruct struct;
@Override
public DriverNoticeConfigVO listConfig() {
return struct.convertVO(dao.listConfig());
}
@Override
public DriverNoticeConfigVO getDetail(Integer id) {
DriverNoticeConfig config = dao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
return struct.convertVO(config);
}
@Override
public void updateConfig(SaveDriverNoticeConfigParam param) {
DriverNoticeConfig config = new DriverNoticeConfig();
config.setId(param.getId());
config.setNoticeTriggerDistance(param.getNoticeTriggerDistance());
dao.updateConfig(config);
}
@Override
public void enableConfig(Integer id) {
dao.updateStatus(id, EnabledStatusEnum.ENABLE.getCode());
}
@Override
public void disableConfig(Integer id) {
dao.updateStatus(id, EnabledStatusEnum.DISABLE.getCode());
}
}
...@@ -4,20 +4,29 @@ import com.alibaba.fastjson.JSON; ...@@ -4,20 +4,29 @@ import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient; import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.message.OrderChildMessage; import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.open.sdk.enums.ResultStatusEnum; import com.clx.open.sdk.enums.ResultStatusEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.ThirdAppConfig; import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService; import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct; import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
/** /**
* @ClassName LastTruckServiceImpl * @ClassName LastTruckServiceImpl
...@@ -35,31 +44,9 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -35,31 +44,9 @@ public class LastTruckServiceImpl implements LastTruckService {
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final OrderChildStruct orderChildStruct; private final OrderChildStruct orderChildStruct;
private final ThirdAppConfig thirdAppConfig; private final ThirdAppConfig thirdAppConfig;
/** private final RedissonClient redissonClient;
* @Author kavin private final RedisTemplate<String, String> redisTemplate;
* @Description 判断最后一车的逻辑
* @Param [orderNo]
* @return
**/
@Override
public OrderChild getLastTruckChild(String orderNo) {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
//判断当前订单下所有到达目的地之后的运单的装车吨数 >= (订单拉运吨数 -35吨)
log.info("订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 订单拉运吨数:{}",
orderNo,weight,orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.compareTo(orderInfo.getTransportWeight().subtract(new BigDecimal("35"))) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
return child;
}
return null;
}
/** /**
* @Author kavin * @Author kavin
* @Description 同步最后一车 * @Description 同步最后一车
...@@ -79,16 +66,24 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -79,16 +66,24 @@ public class LastTruckServiceImpl implements LastTruckService {
return result; return result;
} }
//在没有算出最后一车的前提下,订单变成已完结或者已完成状态,但是订单量可能并没有提取完,所以只需要判断订单下是否还有未到达 目的地的运单,没有则进行最后一车运算
@Override @Override
public OrderChild getOrderCompleteLastTruck(String orderNo) { public OrderChild getOrderCompleteLastTruck(String orderNo) {
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单 String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
Long count = orderChildDao.haveArriveReceiveChild(orderNo); //已经计算出最后一车,则直接返回运单信息
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count); if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
if(count == 0 ){ String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车 return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
return orderChildDao.getOrderCompleteLastTruck(orderNo); }else{
//判断当前订单下是否存在未到达目的地之前的运单 && 排除掉已取消的运单
Long count = orderChildDao.haveArriveReceiveChild(orderNo);
log.info("已完成/已完结的订单号:{},查询运单状态非取消并且在到达目的地之前的运单数量为:{}",orderNo,count);
if(count == 0 ){
//说明排除已取消的运单后,剩下的所有运单都已经是到达目的地之后的状态,根据到达目的地的时间倒序取出第一条运单作为最后一车
return orderChildDao.getOrderCompleteLastTruck(orderNo);
}
return null;
} }
return null;
} }
...@@ -106,4 +101,54 @@ public class LastTruckServiceImpl implements LastTruckService { ...@@ -106,4 +101,54 @@ public class LastTruckServiceImpl implements LastTruckService {
} }
return Result.ok("订单完成/完结状态下未查询最后一车,订单编号:" + orderNo); return Result.ok("订单完成/完结状态下未查询最后一车,订单编号:" + orderNo);
} }
//调用此方法前查订单是否存在最后一车,存在则不进行该方法调用
@Override
public OrderChild getOrderLastTruck(String orderNo){
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算订单最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
RLock lock = redissonClient.getLock(RedissonConstants.CALC_ORDER_LAST_TRUCK_LOCK + orderNo);
try{
String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
//已经计算出最后一车,则直接返回运单信息
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
}
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(ResultEnum.TRY_LOCK_ERROR,"计算最后一车请求排队超时");
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
log.info("计算订单最后一车,订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 订单拉运吨数:{}",
orderNo,weight,orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.subtract(orderInfo.getTransportWeight()).compareTo(BigDecimal.ZERO) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
//更新订单最后一车到缓存,并设置有效期为60天
redisTemplate.opsForValue().set(getLastTruckCacheKey(orderNo),child.getChildNo(),60, TimeUnit.DAYS);
return child;
}
return null;
} catch (InterruptedException e){
log.warn("计算订单最后一车发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return null;
}
public String getLastTruckCacheKey(String orderNo){
return RedisConstants.ORDER_LAST_TRUCK_CHILD + orderNo;
}
} }
...@@ -2,12 +2,14 @@ package com.clx.performance.service.impl; ...@@ -2,12 +2,14 @@ package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderChildLogDao; import com.clx.performance.dao.OrderChildLogDao;
import com.clx.performance.enums.OrderChildLogEnum; import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildLog; import com.clx.performance.model.OrderChildLog;
import com.clx.performance.service.OrderChildLogService; import com.clx.performance.service.OrderChildLogService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
...@@ -52,4 +54,22 @@ public class OrderChildLogServiceImpl implements OrderChildLogService { ...@@ -52,4 +54,22 @@ public class OrderChildLogServiceImpl implements OrderChildLogService {
public void saveBatchOrderChildLog(List<OrderChildLog> logs) { public void saveBatchOrderChildLog(List<OrderChildLog> logs) {
orderChildLogDao.saveBatchList(logs); orderChildLogDao.saveBatchList(logs);
} }
@Override
public void batchSaveCarrierOrderChildLogs(List<OrderChild> canCancelOrderChildList,Long userNo,String userName) {
List<OrderChildLog> logs = new ArrayList<>();
OrderChildLog orderChildLog;
for (OrderChild child : canCancelOrderChildList) {
orderChildLog = new OrderChildLog();
orderChildLog.setChildNo(child.getChildNo());
orderChildLog.setType(OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode());
orderChildLog.setRemark(OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg());
orderChildLog.setCreateType(OrderChildLogEnum.CreateType.PLATFORM.getCode());
orderChildLog.setCreateBy(userNo);
orderChildLog.setCreateName(userName);
logs.add(orderChildLog);
}
orderChildLogDao.saveBatchList(logs);
}
} }
package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderChildOperateLimitConfigDao;
import com.clx.performance.enums.EnabledStatusEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChildOperateLimitConfig;
import com.clx.performance.param.pc.SaveOrderChildOperateLimitConfigParam;
import com.clx.performance.service.OrderChildOperateLimitConfigService;
import com.clx.performance.struct.OrderChildOperateLimitConfigStruct;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @author jiangwj
* Date 2024-08-07
* Time 16:29
*/
@Service
@AllArgsConstructor
public class OrderChildOperateLimitConfigServiceImpl implements OrderChildOperateLimitConfigService {
private final OrderChildOperateLimitConfigDao dao;
private final OrderChildOperateLimitConfigStruct struct;
@Override
public OrderChildOperateLimitConfigVO listConfig() {
return struct.convertVO(dao.listConfig());
}
@Override
public OrderChildOperateLimitConfigVO getDetail(Integer id) {
OrderChildOperateLimitConfig config = dao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
return struct.convertVO(config);
}
@Override
public void updateConfig(SaveOrderChildOperateLimitConfigParam param) {
OrderChildOperateLimitConfig config = new OrderChildOperateLimitConfig();
config.setId(param.getId());
config.setAllowUploadDistance(param.getAllowUploadDistance());
dao.updateConfig(config);
}
@Override
public void enableConfig(Integer id) {
dao.updateStatus(id, EnabledStatusEnum.ENABLE.getCode());
}
@Override
public void disableConfig(Integer id) {
dao.updateStatus(id, EnabledStatusEnum.DISABLE.getCode());
}
}
package com.clx.performance.service.impl;
import com.clx.performance.service.OrderChildOperateRecordService;
import org.springframework.stereotype.Service;
/**
* @author jiangwujie
* Date 2024-08-08
* Time 11:20
*/
@Service
public class OrderChildOperateRecordServiceImpl implements OrderChildOperateRecordService {
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论