Compare commits

...

2 Commits

11 changed files with 239 additions and 25 deletions

View File

@ -2,9 +2,13 @@ package com.aircraft.modules.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.aircraft.domain.dto.AttachmentMaterialDTO;
import com.aircraft.exception.BadRequestException;
import com.aircraft.modules.aircraft.domain.AircraftDevice;
import com.aircraft.modules.aircraft.service.AircraftDeviceService;
import com.aircraft.modules.order.domain.*;
import com.aircraft.modules.order.domain.constant.OrderConstant;
import com.aircraft.modules.order.domain.constant.OrderRedisConstant;
@ -12,12 +16,10 @@ import com.aircraft.modules.order.domain.dto.AddOrderDTO;
import com.aircraft.modules.order.domain.dto.AddOrderTaskDTO;
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
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.enums.*;
import com.aircraft.modules.order.domain.vo.OrderAllDetailVO;
import com.aircraft.modules.order.domain.vo.OrderMainPageQueryVO;
import com.aircraft.modules.order.domain.vo.OrderTaskDetailVO;
import com.aircraft.modules.order.service.*;
import com.aircraft.modules.route.domain.CpRoute;
import com.aircraft.modules.route.service.CpRouteService;
@ -26,6 +28,7 @@ import com.aircraft.modules.system.domain.EmEmployees;
import com.aircraft.modules.system.domain.EmScenic;
import com.aircraft.modules.system.domain.dto.LocalAttachmentMaterialDTO;
import com.aircraft.modules.system.domain.enums.AttachmentMaterialBusinessTypeEnum;
import com.aircraft.modules.system.service.CnCustomerService;
import com.aircraft.modules.system.service.EmEmployeesService;
import com.aircraft.modules.system.service.EmScenicService;
import com.aircraft.modules.system.service.IAttachmentMaterialService;
@ -44,9 +47,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -81,6 +82,10 @@ public class OrderBiz {
private ISettlementMainService settlementMainService;
@Resource
private ISettlementDetailService settlementDetailService;
@Resource
private CnCustomerService cnCustomerService;
@Resource
private AircraftDeviceService aircraftDeviceService;
public List<OrderMainPageQueryVO> queryAll(OrderMainPageQueryDTO pageQueryDTO) {
@ -185,6 +190,15 @@ public class OrderBiz {
*/
private List<OrderMain> adminAllOrderQueryList(OrderMainPageQueryDTO pageQueryDTO) {
// TODO 需要考虑用户角色获取对应的数据财务区域管理员角色
// 处理时间格式
if (ObjectUtil.isNotNull(pageQueryDTO.getQueryStartTime())) {
Date start = DateUtil.beginOfDay(pageQueryDTO.getQueryStartTime());
pageQueryDTO.setQueryStartTime(start);
}
if (ObjectUtil.isNotNull(pageQueryDTO.getQueryEndTime())) {
Date end = DateUtil.endOfDay(pageQueryDTO.getQueryEndTime());
pageQueryDTO.setQueryEndTime(end);
}
List<OrderMain> list = orderMainService.queryAll(pageQueryDTO);
return list;
}
@ -247,6 +261,7 @@ public class OrderBiz {
orderMain.setOrderCreateTime(addOrderDTO.getOrderCreateTime());
orderMain.setMainOrderStatus(MainOrderStatusEnum.NOT_STARTED.getCode());
orderMain.setSettlementStatus(OrderSettlementStatusEnum.NOT_SETTLED.getCode());
orderMain.setAreaId(scenic.getAreaId());
return orderMain;
}
@ -318,7 +333,104 @@ public class OrderBiz {
* 根据订单ID查询详情
*/
public OrderAllDetailVO queryOrderDetail(Long id) {
return new OrderAllDetailVO();
// 获取订单详情
OrderMain orderMain = orderMainService.obtainOrderMainById(id);
Long orderInitiatorId = orderMain.getOrderInitiatorId();
List<EmEmployees> emEmployeesList = emEmployeesService.list();
Map<Long, EmEmployees> emEmployeesMap = emEmployeesList.stream().collect( Collectors.toMap(EmEmployees::getId, v -> v));
EmEmployees emEmployees = emEmployeesMap.get(orderInitiatorId);
String customerName = cnCustomerService.getById(orderMain.getCustomerId()).getName();
// 构建订单回显
OrderAllDetailVO orderAllDetailVO = new OrderAllDetailVO();
orderAllDetailVO.setOrderNo(orderMain.getOrderNo());
orderAllDetailVO.setOrderType(OrderTypeEnum.getInstance(orderMain.getOrderType()).getDescription());
orderAllDetailVO.setOrderInitiator(emEmployees.getName());
orderAllDetailVO.setInitiatorPhone(emEmployees.getPhone());
orderAllDetailVO.setCustomerName(customerName);
orderAllDetailVO.setPhone(orderMain.getPhone());
orderAllDetailVO.setScenicName(emScenicService.obtainScenicById(orderMain.getAttractionId()).getName());
// 获取路线
String routeIds = orderMain.getRouteIds();
List<CpRoute> cpRoutes = cpRouteService.obtainAllRoutes();
Map<Long, CpRoute> routeMap = cpRoutes.stream().collect(Collectors.toMap(CpRoute::getId, route -> route));
String[] routeIdArray = routeIds.split(StrUtil.COMMA);
StringBuilder routeNameBuilder = new StringBuilder();
for (String routeIdStr : routeIdArray) {
CpRoute cpRoute = routeMap.get(Long.valueOf(routeIdStr));
String name = cpRoute.getName();
routeNameBuilder.append(name).append(StrUtil.COMMA);
}
// 去掉最后一个逗号
String routeName = routeNameBuilder.substring(0, routeNameBuilder.length() - 1);
orderAllDetailVO.setRouteName(routeName);
// 获取该订单下的操作人
List<OrderOperator> orderOperatorList = orderOperatorService.queryAllByOrderIds(List.of(id));
// 转成map
StringBuilder nameBuilder = new StringBuilder();
for (OrderOperator operator : orderOperatorList) {
Long operatorId = operator.getOperatorId();
String name = emEmployeesMap.get(operatorId).getName();
nameBuilder.append(name).append(StrUtil.COMMA);
}
// 去掉最后一个逗号
orderAllDetailVO.setOperatorName(nameBuilder.substring(0, nameBuilder.length() - 1));
orderAllDetailVO.setOrderCreateTime(orderMain.getOrderCreateTime());
orderAllDetailVO.setOrderFinishTime(orderMain.getOrderFinishTime());
// 根据订单id获取任务
List<OrderDetail> orderDetailList = orderDetailService.queryOrderDetailByOrderId(id);
if (CollectionUtil.isEmpty(orderDetailList)) {
return orderAllDetailVO;
}
// 获取任务ID集合
List<Long> taskIdList = orderDetailList.stream().map(OrderDetail::getId).toList();
//根据任务分别获取材料
List<String> businessCodeList = new ArrayList<>();
businessCodeList.add(AttachmentMaterialBusinessTypeEnum.ORDER_TASK_MATERIAL.getCode());
List<AttachmentMaterial> attachmentMaterialList = attachmentMaterialService.obtainAttachmentMaterialByBusinessIdAndCode(
taskIdList, businessCodeList);
// 根据 businessId 进行分组
if (CollectionUtil.isEmpty(attachmentMaterialList)){
return new OrderAllDetailVO();
}
Map<Long, List<AttachmentMaterial>> attachmentMaterialMap = attachmentMaterialList.stream().
collect(Collectors.groupingBy(AttachmentMaterial::getBusinessId));
// 获取所有设备
List<AircraftDevice> aircraftDeviceList = aircraftDeviceService.list();
Map<Long, AircraftDevice> aircraftDeviceMap = aircraftDeviceList.stream().
collect(Collectors.toMap(AircraftDevice::getId, device -> device));
List<OrderTaskDetailVO> orderTaskDetailList = new ArrayList<>();
for (OrderDetail orderDetail : orderDetailList) {
OrderTaskDetailVO orderTaskDetailVO = new OrderTaskDetailVO();
orderTaskDetailVO.setId(orderDetail.getId());
AircraftDevice aircraftDevice = aircraftDeviceMap.get(orderDetail.getDeviceId());
if (ObjectUtil.isNotNull(aircraftDevice)) {
orderTaskDetailVO.setDeviceName(aircraftDevice.getName());
}
orderTaskDetailVO.setCargoWeight(orderDetail.getCargoWeight());
EmEmployees employees = emEmployeesMap.get(orderDetail.getOperatorId());
if (ObjectUtil.isNotNull(employees)) {
orderTaskDetailVO.setOperatorName(employees.getName());
}
OrderTaskStatusEnum orderTaskStatusEnum = OrderTaskStatusEnum.getInstance(orderDetail.getOrderItemStatus());
orderTaskDetailVO.setOrderItemStatus(orderTaskStatusEnum.getDescription());
// 获取对应的材料信息
List<AttachmentMaterial> materialList = attachmentMaterialMap.get(orderDetail.getId());
if (CollectionUtil.isNotEmpty(materialList)) {
orderTaskDetailVO.setAttachmentMaterialList(BeanUtil.copyToList(materialList, AttachmentMaterialDTO.class));
}
orderTaskDetailList.add(orderTaskDetailVO);
}
// 组织飞行任务
orderAllDetailVO.setOrderTaskDetailList(orderTaskDetailList);
return orderAllDetailVO;
}
/**

View File

@ -96,7 +96,7 @@ public class OrderMainController {
/**
* 根据订单ID查询详情
*/
@ApiOperation("根据订单ID查询详情")
@ApiOperation("根据订单ID查询详情-多端查询")
@GetMapping("/queryOrderDetail/{id}")
public ResponseEntity<OrderAllDetailVO> queryOrderDetail(@PathVariable("id") Long id) {
return ResponseEntity.ok(orderBiz.queryOrderDetail(id));

View File

@ -50,6 +50,11 @@ public class OrderMain extends BaseEntity {
*/
private String phone;
/**
* 区域ID
*/
private Long areaId;
/**
* 景区ID
*/

View File

@ -2,6 +2,9 @@ package com.aircraft.modules.order.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
*
@ -29,13 +32,27 @@ public class OrderMainPageQueryDTO {
/**
* 客户手机号
*/
@ApiModelProperty(value = "客户手机号", example = "13788888888")
@ApiModelProperty(value = "客户手机号", example = "13456767894")
private String phone;
/**
* 发起人ID
*/
@ApiModelProperty(value = "发起人ID(无需填写)")
private Long orderInitiatorId;
/**
* 下单开始时间
*/
@ApiModelProperty(value = "下单开始时间", example = "2025-07-19")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date queryStartTime;
/**
* 下单结束时间
*/
@ApiModelProperty(value = "下单结束时间", example = "2025-07-19")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date queryEndTime;
}

View File

@ -0,0 +1,48 @@
package com.aircraft.modules.order.domain.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 订单类型枚举类
*
* @author chenxiky
* @version 1.0.0
* @since 2025/7/25
*/
@Getter
@AllArgsConstructor
public enum OrderTypeEnum {
/**
* 载物订单
*/
ORDER_TYPE_CARGO(1, "载物订单"),
/**
* 载人订单
*/
ORDER_TYPE_PERSON(2, "载人订单");
/**
* 订单类型 Code
*/
private final Integer code;
/**
* 订单类型描述
*/
private final String description;
/**
* 根据code获取枚举
*
* @param code 编码
* @return {@link OrderTypeEnum}
*/
public static OrderTypeEnum getInstance(Integer code) {
return Arrays.stream(OrderTypeEnum.values())
.filter(o -> o.getCode().equals(code)).findFirst().orElse(null);
}
}

View File

@ -95,7 +95,14 @@ public class OrderAllDetailVO {
*/
@ApiModelProperty(value = "下单时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date orderTime;
private Date orderCreateTime;
/**
* 订单完成时间
*/
@ApiModelProperty(value = "订单完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date orderFinishTime;
/**
* 订单子单信息列表

View File

@ -57,6 +57,12 @@ public class OrderMainPageQueryVO {
@ApiModelProperty(value = "发起人手机号")
private String initiatorPhone;
/**
* 区域ID
*/
@ApiModelProperty(value = "区域ID")
private Long areaId;
/**
* 景区ID
*/

View File

@ -1,9 +1,12 @@
package com.aircraft.modules.order.domain.vo;
import com.aircraft.domain.dto.AttachmentMaterialDTO;
import com.aircraft.modules.system.domain.dto.LocalAttachmentMaterialDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
*
@ -22,12 +25,6 @@ public class OrderTaskDetailVO {
@ApiModelProperty(value = "ID")
private Long id;
/**
* 图片Url
*/
@ApiModelProperty(value = "图片Url")
private String imageUrl;
/**
* 设备名称
*/
@ -51,5 +48,10 @@ public class OrderTaskDetailVO {
*/
@ApiModelProperty(value = "任务状态")
private String orderItemStatus;
/**
* 图片材料List
*/
@ApiModelProperty(value = "材料List集合")
private List<AttachmentMaterialDTO> attachmentMaterialList;
}

View File

@ -33,12 +33,13 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
private OrderMainMapper orderMainMapper;
@Override
public List<OrderMain> queryAll(OrderMainPageQueryDTO pageQueryDTO) {
// TODO 构建查询条件
LambdaQueryWrapper<OrderMain> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getAttractionId()),OrderMain::getAttractionId, pageQueryDTO.getAttractionId());
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getAttractionId()),OrderMain::getCustomerId, pageQueryDTO.getCustomerId());
queryWrapper.eq(StrUtil.isNotBlank(pageQueryDTO.getPhone()),OrderMain::getPhone, pageQueryDTO.getPhone());
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getAttractionId()), OrderMain::getAttractionId, pageQueryDTO.getAttractionId());
queryWrapper.eq(ObjectUtil.isNotNull(pageQueryDTO.getCustomerId()), OrderMain::getCustomerId, pageQueryDTO.getCustomerId());
queryWrapper.eq(StrUtil.isNotBlank(pageQueryDTO.getPhone()), OrderMain::getPhone, pageQueryDTO.getPhone());
// 添加时间查询条件
queryWrapper.ge(ObjectUtil.isNotNull(pageQueryDTO.getQueryStartTime()), OrderMain::getOrderCreateTime, pageQueryDTO.getQueryStartTime());
queryWrapper.le(ObjectUtil.isNotNull(pageQueryDTO.getQueryEndTime()), OrderMain::getOrderCreateTime, pageQueryDTO.getQueryEndTime());
return list(queryWrapper);
}

View File

@ -25,8 +25,17 @@ public interface IAttachmentMaterialService extends IService<AttachmentMaterial>
/**
* 根据业务ID删除材料
*
* @param orderId 业务ID
* @param code 业务编码
* @param businessId 业务ID
* @param businessCode 业务编码
*/
void deleteAttachmentMaterialByBusinessId(Long orderId, String code);
void deleteAttachmentMaterialByBusinessId(Long businessId, String businessCode);
/**
* 批量获取根据业务ID和业务编码查询材料
*
* @param businessIds 业务ID集合
* @param businessCodes 业务codes集合
* @return {@link List<AttachmentMaterial>}
*/
List<AttachmentMaterial> obtainAttachmentMaterialByBusinessIdAndCode(List<Long> businessIds, List<String> businessCodes);
}

View File

@ -32,4 +32,11 @@ public class AttachmentMaterialServiceImpl extends ServiceImpl<AttachmentMateria
.eq(AttachmentMaterial::getBusinessId, orderId)
.eq(AttachmentMaterial::getBusinessType, code));
}
@Override
public List<AttachmentMaterial> obtainAttachmentMaterialByBusinessIdAndCode(List<Long> businessIds, List<String> businessCodes) {
return this.list(Wrappers.<AttachmentMaterial>lambdaQuery()
.in(AttachmentMaterial::getBusinessId, businessIds)
.in(AttachmentMaterial::getBusinessType, businessCodes));
}
}