提交 d37112c5 authored 作者: jiangwujie's avatar jiangwujie

merge to test

......@@ -6,7 +6,7 @@
<groupId>com.clx.cy</groupId>
<artifactId>performance-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>${clx-performance-api.version}</version>
<name>performance-api</name>
<parent>
......
......@@ -16,6 +16,7 @@ public enum AppEnum {
public enum UniqueIdentifier {
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
......@@ -193,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;
}
}
......@@ -4,6 +4,9 @@ import com.msl.common.enums.ResultEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
@Getter
@AllArgsConstructor
......@@ -192,7 +195,27 @@ public enum PerformanceResultEnum implements ResultEnum {
SETTLEMENT_OWNER_CONFIRM_SETTLEMENT_ERROR(2113, "运单需重新分配开票公司,请联系结算人员处理"),
/**
* 运单装车限制配置
*/
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 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);
}
}
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;
/**
* 装车范围校验检查参数
*/
@Getter
@Setter
@NoArgsConstructor
public class NeedAlertSuperviseInfoParam {
@ApiModelProperty(value = "运单编号", example = "100000000")
@NotBlank(message = "运单编号不能为空")
private String childNo;
@ApiModelProperty(value = "类型 1-监装 2-监卸", example = "1")
@NotNull(message = "类型不能为空")
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.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;
import cn.hutool.json.JSONUtil;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
......@@ -9,10 +10,12 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -258,4 +261,31 @@ public class OrderChildVO {
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 = "发货地采样照片")
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<>();
}
}
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
......@@ -198,7 +198,6 @@ public class OrderGoodsVO {
return OrderGoodsEnum.SendWaitModeEnum.getMsgByCode(sendWaitMode);
}
@ApiModelProperty("当前货单总吨数是否超过总拉运量 1:超过 ")
private Integer overOrderWeight;
}
\ No newline at end of file
......@@ -102,6 +102,10 @@
<groupId>com.smart</groupId>
<artifactId>smart-weight-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.clx.cy</groupId>
<artifactId>purchase-manage-sdk</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.msl</groupId>-->
......
......@@ -35,5 +35,13 @@ public class ClxMessageConfig {
private Integer vehicleWarnChannelId;
//线路报警短信模板
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;
}
}
......@@ -195,4 +195,15 @@ public class AppDriverOrderChildController {
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) {
return Result.ok(orderChildService.needAlertSuperviseInfo(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();
}
}
......@@ -2,24 +2,19 @@ package com.clx.performance.controller.pc;
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.ArtificialCancelOrderQueryParam;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.TransportSyncService;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import com.msl.common.base.PageData;
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.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......@@ -50,8 +45,8 @@ public class OrderCancelController {
@ApiOperation(value = "客服取消运单查询", notes = "<br>By:胡宇帆")
@GetMapping("/findArtificialCancelOrder")
public Result<OrderChildVO> findArtificialCancelOrder(@RequestParam String orderChildNo) {
OrderChildVO vo = orderCancelService.findArtificialCancelOrder(orderChildNo);
public Result<OrderChildVO> findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
OrderChildVO vo = orderCancelService.findArtificialCancelOrder(param);
return Result.ok(vo);
}
......@@ -70,5 +65,19 @@ public class OrderCancelController {
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.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);
}
......@@ -152,7 +152,7 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
* @param orderChildNo
* @return
*/
OrderChildVO findArtificialCancelOrder(String orderChildNo);
OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param);
IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param);
......
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);
}
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)
);
}
}
......@@ -442,8 +442,8 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
}
@Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
return baseMapper.findArtificialCancelOrder(orderChildNo);
public OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
return baseMapper.findArtificialCancelOrder(param);
}
@Override
......
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);
}
}
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);
}
}
}
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> {
}
......@@ -9,10 +9,7 @@ import com.clx.performance.dto.linewarn.LineWarnOrderChildStatisticsDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
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.param.pc.*;
import com.clx.performance.sqlProvider.OrderChildSqlProvider;
import com.clx.performance.vo.MonthInComeAndOrderedVO;
import com.clx.performance.vo.app.OrderChildVO;
......@@ -84,7 +81,7 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
@SelectProvider(type = OrderChildSqlProvider.class, method = "findArtificialCancelOrder")
OrderChildVO findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo);
OrderChildVO findArtificialCancelOrder(@Param("param") ArtificialCancelOrderQueryParam param);
@SelectProvider(type = OrderChildSqlProvider.class, method = "orderChildCancelRecord")
IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderChildVO> page, @Param(value = "param") OrderChildCancelRecordParam param);
......
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);
}
......@@ -53,7 +53,7 @@ public class App implements HasKey<Integer> {
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime; //
private LocalDateTime createTime;
@TableField("modified_time")
@ApiModelProperty("修改时间")
......
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;
}
}
......@@ -106,6 +106,19 @@ public class OrderChild implements HasKey<Integer> {
private BigDecimal deposit; //接单保证金(分/车)
private LocalDateTime poundAuditTime; //磅单审核通过时间
/**
* 驶入驶离货源地状态 0 初始 1 驶入 2 驶离
*/
private Integer enterExitSendStatus;
/**
* 驶离通知状态 0 未通知 1 已通知
*/
private Integer exitNoticeStatus;
/**
* 是否解除监装限制 0 未解除 1 解除
*/
private Integer removeLoadLimitStatus;
private LocalDateTime createTime; //创建时间
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);
}
package com.clx.performance.service;
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.OrderChildCancelRecordParam;
import com.clx.performance.vo.app.OrderChildVO;
import com.msl.common.base.PageParam;
import java.util.List;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
public interface OrderCancelService {
......@@ -47,7 +47,20 @@ public interface OrderCancelService {
* @param orderChildNo
* @return
*/
OrderChildVO findArtificialCancelOrder(String orderChildNo);
OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param);
IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param);
/**
* 异常运单处理记录
* @param param
* @return
*/
IPage<OrderChildOperateRecordVO> orderChildOperateRecord(OrderChildCancelRecordParam param);
/**
* 客服移除监装限制
* @param param
*/
void removeLoadLimit(ArtificialCancelOrderParam param);
}
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 {
}
......@@ -110,7 +110,11 @@ public interface OrderChildService {
List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo);
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
OrderChildLoadRangeCheckResultVO loadRangeCheck(OrderChildLoadRangeCheckParam param);
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
void orderChildMessageNotice();
NeedAlertSuperviseInfoResultVO needAlertSuperviseInfo(NeedAlertSuperviseInfoParam param);
}
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());
}
}
......@@ -15,6 +15,7 @@ import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.component.OwnerAccountComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildOperateRecordDao;
import com.clx.performance.dao.OrderChildPoundAuditDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.OrderCancelDTO;
......@@ -22,14 +23,18 @@ import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildOperateRecord;
import com.clx.performance.model.OrderChildPoundAudit;
import com.clx.performance.model.OrderGoods;
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.OrderChildCancelRecordParam;
import com.clx.performance.service.*;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import com.clx.performance.vo.pc.OrderChildOperateRecordVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.enums.owner.FreezeSettingEnum;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -91,6 +96,7 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OrderChildPoundAuditDao orderChildPoundAuditDao;
private final OrderChildOperateRecordDao orderChildOperateRecordDao;
@Override
......@@ -504,6 +510,16 @@ public class OrderCancelServiceImpl implements OrderCancelService {
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(orderChildNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
//运单状态不在【装车成功】【前往目的地】【到达目的地】【收货待确认】范围中,不允许取消
if (!Arrays.asList(OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.UNLOAD.getCode())
.contains(orderChild.getStatus())) {
log.error("运单:{} 状态:{}不在【装车成功】【前往目的地】【到达目的地】【收货待确认】范围中,不允许取消", orderChildNo, orderChild.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作");
}
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setStatus(OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode());
......@@ -519,15 +535,21 @@ public class OrderCancelServiceImpl implements OrderCancelService {
// 运单取消
orderChildPostService.orderChildCancelByArtificial(orderChildNo);
// 保存操作记录
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode(), OrderChildEnum.Status.ARTIFICIAL_CANCEL.getName(),
OrderChildLogEnum.CreateType.ARTIFICIAL.getCode(), 0L, OrderChildLogEnum.CreateType.ARTIFICIAL.getMsg()
);
// 保存运单处理记录
saveOrderChildOperateRecord(orderChild, OrderChildEnum.OperateRecordType.CANCEL_ORDER, remark);
}
@Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
OrderChildVO artificialCancelOrder = orderChildDao.findArtificialCancelOrder(orderChildNo);
public OrderChildVO findArtificialCancelOrder(ArtificialCancelOrderQueryParam param) {
//检查参数
param.checkParam();
OrderChildVO artificialCancelOrder = orderChildDao.findArtificialCancelOrder(param);
if (artificialCancelOrder == null) {
return null;
}
......@@ -551,5 +573,59 @@ public class OrderCancelServiceImpl implements OrderCancelService {
return page;
}
@Override
public IPage<OrderChildOperateRecordVO> orderChildOperateRecord(OrderChildCancelRecordParam param) {
return orderChildOperateRecordDao.orderChildOperateRecord(param);
}
@Override
public void removeLoadLimit(ArtificialCancelOrderParam param) {
OrderChild orderChild = orderChildDao.getByChildNo(param.getOrderChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
//判断运单状态【已接单】【前往货源地】【到达货源地】时可对该运单解除装车限制,否则toast:不可操作
if (!Arrays.asList(OrderChildEnum.Status.CREATED.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode())
.contains(orderChild.getStatus())) {
log.error("运单:{} 状态:{}不在【已接单】【前往货源地】【到达货源地】范围中,不允许解除装车限制", param.getOrderChildNo(), orderChild.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_CANCEL_FORBID, "不可操作");
}
OrderChild update = new OrderChild();
update.setId(orderChild.getId());
update.setRemoveLoadLimitStatus(OrderChildEnum.RemoveLoadLimitStatus.REMOVED.getCode());
orderChildDao.updateEntityByKey(update);
//保存运单处理记录
saveOrderChildOperateRecord(orderChild, OrderChildEnum.OperateRecordType.REMOVE_LIMIT, param.getRemark());
//保存运单操作记录
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
orderChild.getStatus(), OrderChildEnum.OperateRecordType.REMOVE_LIMIT.getMsg(),
OrderChildLogEnum.CreateType.ARTIFICIAL.getCode(), 0L, OrderChildLogEnum.CreateType.ARTIFICIAL.getMsg()
);
}
private void saveOrderChildOperateRecord(OrderChild orderChild, OrderChildEnum.OperateRecordType type, String remark) {
OrderChildOperateRecord record = new OrderChildOperateRecord();
record.setChildNo(orderChild.getChildNo());
record.setType(type.getCode());
record.setTruckNo(orderChild.getTruckNo());
record.setDriverName(orderChild.getDriverName());
record.setDriverMobile(orderChild.getDriverMobile());
record.setSendAddress(orderChild.getSendAddress());
record.setReceiveAddress(orderChild.getReceiveAddress());
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderChild.getOrderNo());
if (orderInfoFeign != null) {
record.setGoodTypeName(orderInfoFeign.getGoodsTypeName());
}
record.setRemark(remark);
record.setOperateTime(LocalDateTime.now());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
record.setOperator(loginUserInfo.getUserName());
record.setCreatedTime(LocalDateTime.now());
record.setModifiedTime(LocalDateTime.now());
orderChildOperateRecordDao.saveEntity(record);
}
}
\ No newline at end of file
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 {
}
......@@ -175,7 +175,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(residueWeight) > 0 ? BigDecimal.ZERO : residueWeight);
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
//货源地信息
orderGoodsVO.setSendContact(orderInfoFeign.getSendContact());
orderGoodsVO.setSendContactPhone(orderInfoFeign.getSendContactPhone());
......
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
import com.clx.performance.vo.app.OrderChildVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class OrderChildOperateRecordSqlProvider {
public String orderChildOperateRecord(@Param("page") Page<OrderChildVO> page, @Param("param") OrderChildCancelRecordParam param) {
return new SQL() {{
SELECT("id," +
"child_no," +
"type," +
"truck_no," +
"driver_name," +
"driver_mobile," +
"send_address," +
"receive_address," +
"good_type_name," +
"remark," +
"date_format(operate_time, '%Y-%m-%d %H:%i:%s') as operateTime," +
"operator"
);
FROM("order_child_operate_record ");
ORDER_BY("created_time desc");
}}.toString();
}
}
......@@ -6,10 +6,7 @@ import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.app.PageOrderChildOfDriverParam;
import com.clx.performance.param.app.PageOrderChildOfDriverSearchParam;
import com.clx.performance.param.pc.OrderChildCancelRecordParam;
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.param.pc.*;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.performance.vo.pc.PageCarrierOrderChildVO;
import com.clx.performance.vo.pc.PageOrderChildPoundAuditVO;
......@@ -19,6 +16,8 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
......@@ -182,21 +181,38 @@ public class OrderChildSqlProvider {
return sql;
}
public String findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo) {
String sql = "select child_no,goods_name,freight_price,order_no," +
"send_address,receive_address," +
"driver_user_no, driver_name,driver_mobile," +
"truck_no," +
"unload_pound_no,weight," +
"cancel_remark," +
"pound_status,status," +
"date_format(load_deadline, '%Y-%m-%d %H:%i:%s') as loadDeadline," +
"date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime," +
"date_format(unload_time, '%Y-%m-%d %H:%i:%s') as unloadTime from order_child where child_no = #{orderChildNo}";
sql += " and status >="+ OrderChildEnum.Status.LOAD.getCode();
sql += " and status <"+ OrderChildEnum.Status.UNSETTLE.getCode();
return sql;
public String findArtificialCancelOrder(@Param("param") ArtificialCancelOrderQueryParam param) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT child_no, goods_name, freight_price, order_no, ");
sql.append("send_address, receive_address, ");
sql.append("driver_user_no, driver_name, driver_mobile, ");
sql.append("truck_no, unload_pound_no, weight, ");
sql.append("cancel_remark, pound_status, status, ");
sql.append("DATE_FORMAT(load_deadline, '%Y-%m-%d %H:%i:%s') AS loadDeadline, ");
sql.append("DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime, ");
sql.append("DATE_FORMAT(unload_time, '%Y-%m-%d %H:%i:%s') AS unloadTime ");
sql.append("FROM order_child ");
sql.append("WHERE 1=1 ");
List<String> conditions = new ArrayList<>();
if (StringUtils.isNotBlank(param.getOrderChildNo())) {
conditions.add("child_no = #{param.orderChildNo}");
}
if (StringUtils.isNotBlank(param.getTruckNo())) {
conditions.add("truck_no = #{param.truckNo}");
}
List<Integer> statuses = Arrays.asList(
OrderChildEnum.Status.CREATED.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode()
);
conditions.add("status IN (" + StringUtils.join(statuses, ", ") + ")");
sql.append("AND ");
sql.append(StringUtils.join(conditions, " AND "));
return sql.toString();
}
public String orderChildCancelRecord(@Param("page") Page<OrderChildVO> page, @Param("param") OrderChildCancelRecordParam param) {
......
package com.clx.performance.struct;
import com.clx.performance.model.DriverNoticeConfig;
import com.clx.performance.vo.pc.DriverNoticeConfigVO;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface DriverNoticeConfigStruct {
DriverNoticeConfigVO convertVO(DriverNoticeConfig config);
}
package com.clx.performance.struct;
import com.clx.performance.model.OrderChildOperateLimitConfig;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface OrderChildOperateLimitConfigStruct {
OrderChildOperateLimitConfigVO convertVO(OrderChildOperateLimitConfig config);
}
package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.EnabledStatusEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderChildLoadRangeCheckParam;
import com.clx.performance.service.OrderChildOperateLimitConfigService;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.app.OrderChildLoadRangeCheckResultVO;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
import com.msl.common.base.Optional;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import java.math.BigDecimal;
import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class OrderChildServiceImpl3Test {
@Mock
private OrderGoodsDao orderGoodsDao;
@Mock
private OrderChildDao orderChildDao;
@Mock
private GdService gdService;
@Mock
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
@InjectMocks
private OrderChildServiceImpl orderChildService;
private OrderChildLoadRangeCheckParam param;
@BeforeEach
void setUp() {
param = new OrderChildLoadRangeCheckParam();
param.setChildNo("testChildNo");
param.setLatitude(BigDecimal.TEN);
param.setLongitude(BigDecimal.TEN);
}
/**
* 无配置情况
*/
@Test
void loadRangeCheck_whenConfigIsNull_shouldReturnError() {
when(orderChildDao.getByChildNo(param.getChildNo())).thenReturn(Optional.of(new OrderChild()));
when(orderGoodsDao.getByOrderGoodsNo(anyString())).thenReturn(Optional.of(new OrderGoods()));
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR.getCode(), result.getCode());
}
@Test
void loadRangeCheck_whenConfigIsDisabled_shouldReturnDisabled() {
OrderChildOperateLimitConfigVO config = new OrderChildOperateLimitConfigVO();
config.setStatus(EnabledStatusEnum.DISABLE.getCode());
// 限制装车距离为1.5
config.setAllowUploadDistance(new BigDecimal("1.5"));
OrderChild orderChild = new OrderChild();
orderChild.setOrderGoodsNo("ordergoodsno");
orderChild.setOrderNo("orderno");
orderChild.setChildNo("orderno");
orderChild.setStatus(OrderChildEnum.Status.GO_TO_SEND.getCode());
OrderGoods orderGoods = new OrderGoods();
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(config);
when(orderChildDao.getByChildNo(param.getChildNo())).thenReturn(Optional.of(orderChild));
when(orderGoodsDao.getByOrderGoodsNo(anyString())).thenReturn(Optional.of(orderGoods));
GdRouteDTO route = new GdRouteDTO();
route.setDistance(2000);
when(gdService.getRoute(any(), any(), any(), any())).thenReturn(Collections.singletonList(route));
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getCode(), result.getCode());
}
/**
* 在装车范围内,不进行提示
*/
@Test
void loadRangeCheck_ok() {
OrderChildOperateLimitConfigVO config = new OrderChildOperateLimitConfigVO();
config.setStatus(EnabledStatusEnum.ENABLE.getCode());
// 限制装车距离为1.5
config.setAllowUploadDistance(new BigDecimal("1.5"));
OrderChild orderChild = new OrderChild();
orderChild.setOrderGoodsNo("ordergoodsno");
orderChild.setOrderNo("orderno");
orderChild.setChildNo("orderno");
orderChild.setStatus(OrderChildEnum.Status.GO_TO_SEND.getCode());
OrderGoods orderGoods = new OrderGoods();
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(config);
when(orderChildDao.getByChildNo(param.getChildNo())).thenReturn(Optional.of(orderChild));
when(orderGoodsDao.getByOrderGoodsNo(anyString())).thenReturn(Optional.of(orderGoods));
GdRouteDTO route = new GdRouteDTO();
//距离装车距离为1000
route.setDistance(1000);
when(gdService.getRoute(any(), any(), any(), any())).thenReturn(Collections.singletonList(route));
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(OrderChildEnum.NeedAlertEnum.OK.getCode(), result.getCode());
}
/**
* 运单不存在
*/
@Test
void loadRangeCheck_whenOrderChildNotFound_shouldReturnNotFound() {
OrderChildOperateLimitConfigVO config = new OrderChildOperateLimitConfigVO();
config.setStatus(EnabledStatusEnum.ENABLE.getCode());
// 限制装车距离为1.5
config.setAllowUploadDistance(new BigDecimal("1.5"));
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(config);
when(orderChildDao.getByChildNo(param.getChildNo())).thenReturn(new Optional<>());
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.ORDER_CHILD_NO_FOUND.getCode(), result.getCode());
assertEquals(OrderChildEnum.NeedAlertEnum.FAIL.getCode(), result.getNeedAlert());
}
}
package com.clx.performance.service.impl;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.app.OrderChildLoadRangeCheckParam;
import com.clx.performance.service.OrderChildOperateLimitConfigService;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.app.OrderChildLoadRangeCheckResultVO;
import com.clx.performance.vo.pc.OrderChildOperateLimitConfigVO;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.math.BigDecimal;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class OrderChildServiceImplTest {
@InjectMocks
private OrderChildServiceImpl orderChildService;
@Mock
private OrderChildOperateLimitConfigService orderChildOperateLimitConfigService;
@Mock
private GdService gdService;
@Mock
private OrderGoodsDao orderGoodsDao;
@Mock
private OrderChildDao orderChildDao;
private OrderChildLoadRangeCheckParam param;
private OrderChildOperateLimitConfigVO config;
@Before
public void setUp() {
param = new OrderChildLoadRangeCheckParam();
param.setLatitude(new BigDecimal("32.2304"));
param.setLongitude(new BigDecimal("122.4737"));
OrderChild orderChild = new OrderChild();
orderChild.setOrderGoodsNo("123456789");
orderChild.setTruckNo("黑A88888");
Mockito.<com.msl.common.base.Optional<OrderChild>>when(orderChildDao.getByChildNo(param.getChildNo())).thenReturn(com.msl.common.base.Optional.of(orderChild));
// 预设的返回值,根据具体业务逻辑可能需要调整
OrderGoods orderGoods = new OrderGoods();
orderGoods.setSendLatitude(BigDecimal.valueOf(31.2304));
orderGoods.setSendLongitude(BigDecimal.valueOf(121.4737));
Mockito.<com.msl.common.base.Optional<OrderGoods>>when(orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo())).thenReturn(com.msl.common.base.Optional.of(orderGoods));
// Mock配置
config = new OrderChildOperateLimitConfigVO();
config.setAllowUploadDistance(BigDecimal.valueOf(2));
config.setStatus(1);
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(config);
}
@Test
public void testLoadRangeCheckSuccess() {
GdRouteDTO gdRoute = new GdRouteDTO();
gdRoute.setDistance(1000);
// 假设高德服务返回了一个有效的路线
Mockito.when(gdService.getRoute(any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class))).thenReturn(Arrays.asList(gdRoute));
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(0, result.getCode().intValue());
assertEquals("验证通过", result.getMsg());
}
@Test
public void testLoadRangeCheckFailDueToConfigNull() {
// 假设没有配置
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(null);
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR.getCode(), result.getCode().intValue());
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_ERROR.getMsg(), result.getMsg());
}
@Test
public void testLoadRangeCheckFailDueToDisabledConfig() {
// 假设配置被禁用
OrderChildOperateLimitConfigVO config = new OrderChildOperateLimitConfigVO();
config.setStatus(0);
config.setAllowUploadDistance(new BigDecimal("2"));
when(orderChildOperateLimitConfigService.listConfig()).thenReturn(config);
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(0, result.getNeedAlert().intValue());
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getCode(), result.getCode().intValue());
assertEquals(PerformanceResultEnum.ORDER_CHILD_LOAD_LIMIT_CONFIG_DISABLED.getMsg(), result.getMsg());
}
@Test
public void testLoadRangeCheckFailDueToTruckLocation() {
param.setLatitude(null);
param.setLongitude(null);
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.TRUCK_LOCATION_ERROR.getCode(), result.getCode().intValue());
assertEquals(String.format(PerformanceResultEnum.TRUCK_LOCATION_ERROR.getMsg(), config.getAllowUploadDistance()), result.getMsg());
}
@Test
public void testLoadRangeCheckFailDueToDistanceOut() {
GdRouteDTO gdRoute = new GdRouteDTO();
gdRoute.setDistance(5000);
Mockito.when(gdService.getRoute(any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class))).thenReturn(Arrays.asList(gdRoute));
OrderChildLoadRangeCheckResultVO result = orderChildService.loadRangeCheck(param);
assertEquals(PerformanceResultEnum.TRUCK_LOCATION_OUT_OF_SEND_RANGE.getCode(), result.getCode().intValue());
assertEquals(String.format(PerformanceResultEnum.TRUCK_LOCATION_OUT_OF_SEND_RANGE.getMsg(), config.getAllowUploadDistance()), result.getMsg());
}
}
package com.clx.performance.sqlProvider;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.pc.ArtificialCancelOrderQueryParam;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@RunWith(JUnit4.class)
public class OrderChildSqlProviderTest {
@Test
public void testFindArtificialCancelOrderWithParams() {
ArtificialCancelOrderQueryParam param = new ArtificialCancelOrderQueryParam();
param.setOrderChildNo("testChildNo");
param.setTruckNo("testTruckNo");
OrderChildSqlProvider orderChildSqlProvider = new OrderChildSqlProvider();
String sql = orderChildSqlProvider.findArtificialCancelOrder(param);
String expectedSql = "SELECT child_no, goods_name, freight_price, order_no, "
+ "send_address, receive_address, "
+ "driver_user_no, driver_name, driver_mobile, "
+ "truck_no, unload_pound_no, weight, "
+ "cancel_remark, pound_status, status, "
+ "DATE_FORMAT(load_deadline, '%Y-%m-%d %H:%i:%s') AS loadDeadline, "
+ "DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime, "
+ "DATE_FORMAT(unload_time, '%Y-%m-%d %H:%i:%s') AS unloadTime "
+ "FROM order_child "
+ "WHERE 1=1 "
+ "AND child_no = #{param.orderChildNo} "
+ "AND truck_no = #{param.truckNo} "
+ "AND status IN (10, 30, 40, 50, 60, 70, 80)";
Assert.assertEquals("SQL statement does not match expected output", expectedSql, sql);
}
@Test
public void testFindArtificialCancelOrderWithoutParams() {
ArtificialCancelOrderQueryParam param = new ArtificialCancelOrderQueryParam();
OrderChildSqlProvider orderChildSqlProvider = new OrderChildSqlProvider();
String sql = orderChildSqlProvider.findArtificialCancelOrder(param);
List<Integer> statusList = Arrays.asList(
OrderChildEnum.Status.CREATED.getCode(),
OrderChildEnum.Status.GO_TO_SEND.getCode(),
OrderChildEnum.Status.ARRIVE_SEND.getCode(),
OrderChildEnum.Status.LOAD.getCode(),
OrderChildEnum.Status.GO_TO_RECEIVE.getCode(),
OrderChildEnum.Status.ARRIVE_RECEIVE.getCode(),
OrderChildEnum.Status.UNLOAD.getCode()
);
String expectedSql = "SELECT child_no, goods_name, freight_price, order_no, "
+ "send_address, receive_address, "
+ "driver_user_no, driver_name, driver_mobile, "
+ "truck_no, unload_pound_no, weight, "
+ "cancel_remark, pound_status, status, "
+ "DATE_FORMAT(load_deadline, '%Y-%m-%d %H:%i:%s') AS loadDeadline, "
+ "DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS createTime, "
+ "DATE_FORMAT(unload_time, '%Y-%m-%d %H:%i:%s') AS unloadTime "
+ "FROM order_child "
+ "WHERE 1=1 "
+ "AND status IN (" + String.join(", ", statusList.stream().map(String::valueOf).collect(Collectors.toList())) + ")";
Assert.assertEquals("SQL statement does not match expected output for empty parameters", expectedSql, sql);
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论