feat: 完成结算订单的生成接口

This commit is contained in:
chenxiky 2025-07-26 14:46:59 +08:00
parent 0f01c52dd9
commit e9d1f98e65
7 changed files with 74 additions and 17 deletions

View File

@ -640,7 +640,7 @@ public class OrderBiz {
if (CollectionUtil.isEmpty(orderMainList)) {
throw new BadRequestException("订单不存在");
}
// TODO 待优化提示完整错误信息
// 待优化提示完整错误信息
for (OrderMain orderMain : orderMainList) {
if (!orderIds.contains(orderMain.getId())) {
throw new BadRequestException("订单不存在");
@ -655,12 +655,35 @@ public class OrderBiz {
Map<Long, List<OrderMain>> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId));
List<SettlementMain> settlementMainList = new ArrayList<>();
Long currentUserId = SecurityUtils.getCurrentUserId();
// 构建结算订单数据
attractionGroupMap.forEach((attractionId, orderList) -> {
// 按照订单创建时间进行升序牌排序
orderList.sort(Comparator.comparing(OrderMain::getCreateTime));
SettlementMain settlementMain = new SettlementMain();
settlementMain.setAttractionId(attractionId);
// 生成订单编号年月日 + 五位数字 Redis 进行自增
String datePrefix = LocalDateTime.now().format(DateTimeFormatter.ofPattern(OrderConstant.DATE_PREFIX));
String serialNumber = redisUtils.increase(OrderRedisConstant.SETTLEMENT_NO_PREFIX
+ datePrefix, OrderConstant.ORDER_NO_SEQUENCE);
String batchNo = OrderConstant.SETTLEMENT_BATCH_NO_PREFIX + datePrefix + serialNumber;
settlementMain.setBatchNo(batchNo);
settlementMain.setOperatorId(currentUserId);
settlementMain.setSettlementStatus(OrderSettlementStatusEnum.NOT_SETTLED.getCode());
Date startOrderCreateTime = orderList.get(0).getOrderCreateTime();
String startOrderCreateTimeStr = DateUtil.format(startOrderCreateTime, OrderConstant.DATE_TIME_PREFIX);
String settlementTimeScope = StrUtil.EMPTY;
if (orderList.size() == 1) {
settlementTimeScope = startOrderCreateTimeStr + "~" + startOrderCreateTimeStr;
} else {
Date lastOrderCreateTime = orderList.get(orderList.size() - 1).getOrderCreateTime();
String lastOrderCreateTimeStr = DateUtil.format(lastOrderCreateTime, OrderConstant.DATE_TIME_PREFIX);
settlementTimeScope = startOrderCreateTimeStr + "~" + lastOrderCreateTimeStr;
}
settlementMain.setSettlementTimeScope(settlementTimeScope);
settlementMainList.add(settlementMain);
});
// 构建结算订单详情数据
// 批量新增结算订单
List<SettlementMain> settlementMains = settlementMainService.batchInsert(settlementMainList);
// 构建结算订单明细数据
List<SettlementDetail> settlementDetailList = buildSettlementDetail(settlementMains, attractionGroupMap);
@ -681,14 +704,18 @@ public class OrderBiz {
for (SettlementMain settlementMain : settlementMains) {
List<OrderMain> orderMainList = attractionGroupMap.get(settlementMain.getAttractionId());
for (OrderMain orderMain : orderMainList) {
SettlementDetail settlementDetail = new SettlementDetail();
SettlementDetail settlementDetail = BeanUtil.copyProperties(orderMain, SettlementDetail.class);
settlementDetail.setSettlementMainId(settlementMain.getId());
settlementDetail.setOrderId(orderMain.getId());
settlementDetail.setOrderNo(orderMain.getOrderNo());
settlementDetail.setOrderType(orderMain.getOrderType());
settlementDetail.setOrderInitiatorId(orderMain.getOrderInitiatorId());
settlementDetail.setPhone(orderMain.getPhone());
settlementDetail.setAttractionId(orderMain.getAttractionId());
// 此时结算状态为结算中
settlementDetail.setSettlementStatus(OrderSettlementStatusEnum.SETTLING.getCode());
// 自动生成的时间变为空
settlementDetail.setCreateTime(null);
settlementDetail.setCreateBy(null);
settlementDetail.setUpdateTime(null);
settlementDetail.setUpdateBy(null);
settlementDetail.setDelFlag(null);
settlementDetailList.add(settlementDetail);
}
}
return settlementDetailList;

View File

@ -64,16 +64,15 @@ public class SettlementDetail extends BaseEntity {
*/
private Long attractionId;
/**
* 客户名称
*/
private String customerName;
/**
* 路线ID
*/
private Long routeId;
/**
* 下单总金额
*/
private BigDecimal totalAmount;
/**
* 订单金额
*/

View File

@ -31,7 +31,7 @@ public class SettlementMain extends BaseEntity {
/**
* 结算批次号
*/
private Integer batchNo;
private String batchNo;
/**
* 景区ID
@ -41,12 +41,12 @@ public class SettlementMain extends BaseEntity {
/**
* 结算状态
*/
private String settlementStatus;
private Integer settlementStatus;
/**
* 结算日期
* 结算时间
*/
private Date settlementTime;
private String settlementTimeScope;
/**
* 结算操作人

View File

@ -23,5 +23,15 @@ public class OrderConstant {
*/
public static final Integer ORDER_NO_SEQUENCE = 5;
/**
* 结算批次号
*/
public static final String SETTLEMENT_BATCH_NO_PREFIX = "JS_";
/**
* 年月日 时分秒
*/
public static final String DATE_TIME_PREFIX = "yyyy-MM-dd HH:mm:ss";
}

View File

@ -2,6 +2,7 @@ package com.aircraft.modules.order.domain.constant;
/**
* 工单管理 Redis 常量
*
* @author chenxiky
* @version 1.0.0
* @since 2025/7/19
@ -12,4 +13,9 @@ public class OrderRedisConstant {
* redis 订单编号前缀 key
*/
public static final String ORDER_NO_PREFIX = "fly_order_no";
/**
* redis 结算编号前缀 key
*/
public static final String SETTLEMENT_NO_PREFIX = "fly_settlement_no";
}

View File

@ -55,4 +55,17 @@ public class OrderMainPageQueryDTO {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date queryEndTime;
/**
* 订单状态
*/
@ApiModelProperty(value = "订单状态点击生成结算订单的订单列表查询时请默认携带参数传值为2已完成")
private Integer mainOrderStatus;
/**
* 计算状态
*/
@ApiModelProperty(value = "结算状态点击生成结算订单的订单查询列表时请默认携带参数传值0未结算")
private Integer settlementStatus;
}

View File

@ -40,6 +40,8 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
// 添加时间查询条件
queryWrapper.ge(ObjectUtil.isNotNull(pageQueryDTO.getQueryStartTime()), OrderMain::getOrderCreateTime, pageQueryDTO.getQueryStartTime());
queryWrapper.le(ObjectUtil.isNotNull(pageQueryDTO.getQueryEndTime()), OrderMain::getOrderCreateTime, pageQueryDTO.getQueryEndTime());
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getMainOrderStatus()), OrderMain::getMainOrderStatus, pageQueryDTO.getMainOrderStatus());
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getSettlementStatus()), OrderMain::getSettlementStatus, pageQueryDTO.getSettlementStatus());
return list(queryWrapper);
}