订单支持新增子订单和查询

This commit is contained in:
gaoqr
2026-04-03 17:47:34 +08:00
parent 73ee746c8e
commit a644dc95d0
9 changed files with 75 additions and 17 deletions
@@ -65,6 +65,12 @@ public class AssertUtils {
}
}
public static void notEmpty(Object object, ErrorCode errorCode, Object... params) {
if (object == null) {
throw new ServiceException(errorCode, params);
}
}
public static void notEmpty(List<?> array ,Object object, ErrorCode errorCode) {
if (object == null || ObjectUtils.isEmpty(array)) {
@@ -38,6 +38,7 @@ public class ErrorCodeConstants {
public static final ErrorCode ORDER_DATA_ERROR = new ErrorCode(1_003_109_004, "订单/排单的数据已无法使用,请删除重新");
public static final ErrorCode ORDER_PLAN_ID_NOT_NULL = new ErrorCode(1_003_109_005, "订单或排单ID至少传入一个");
public static final ErrorCode ORDER_PLAN_ID_IS_ONE = new ErrorCode(1_003_109_006, "订单id与排单id与大板分类ID只能传一个");
public static final ErrorCode PARENT_ORDER_NOT_EXISTS = new ErrorCode(1_003_109_007, "上级订单{}不存在");
// ========== 订单 1_003_110_000 ==========
public static final ErrorCode MODULE_NOT_EXISTS = new ErrorCode(1_003_110_000, "模块不存在");
@@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import java.util.List;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 订单表 order_{N} Response VO")
@@ -88,4 +90,7 @@ public class OrderRespVO {
private LocalDateTime createTime;
private Boolean deleted;
@Schema(description = "子单列表")
private List<OrderRespVO> child;
}
@@ -17,7 +17,7 @@ public class OrderSaveReqVO {
private Long id;
@Schema(description = "父单号")
private Long parentNo;
private Long parentId;
@Schema(description = "源订单号")
private String apiOrderId;
@@ -6,6 +6,7 @@ import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler;
import lombok.*;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单表 order_{N} DO
@@ -35,7 +36,7 @@ public class OrderDO extends BaseDO {
/**
* 父单号
*/
private Long parentNo;
private Long parentId;
/**
* 源订单号
*/
@@ -146,5 +147,14 @@ public class OrderDO extends BaseDO {
*/
private Double plannedPlateArea;
/**
* 版本号
*/
private int version;
/**
* 子单列表
*/
@TableField(exist = false)
private List<OrderDO> child;
}
@@ -36,6 +36,8 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import static com.cf.imes.module.executor.dal.dataobject.order.OrderDO.PARENT_ID_ROOT;
/**
* 订单表 order_{N} Mapper
*
@@ -46,7 +48,7 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
default PageResult<OrderDO> selectPage(OrderPageReqVO reqVO) {
LambdaQueryWrapperX<OrderDO> query = new LambdaQueryWrapperX<OrderDO>()
.eqIfPresent(OrderDO::getParentNo, reqVO.getParentNo())
.eqIfPresent(OrderDO::getParentId, reqVO.getParentNo())
.likeIfPresent(OrderDO::getId, reqVO.getId() == null ? null : reqVO.getId())
.betweenIfPresent(OrderDO::getDeliveryDate, reqVO.getDeliveryDate())
.eqIfPresent(OrderDO::getApiOrderId, reqVO.getApiOrderId())
@@ -66,7 +68,8 @@ public interface OrderMapper extends BaseMapperX<OrderDO> {
.eqIfPresent(OrderDO::getRemark, reqVO.getRemark())
.eqIfPresent(OrderDO::getOrganId, reqVO.getOrganId())
.eqIfPresent(OrderDO::getDeleted, reqVO.getDeleted())
.betweenIfPresent(OrderDO::getCreateTime, reqVO.getCreateTime());
.betweenIfPresent(OrderDO::getCreateTime, reqVO.getCreateTime())
.eq(OrderDO::getParentId, PARENT_ID_ROOT);
if (reqVO.getOrder() == null) {
query.orderByDesc(OrderDO::getId);
@@ -18,7 +18,6 @@ import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
@@ -70,7 +69,6 @@ import com.cf.imes.module.executor.service.customplateno.CustomPlateNoGenerateSe
import com.cf.imes.module.executor.service.orderImport.OrderImportHandler;
import com.cf.imes.module.executor.service.orderImport.factory.OrderImportHandlerFactory;
import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService;
import com.cf.imes.module.executor.service.plan.PlanService;
import com.cf.imes.module.executor.util.deviseData.structure.FieldConstants;
import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail;
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
@@ -157,16 +155,12 @@ public class OrderServiceImpl implements OrderService {
@Resource
private IdentifierGenerator identifierGenerator;
@Resource
private SnowflakeIdWorker3rd idWorker;
@Resource
private PartsMapper partsMapper;
@Resource
private CustomPlateNoGenerateService customPlateNoGenerateService;
@Resource
private PlanItemMapper planItemMapper;
@@ -182,9 +176,6 @@ public class OrderServiceImpl implements OrderService {
public static final Double ZERO = 0.0;
@Resource
private PlanService planService;
@Autowired
private OrderImportHandlerFactory orderImportHandlerFactory;
@@ -195,6 +186,8 @@ public class OrderServiceImpl implements OrderService {
public Long createOrder(OrderSaveReqVO createReqVO) {
//校验手机号是否合法
validatePhoneNumber(createReqVO.getPhoneNumber());
// 校验上级订单是否存在
validateParentOrderExists(createReqVO.getParentId());
//验证自定义单号是否存在,业务员、拆单员是否存在
validateCustomOrderNoExists(createReqVO.getCustomOrderNo());
@@ -261,7 +254,35 @@ public class OrderServiceImpl implements OrderService {
@Override
public PageResult<OrderDO> getOrderPage(OrderPageReqVO pageReqVO) {
return orderMapper.selectPage(pageReqVO.setOrganId(getUserOrganId()));
PageResult<OrderDO> pageResult = orderMapper.selectPage(pageReqVO.setOrganId(getUserOrganId()));
Long pageResultTotal = pageResult.getTotal();
if (pageResultTotal > 0) {
List<OrderDO> orderDOS = pageResult.getList();
// 1、整理所有订单id
List<Long> orderIds = orderDOS.stream().map(OrderDO::getId).toList();
// 2、查询订单id列表对应的子单
List<OrderDO> childList = orderMapper.selectList(
new LambdaQueryWrapper<OrderDO>()
.in(OrderDO::getParentId, orderIds)
.orderByDesc(OrderDO::getId)
);
if (CollUtil.isEmpty(childList)) {
return pageResult;
}
// 3、 按 parentId 分组
Map<Long, List<OrderDO>> childMap = childList.stream()
.collect(Collectors.groupingBy(OrderDO::getParentId));
// 4、 回填 child
for (OrderDO order : orderDOS) {
order.setChild(childMap.getOrDefault(order.getId(), Collections.emptyList()));
}
return new PageResult<>(orderDOS, pageResultTotal);
}
return pageResult;
}
@Override
@@ -763,6 +784,18 @@ public class OrderServiceImpl implements OrderService {
}
}
/**
* 校验父订单是否存在
*
* @param parentOrderId
*/
private void validateParentOrderExists(Long parentOrderId) {
if (ObjectUtil.isNull(parentOrderId)) {
return;
}
AssertUtils.notEmpty(orderMapper.selectById(parentOrderId), PARENT_ORDER_NOT_EXISTS, parentOrderId);
}
// 校验手机号是否合法
private void validatePhoneNumber(String phoneNumber) {
// 定义手机号正则表达式
@@ -1702,7 +1735,7 @@ public class OrderServiceImpl implements OrderService {
// 收集父ID
Set<Long> parentIds = orders.stream()
.map(OrderDO::getParentNo)
.map(OrderDO::getParentId)
.filter(id -> ObjectUtil.notEqual(id, OrderDO.PARENT_ID_ROOT))
.collect(Collectors.toSet());
@@ -317,7 +317,7 @@ public class ApiTypeRealize {
OrderDO orderDO = OrderDO.builder()
.id(orderId)
.apiOrderId(orderNo)
.parentNo(0L)
.parentId(0L)
.orderDate(orderDate.atStartOfDay())
.deliveryDate(deliveryDate.atStartOfDay())
.orderType(OrderTypeEnum.MAIN_ORDER.getStatus())
@@ -43,7 +43,7 @@ public class OrderDO extends BaseDO {
/**
* 父单号
*/
private Long parentNo;
private Long parentId;
/**
* 源订单号
*/