Part08 中州养老AI+IOT项目实训
Part08 中州养老AI+IOT项目实训
订单模块实战
1.1 订单模块准备工作
前言
1. 导入订单表结构
-- 如果存在这个表,就删除它
DROP TABLE IF EXISTS `np_order`;
-- 创建订单表
CREATE TABLE `np_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`trading_order_no` bigint(20) DEFAULT '0' COMMENT '交易系统订单号',
`payment_status` tinyint(4) DEFAULT NULL COMMENT '付款状态,1.未付 2已付 3已关闭',
`amount` decimal(32,2) DEFAULT NULL COMMENT '金额',
`refund` decimal(12,2) DEFAULT '0.00' COMMENT '退款金额【付款后,单位:元',
`is_refund` varchar(32) DEFAULT NULL COMMENT '是否有退款:YES,NO',
`member_id` bigint(20) DEFAULT NULL COMMENT '客户id',
`project_id` bigint(20) DEFAULT NULL COMMENT '服务项目id',
`elder_id` bigint(20) DEFAULT NULL COMMENT '服务对象ID',
`estimated_arrival_time` datetime DEFAULT NULL COMMENT '预计服务时间',
`mark` varchar(2000) DEFAULT NULL COMMENT '备注',
`reason` varchar(2000) DEFAULT NULL COMMENT '取消原因',
`status` int(11) DEFAULT NULL COMMENT '订单状态 0待支付 1待执行 2已执行 3已完成 4已关闭 5已退款',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建人id',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新人id',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`view_status` varchar(255) DEFAULT '0' COMMENT '是否可见 0可见 1不可见',
`order_no` varchar(50) DEFAULT NULL COMMENT '订单编号',
`o_create_type` tinyint(4) DEFAULT NULL COMMENT '取消人类型 1前台 2后台',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=320 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='订单';
2. 导入订单实体类和Mapper接口以及映射文件(可以使用MyBatisX插件自动生成)
pojo实体类,放到cn.yangeit.pojo下
/**
* 订单
* @TableName order
*/
@TableName(value ="np_order")// 表名
@Data
public class Order {
@TableId(type = IdType.AUTO)
private Long id;// 订单id
private Long tradingOrderNo;// 交易订单号
private Integer paymentStatus;// 付款状态,1.未付 2已付 3已关闭
private BigDecimal amount;// 金额
private BigDecimal refund;// 退款金额【付款后,单位:元】
private String isRefund;// 是否退款【0未退款 1已退款】
private Long memberId;// 客户ID
private Long projectId;// 服务项目id
private Long elderId;// 服务对象ID
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime estimatedArrivalTime;// 预计到达时间
private String mark;//
private String reason;// 取消原因
private Integer status;//订单状态 0待支付 1待执行 2已执行 3已完成 4已关闭 5已退款
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
private Long createBy;
private Long updateBy;
private String remark;// 下单备注
private String viewStatus;// 是否可见 0可见 1不可见
private String orderNo;// 订单编号
private Integer oCreateType;//取消人类型 1前台 2后台
}
放到cn.yangeit.mapper下
public interface OrderMapper extends BaseMapper<Order> {
}
放到resources/mapper下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.yangeit.mapper.OrderMapper">
<resultMap id="BaseResultMap" type="cn.yangeit.pojo.Order">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tradingOrderNo" column="trading_order_no" jdbcType="BIGINT"/>
<result property="paymentStatus" column="payment_status" jdbcType="TINYINT"/>
<result property="amount" column="amount" jdbcType="DECIMAL"/>
<result property="refund" column="refund" jdbcType="DECIMAL"/>
<result property="isRefund" column="is_refund" jdbcType="VARCHAR"/>
<result property="memberId" column="member_id" jdbcType="BIGINT"/>
<result property="projectId" column="project_id" jdbcType="BIGINT"/>
<result property="elderId" column="elder_id" jdbcType="BIGINT"/>
<result property="estimatedArrivalTime" column="estimated_arrival_time" jdbcType="TIMESTAMP"/>
<result property="mark" column="mark" jdbcType="VARCHAR"/>
<result property="reason" column="reason" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="createBy" column="create_by" jdbcType="BIGINT"/>
<result property="updateBy" column="update_by" jdbcType="BIGINT"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="viewStatus" column="view_status" jdbcType="VARCHAR"/>
<result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
<result property="oCreateType" column="o_create_type" jdbcType="TINYINT"/>
</resultMap>
<sql id="Base_Column_List">
id,trading_order_no,payment_status,
amount,refund,is_refund,
member_id,project_id,elder_id,
estimated_arrival_time,mark,reason,
status,create_time,update_time,
create_by,update_by,remark,
view_status,order_no,o_create_type
</sql>
</mapper>
具体图解如下:👇

3. 重新导入mp-weixing项目,并启动项目,测试订单模块是否可以正常使用原有的代码没有订单模块,所以需要重新导入项目
关注微信群里中的mp-weixin.rar压缩文件

总结
课堂作业
参考上述内容,完成订单模块的准备工作。
1.2 下单接口开发
前言
如果你完成了服务项目列表的展示和服务详情的展示,那么可以开发下单接口了。效果图如下:
如果还没有完成,请先完成服务项目列表的展示和服务详情的展示,在part07的笔记中

接口信息如下:👇
- 请求方式:
POST
- 请求路径:
/customer/orders
- 请求参数:
{
"amount": 15,// 金额
"elderId": 1,// 服务对象ID
"estimatedArrivalTime": "2025-06-24 21:30:00",// 预计到达时间
"name": "刘备",// 服务对象姓名
"projectId": "3",// 服务项目id
"remark": "请细心些"// 下单备注
}
- 返回结果:
{
"code": 200,
"msg": "操作成功",
}
逻辑说明: 👇
- 需要用到dto来接受请求参数
- 因为支付模块集成需要商户账号,因此这里的下单直接设置为已支付,status=1
- 订单OrderNo是对外展示的订单编号,这里直接用雪花算法或者UUID生成都可
代码操作
1. 在cn.yangeit.dto
包下创建CheckOrderDto
文件,代码如下:
@Data
@Builder
public class CheckOrderDto {
//服务金额
private Float amount;
//老人ID
private Long elderId;
//服务时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime estimatedArrivalTime;
//老人姓名
private String name;
//服务项目ID
private Long projectId;
//备注
private String remark;
}
2. 在MemberNursingProjectController中添加下单接口,代码如下:

3. 下单测试,观察数据库中是否生成订单数据

1.3 订单列表接口开发
前言
完成了下单接口的开发,那么可以开发订单列表接口了。效果图如下:

接下来,我们开始开发订单列表接口,接口信息如下:
- 请求方式:
GET
- 请求路径:
/customer/orders/order/page
- 请求参数:
pageSize=10&pageNum=1&status=3
pageSize和pageNum是分页参数,分别是每页数据量和当前页码,status是订单状态 0待支付 1待执行 2已执行 3已完成 4已关闭 5已退款
- 返回结果:
{
"msg": "操作成功",
"code": 200,
"data": [
{
"id": 316,// 订单ID
"status": 5,// 订单状态 0待支付 1待执行 2已执行 3已完成 4已关闭 5已退款
"amount": 80,// 订单金额
"createTime": "2025-06-24T17:29:00",// 期望到达时间
"paymentStatus": null,// 支付状态
"serviceName": "心理咨询",// 服务项目名称
"userName": "刘备",// 服务对象姓名
"remark": "注意保密",// 下单备注
"orderNo": "21078e4f46b4",// 订单编号 对外展示
"image": "https://itheim.oss-cn-beijing.aliyuncs.com/dc004cc2-688c-4d22-8fbc-8e923219a2bd.png"// 服务项目图片
},
{
"id": 319,
"status": 3,
"amount": 15,
"createTime": "2025-06-24T20:42:00",
"paymentStatus": null,
"serviceName": "洗脸",
"userName": "刘备",
"remark": "haha ",
"orderNo": "c8e98eb7-2bd1-4ab4-99f3-c34485791767",
"image": "https://itheim.oss-cn-beijing.aliyuncs.com/95b0ad37-5d61-4ec2-a961-d6fb691a18f0.png"
}
]
}
代码操作
1. 在cn.yangeit.vo
包下创建OrderVo
文件,代码如下:
@Data
@Builder
public class OrderVo {
private Long id;// 订单编号
private Integer status;// 订单状态
private BigDecimal amount;// 订单金额
private LocalDateTime createTime;// 期望到达时间
private String paymentStatus;// 支付状态
private String serviceName;// 服务名称
private String userName;// 老人名称
private String remark;// 订单备注
private String orderNo;// 订单编号
private String image;// 图片
}
2. 在MemberNursingProjectController中添加获得列表接口,代码如下:
- 测试,观察返回结果
总结
1.4 订单详情退款
前言
好了,接下来,我们开始开发订单详情退款接口。效果图如下:

接下来,我们开始开发订单详情退款接口,接口信息如下:
- 请求方式:
POST
- 请求路径:
/customer/orders/refund
- 请求参数:
{
{
"productOrderNo": "321",
"tradingChannel": "费用有点贵",
"tradingOrderNo": ""//退款单号 暂时不需要用到
}
}
- 返回结果:
{
"code": 200,
"msg": "操作成功",
}
代码操作
1. 在cn.yangeit.dto
包下创建RefundOrderDto
文件,代码如下:
@Data
@Builder
public class ReFundOrderDto {
private String productOrderNo;//订单编号
private String tradingOrderNo;//支付编号
private String tradingChannel;//取消原因
}
在MemberNursingProjectController中添加退款接口,代码如下:
测试,观察返回结果

总结
1.5 订单详情删除
前言
接下来,我们开始开发订单详情删除接口。效果图如下:
接下来,我们开始开发订单详情删除接口,接口信息如下:
- 请求方式:
Delete
- 请求路径:
/customer/orders/319
- 请求参数:路径参数,订单ID
- 返回结果:
{
"code": 200,
"msg": "操作成功",
}
核心代码如下:
测试,观察效果:
总结