新增订单详情列表(接口,返回dto根据用户查询

This commit is contained in:
小朱 2025-05-14 10:32:56 +08:00
parent ceb9dd1809
commit 423acc160e
5 changed files with 161 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import com.cdzy.common.model.PageParam;
import com.cdzy.orders.model.dto.req.ReqBikeDto;
import com.cdzy.orders.model.dto.req.ReqOrderDto;
import com.cdzy.orders.model.dto.res.RspOrderDetailsInfo;
import com.cdzy.orders.model.dto.res.RspOrderDetailsUserList;
import com.ebike.feign.model.res.ResFeignOrderPaymentDto;
import com.cdzy.orders.model.dto.res.RspBikeDto;
import com.cdzy.orders.model.entity.EbikeUserOrders;
@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import static com.cdzy.orders.model.entity.table.EbikeUserOrdersTableDef.EBIKE_USER_ORDERS;
@ -236,5 +238,15 @@ public class EbikeUserOrdersController {
Page<EbikeUserOrders> page = userOrdersService.page(pageParam.getPage(), queryWrapper);
return JsonResult.success(page);
}
/**
* 根据用户ID获取订单详情列表带分页
*
* @param params 用户Id 和分页信息
* @ 用户订单表详情
*/
@PostMapping("orderDetailsUserList")
public JsonResult<?> orderDetailsUserList(@RequestBody Map<String,Object> params) {
List<RspOrderDetailsUserList> info = userOrdersService.orderDetailsUserList(params);
return JsonResult.success(info);
}
}

View File

@ -1,7 +1,15 @@
package com.cdzy.orders.mapper;
import com.cdzy.orders.model.dto.res.RspOrderDetailsInfo;
import com.cdzy.orders.model.dto.res.RspOrderDetailsUserList;
import com.mybatisflex.core.BaseMapper;
import com.cdzy.orders.model.entity.EbikeUserOrders;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 用户订单表 映射层
@ -11,4 +19,47 @@ import com.cdzy.orders.model.entity.EbikeUserOrders;
*/
public interface UserOrdersMapper extends BaseMapper<EbikeUserOrders> {
/**
* 根据用户ID获取订单详情列表带分页并根据类型查询消费或退款
*
* @param userId 用户Id
* @param orderType 订单类型消费或退款
* @return 用户订单表详情
*/
@Select("<script>" +
"SELECT A.order_id, A.user_id, A.status, A.start_time, A.end_time, " +
"CASE WHEN A.end_time IS NULL THEN " +
"CONCAT('骑行 ', FLOOR(TIMESTAMPDIFF(SECOND, A.start_time, NOW()) / 60), '分钟', " +
"TIMESTAMPDIFF(SECOND, A.start_time, NOW()) % 60, '秒') " +
"ELSE CONCAT('骑行 ', FLOOR(TIMESTAMPDIFF(SECOND, A.start_time, A.end_time) / 60), '分钟', " +
"TIMESTAMPDIFF(SECOND, A.start_time, A.end_time) % 60, '秒') END AS riding_duration, " +
"CASE A.status WHEN 0 THEN '进行中' WHEN 1 THEN '已取消' WHEN 2 THEN '待支付' " +
"WHEN 3 THEN '已支付' WHEN 4 THEN '退款中' WHEN 5 THEN '已退款' ELSE '无' END AS status_name, " +
"created_at, total_amount, bike_code " +
"FROM ebike_user_orders AS A " +
"WHERE A.user_id = #{userId} " +
"<if test='orderType == \"consumption\"'> " +
"AND A.status IN (0, 1, 2, 3) " +
"</if>" +
"<if test='orderType == \"refund\"'> " +
"AND A.status IN (4, 5) " +
"</if>" +
"LIMIT #{pageSize} OFFSET #{offset}" +
"</script>")
@Results({
@Result(property = "orderId", column = "order_id"),
@Result(property = "userId", column = "user_id"),
@Result(property = "status", column = "status"),
@Result(property = "startTime", column = "start_time"),
@Result(property = "endTime", column = "end_time"),
@Result(property = "ridingDuration", column = "riding_duration"),
@Result(property = "statusName", column = "status_name"),
@Result(property = "createdAt", column = "created_at"),
@Result(property = "totalAmount", column = "total_amount"),
@Result(property = "bikeCode", column = "bike_code")
})
List<RspOrderDetailsUserList> getOrderDetailsUserList(@Param("userId") String userId,
@Param("orderType") String orderType,
@Param("offset") Integer offset,
@Param("pageSize") Integer pageSize);
}

View File

@ -0,0 +1,66 @@
package com.cdzy.orders.model.dto.res;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 用户订单详情响应DTO
*/
@Data
public class RspOrderDetailsUserList {
/**
* 分布式ID雪花算法或业务前缀+序列
*/
private Long orderId;
/**
* 用户ID关联用户表
*/
private Long userId;
/**
* 订单状态进行中已取消待支付已支付退款中已退款
*/
private String status;
/**
* 订单状态进行中已取消待支付已支付退款中已退款
*/
private String statusName;
/**
* 订单开始时间
*/
private Date startTime;
/**
* 订单结束时间
*/
private Date endTime;
/**
* 订单骑行时长分钟
*/
private String ridingDuration;
/**
* 订单创建时间
*/
private Date createdAt;
/**
* 订单总金额
*/
private BigDecimal totalAmount;
/**
* 订单关联的车辆编码
*/
private String bikeCode;
/**
* 其他需要返回的字段可以根据需要添加
*/
// 可根据需要添加其他字段如订单类型支付方式等
}

View File

@ -3,6 +3,7 @@ package com.cdzy.orders.service;
import com.cdzy.orders.model.dto.req.ReqBikeDto;
import com.cdzy.orders.model.dto.req.ReqOrderDto;
import com.cdzy.orders.model.dto.res.RspOrderDetailsInfo;
import com.cdzy.orders.model.dto.res.RspOrderDetailsUserList;
import com.ebike.feign.model.res.ResFeignOrderPaymentDto;
import com.cdzy.orders.model.dto.res.RspBikeDto;
import com.ebike.feign.model.rsp.EbikePaymentDto;
@ -11,6 +12,7 @@ import com.cdzy.orders.model.entity.EbikeUserOrders;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 用户订单表 服务层
@ -116,4 +118,12 @@ public interface UserOrdersService extends IService<EbikeUserOrders> {
* @return 支付信息
*/
EbikePaymentDto paymentDetailsInfo(Long orderId);
/**
* 根据用户ID获取订单详情列表带分页
*
* @param params 用户Id
* @ 用户订单表详情
*/
List<RspOrderDetailsUserList> orderDetailsUserList(Map<String,Object> params);
}

View File

@ -1,5 +1,6 @@
package com.cdzy.orders.service.impl;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson2.JSONObject;
import com.cdzy.common.enums.Code;
import com.cdzy.common.model.JsonResult;
@ -14,6 +15,7 @@ import com.cdzy.orders.model.dto.req.ReqOrderDto;
import com.cdzy.orders.model.dto.res.RedisPoint;
import com.cdzy.orders.model.dto.res.RspBikeDto;
import com.cdzy.orders.model.dto.res.RspOrderDetailsInfo;
import com.cdzy.orders.model.dto.res.RspOrderDetailsUserList;
import com.cdzy.orders.model.entity.EbikeOrderDetails;
import com.cdzy.orders.model.entity.EbikeUser;
import com.cdzy.orders.model.entity.EbikeUserOrders;
@ -40,6 +42,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import static com.cdzy.orders.enums.TimeDivisionCharging.TIME_SLOT;
@ -657,4 +660,22 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
}
return decimal;
}
/**
* 根据用户ID获取订单详情列表带分页
*
* @param params 用户Id
* @ 用户订单表详情
*/
@Override
public List<RspOrderDetailsUserList> orderDetailsUserList(Map<String,Object> params) {
String userId = MapUtil.getStr(params,"userId");
Map<String,Object> pageParam = ( Map<String,Object>)params.get("pageParam");
Integer pageNum= MapUtil.getInt(pageParam,"pageNum");
Integer pageSize= MapUtil.getInt(pageParam,"pageSize");
String orderType = ""; //consumption 消费 refund 退款
orderType= MapUtil.getStr(pageParam,"orderType");
Integer offset = (pageNum - 1) * pageSize; // 计算OFFSET
List<RspOrderDetailsUserList> orderDetailsUserList = userOrdersMapper.getOrderDetailsUserList(userId,orderType,offset,pageSize);
return orderDetailsUserList;
}
}