feat:初始化结算订单接口代码(待完善-入参-逻辑-数据权限)

This commit is contained in:
chenxiky 2025-07-25 00:31:04 +08:00
parent ceda53a5ae
commit 9d602b0011
11 changed files with 286 additions and 12 deletions

View File

@ -5,9 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.aircraft.exception.BadRequestException;
import com.aircraft.modules.order.domain.OrderDetail;
import com.aircraft.modules.order.domain.OrderMain;
import com.aircraft.modules.order.domain.OrderOperator;
import com.aircraft.modules.order.domain.*;
import com.aircraft.modules.order.domain.constant.OrderConstant;
import com.aircraft.modules.order.domain.constant.OrderRedisConstant;
import com.aircraft.modules.order.domain.dto.AddOrderDTO;
@ -17,11 +15,10 @@ import com.aircraft.modules.order.domain.dto.UpdateOrderDTO;
import com.aircraft.modules.order.domain.enums.MainOrderStatusEnum;
import com.aircraft.modules.order.domain.enums.OrderSettlementStatusEnum;
import com.aircraft.modules.order.domain.enums.OrderTaskStatusEnum;
import com.aircraft.modules.order.domain.enums.SettlementStatusEnum;
import com.aircraft.modules.order.domain.vo.OrderAllDetailVO;
import com.aircraft.modules.order.domain.vo.OrderMainPageQueryVO;
import com.aircraft.modules.order.service.IOrderDetailService;
import com.aircraft.modules.order.service.IOrderMainService;
import com.aircraft.modules.order.service.IOrderOperatorService;
import com.aircraft.modules.order.service.*;
import com.aircraft.modules.route.domain.CpRoute;
import com.aircraft.modules.route.service.CpRouteService;
import com.aircraft.modules.system.domain.AttachmentMaterial;
@ -80,6 +77,10 @@ public class OrderBiz {
private EmEmployeesService emEmployeesService;
@Resource
private CpRouteService cpRouteService;
@Resource
private ISettlementMainService settlementMainService;
@Resource
private ISettlementDetailService settlementDetailService;
public List<OrderMainPageQueryVO> queryAll(OrderMainPageQueryDTO pageQueryDTO) {
@ -471,4 +472,113 @@ public class OrderBiz {
}
orderDetailService.deleteOrderDetailByOrderId(orderTaskId);
}
/**
* 获取所有的结算订单
*
* @param batchNo 结算批次号
* @return List<SettlementMain>
*/
public List<SettlementMain> allSettlementOrderList(String batchNo) {
List<SettlementMain> settlementMainList = settlementMainService.allSettlementOrderList(batchNo);
return settlementMainList;
}
/**
* 生成结算订单
*
* @param orderIds 订单ID集合
*/
@Transactional(rollbackFor = Exception.class)
public void generateSettlementOrder(List<Long> orderIds) {
// 验证这些结算订单是否复处于未结算且订单状态为已完成状态
List<OrderMain> orderMainList= orderMainService.obtainOrderListByOrderIds(orderIds);
if (CollectionUtil.isEmpty(orderMainList)) {
throw new BadRequestException("订单不存在");
}
// TODO 待优化提示完整错误信息
for (OrderMain orderMain : orderMainList) {
if (!orderIds.contains(orderMain.getId())) {
throw new BadRequestException("订单不存在");
}
// 判断订单是否处于未结算且订单状态为已完成状态
if (!OrderSettlementStatusEnum.NOT_SETTLED.getCode().equals(orderMain.getSettlementStatus())
|| !MainOrderStatusEnum.COMPLETED.getCode().equals(orderMain.getMainOrderStatus())) {
throw new BadRequestException("订单状态错误,无法生成结算订单");
}
}
// 按照景区ID进行分组
Map<Long, List<OrderMain>> attractionGroupMap = orderMainList.stream().collect(Collectors.groupingBy(OrderMain::getAttractionId));
List<SettlementMain> settlementMainList = new ArrayList<>();
// 构建结算订单数据
attractionGroupMap.forEach((attractionId, orderList) -> {
SettlementMain settlementMain = new SettlementMain();
settlementMainList.add(settlementMain);
});
// 构建结算订单详情数据
List<SettlementMain> settlementMains = settlementMainService.batchInsert(settlementMainList);
// 构建结算订单明细数据
List<SettlementDetail> settlementDetailList = buildSettlementDetail(settlementMains, attractionGroupMap);
settlementDetailService.batchInsert(settlementDetailList);
// 更新结算订单状态更新为结算中
orderMainService.updateSettlementStatus(orderIds, OrderSettlementStatusEnum.SETTLING.getCode());
}
/**
* 构建结算订单明细数据
*
* @param settlementMains 结算订单集合
* @param attractionGroupMap 景区ID分组的订单集合
* @return {@link List<SettlementDetail> }
*/
private List<SettlementDetail> buildSettlementDetail(List<SettlementMain> settlementMains, Map<Long, List<OrderMain>> attractionGroupMap) {
List<SettlementDetail> settlementDetailList = new ArrayList<>();
for (SettlementMain settlementMain : settlementMains) {
List<OrderMain> orderMainList = attractionGroupMap.get(settlementMain.getAttractionId());
for (OrderMain orderMain : orderMainList) {
SettlementDetail settlementDetail = new SettlementDetail();
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());
}
}
return settlementDetailList;
}
/**
* 打印结算单数据
*
* @param settlementOrderId 结算订单ID
* @return Boolean
*/
public Boolean printSettlementOrder(Long settlementOrderId) {
return true;
}
/**
* 获取结算订单详情
*
* @param settlementOrderId 结算订单ID
* @return List<SettlementDetail>
*/
public List<SettlementDetail> querySettlementOrderDetail(Long settlementOrderId) {
List<SettlementDetail> settlementDetailList = settlementDetailService.obtainDetailBySettlementOrderId(settlementOrderId);
return settlementDetailList;
}
/**
* 更新结算订单状态
*
* @param settlementOrderId 结算订单ID
* @param settlementOrderStatus {@link SettlementStatusEnum} 更新的状态枚举值
* @return Boolean
*/
public Boolean updateSettlementOrderStatus(Long settlementOrderId, Integer settlementOrderStatus) {
return true;
}
}

View File

@ -31,13 +31,13 @@ import java.util.List;
*/
@RestController
@RequestMapping("/api/order")
@Api(tags = "订单:订单管理")
@Api(tags = "订单管理")
public class OrderMainController {
@Resource
private OrderBiz orderBiz;
@ApiOperation("查询订单列表")
@ApiOperation("查询订单列表-多端查询")
@GetMapping("/allOrder")
public ResponseEntity<PageResult<OrderMainPageQueryVO>> queryOrderList(OrderMainPageQueryDTO pageQueryDTO) {
List<OrderMainPageQueryVO> orderList = orderBiz.queryAll(pageQueryDTO);

View File

@ -1,9 +1,22 @@
package com.aircraft.modules.order.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.aircraft.modules.order.biz.OrderBiz;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.domain.SettlementMain;
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
import com.aircraft.modules.order.domain.vo.OrderMainPageQueryVO;
import com.aircraft.utils.PageResult;
import com.aircraft.utils.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
@ -14,8 +27,55 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2025-07-10
*/
@RestController
@RequestMapping("/fmsOdSettlementMain")
@RequestMapping("/api/settlementOrder")
@Api(tags = "结算单管理")
public class SettlementMainController {
@Resource
private OrderBiz orderBiz;
@ApiOperation("查询结算订单列表")
@GetMapping("/allSettlementOrder")
public ResponseEntity<PageResult<SettlementMain>> allSettlementOrderList(
@ApiParam(value = "结算批次号", required = false, example = "JS_2025072500001")
@RequestParam (value = "结算批次号") String batchNo) {
List<SettlementMain> orderList = orderBiz.allSettlementOrderList(batchNo);
return new ResponseEntity<>(PageUtil.toPage(orderList),HttpStatus.OK);
}
@ApiOperation("生成结算订单")
@PostMapping("/generateSettlementOrder")
public ResponseEntity<String> generateSettlementOrder(
@ApiParam(value = "订单ID集合", required = true)
@RequestBody List<Long> orderIds) {
orderBiz.generateSettlementOrder(orderIds);
return new ResponseEntity<>("生成结算订单成功",HttpStatus.OK);
}
@ApiOperation("结算订单详情")
@GetMapping("/querySettlementOrderDetail/{settlementOrderId}")
public ResponseEntity<List<SettlementDetail>> querySettlementOrderDetail(
@ApiParam(value = "结算订单ID", required = true, example = "1946509536383438850")
@PathVariable("settlementOrderId") Long settlementOrderId) {
return new ResponseEntity<>(orderBiz.querySettlementOrderDetail(settlementOrderId),HttpStatus.OK);
}
@ApiOperation("打印结算单数据-返回对应的数据集前端进行打印PDF")
@GetMapping("/printSettlementOrder/{settlementOrderId}")
public ResponseEntity<Boolean> printSettlementOrder(
@ApiParam(value = "结算订单ID", required = true, example = "1946509536383438850")
@PathVariable("settlementOrderId") Long settlementOrderId) {
return new ResponseEntity<>(orderBiz.printSettlementOrder(settlementOrderId),HttpStatus.OK);
}
@ApiOperation("更新结算单状态")
@PutMapping("/updateSettlementOrderStatus/{settlementOrderId}/{settlementOrderStatus}")
public ResponseEntity<Boolean> updateSettlementOrderStatus(
@ApiParam(value = "结算订单ID", required = true, example = "1946509536383438850")
@PathVariable("settlementOrderId") Long settlementOrderId,
@ApiParam(value = "结算单状态: 0=结算中, 1=已确认, 2=已完成, 3=结算完成, 4=已取消", required = true, example = "1")
@PathVariable("settlementOrderStatus") Integer settlementOrderStatus) {
return new ResponseEntity<>(orderBiz.updateSettlementOrderStatus(settlementOrderId, settlementOrderStatus),HttpStatus.OK);
}
}

View File

@ -34,6 +34,11 @@ public class SettlementDetail extends BaseEntity {
*/
private Long settlementMainId;
/**
* 订单ID
*/
private Long orderId;
/**
* 订单编号
*/
@ -42,7 +47,7 @@ public class SettlementDetail extends BaseEntity {
/**
* 订单类型
*/
private Boolean orderType;
private Integer orderType;
/**
* 订单发起人ID

View File

@ -33,6 +33,11 @@ public class SettlementMain extends BaseEntity {
*/
private Integer batchNo;
/**
* 景区ID
*/
private Long attractionId;
/**
* 结算状态
*/

View File

@ -72,4 +72,20 @@ public interface IOrderMainService extends IService<OrderMain> {
* @return {@link List<OrderMain>}
*/
List<OrderMain> obtainOrderList(OrderMainPageQueryDTO pageQueryDTO);
/**
* 根据订单ID集合获取
*
* @param orderIds 订单ID集合
* @return List<OrderMain>
*/
List<OrderMain> obtainOrderListByOrderIds(List<Long> orderIds);
/**
* 根据订单ID修改结算状态
*
* @param orderIds 订单ID集合
* @param settlementStatus 结算状态
*/
void updateSettlementStatus(List<Long> orderIds, Integer settlementStatus);
}

View File

@ -3,6 +3,8 @@ package com.aircraft.modules.order.service;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 订单结算详情主表 服务类
@ -13,4 +15,18 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISettlementDetailService extends IService<SettlementDetail> {
/**
* 批量插入
*
* @param settlementDetailList {@Link List<SettlementDetail>}
*/
void batchInsert(List<SettlementDetail> settlementDetailList);
/**
* 查询结算单详情
*
* @param settlementOrderId 结算单ID
* @return List<SettlementDetail>
*/
List<SettlementDetail> obtainDetailBySettlementOrderId(Long settlementOrderId);
}

View File

@ -3,6 +3,8 @@ package com.aircraft.modules.order.service;
import com.aircraft.modules.order.domain.SettlementMain;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 订单结算主表 服务类
@ -14,4 +16,19 @@ import com.baomidou.mybatisplus.extension.service.IService;
public interface ISettlementMainService extends IService<SettlementMain> {
/**
* 根据批次号获取数据
*
* @param batchNo 结算批次号
* @return {@link List<SettlementMain>}
*/
List<SettlementMain> allSettlementOrderList(String batchNo);
/**
* 批量新增结算订单
*
* @param settlementMainList {List<SettlementMain>}
*/
List<SettlementMain> batchInsert(List<SettlementMain> settlementMainList);
}

View File

@ -1,5 +1,6 @@
package com.aircraft.modules.order.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.aircraft.modules.order.domain.OrderMain;
@ -93,4 +94,21 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
public List<OrderMain> obtainOrderList(OrderMainPageQueryDTO pageQueryDTO) {
return orderMainMapper.obtainOrderList(pageQueryDTO);
}
@Override
public List<OrderMain> obtainOrderListByOrderIds(List<Long> orderIds) {
LambdaQueryWrapper<OrderMain> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(OrderMain::getId, orderIds);
return list(queryWrapper);
}
@Override
public void updateSettlementStatus(List<Long> orderIds, Integer settlementStatus) {
if (CollectionUtil.isEmpty(orderIds)) {
return;
}
this.update(Wrappers.<OrderMain>lambdaUpdate()
.in(OrderMain::getId, orderIds)
.set(OrderMain::getSettlementStatus, settlementStatus));
}
}

View File

@ -3,9 +3,12 @@ package com.aircraft.modules.order.service.impl;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.mapper.SettlementDetailMapper;
import com.aircraft.modules.order.service.ISettlementDetailService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 订单结算详情主表 服务实现类
@ -17,4 +20,13 @@ import org.springframework.stereotype.Service;
@Service
public class SettlementDetailServiceImpl extends ServiceImpl<SettlementDetailMapper, SettlementDetail> implements ISettlementDetailService {
@Override
public void batchInsert(List<SettlementDetail> settlementDetailList) {
this.saveBatch(settlementDetailList);
}
@Override
public List<SettlementDetail> obtainDetailBySettlementOrderId(Long settlementOrderId) {
return this.list(Wrappers.lambdaQuery(SettlementDetail.class).eq(SettlementDetail::getSettlementMainId, settlementOrderId));
}
}

View File

@ -1,11 +1,15 @@
package com.aircraft.modules.order.service.impl;
import cn.hutool.core.util.StrUtil;
import com.aircraft.modules.order.domain.SettlementMain;
import com.aircraft.modules.order.mapper.SettlementMainMapper;
import com.aircraft.modules.order.service.ISettlementMainService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 订单结算主表 服务实现类
@ -17,4 +21,15 @@ import org.springframework.stereotype.Service;
@Service
public class SettlementMainServiceImpl extends ServiceImpl<SettlementMainMapper, SettlementMain> implements ISettlementMainService {
@Override
public List<SettlementMain> allSettlementOrderList(String batchNo) {
return list(Wrappers.lambdaQuery(SettlementMain.class)
.eq(StrUtil.isNotBlank(batchNo), SettlementMain::getBatchNo, batchNo));
}
@Override
public List<SettlementMain> batchInsert(List<SettlementMain> settlementMainList) {
this.saveBatch(settlementMainList);
return settlementMainList;
}
}