Part08 中州养老AI+IOT项目实训

YangeIT大约 8 分钟tlias智能学习辅助系统MysqlApifoxServletHTTPGETPOST

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>

具体图解如下:👇

image
image

3. 重新导入mp-weixing项目,并启动项目,测试订单模块是否可以正常使用原有的代码没有订单模块,所以需要重新导入项目

关注微信群里中的mp-weixin.rar压缩文件

image
image

总结

课堂作业

参考上述内容,完成订单模块的准备工作。

1.2 下单接口开发

前言

如果你完成了服务项目列表的展示和服务详情的展示,那么可以开发下单接口了。效果图如下:

如果还没有完成,请先完成服务项目列表的展示和服务详情的展示,在part07的笔记中

image
image

接口信息如下:👇

  • 请求方式:POST
  • 请求路径:/customer/orders
  • 请求参数:
{
  "amount": 15,//  金额
  "elderId": 1,//  服务对象ID
  "estimatedArrivalTime": "2025-06-24 21:30:00",//  预计到达时间
  "name": "刘备",//  服务对象姓名
  "projectId": "3",//  服务项目id
  "remark": "请细心些"//  下单备注
}
  • 返回结果:
{
  "code": 200,
  "msg": "操作成功",
}

逻辑说明: 👇

  1. 需要用到dto来接受请求参数
  2. 因为支付模块集成需要商户账号,因此这里的下单直接设置为已支付,status=1
  3. 订单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中添加下单接口,代码如下:

image
image

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

image
image

1.3 订单列表接口开发

前言

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

image
image

接下来,我们开始开发订单列表接口,接口信息如下:

  • 请求方式: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中添加获得列表接口,代码如下:image

  1. 测试,观察返回结果image

总结

课堂作业

  1. 参考上述代码,自行完成订单列表的开发🎤

完成后,将练习代码截图提交到任务平台Day08,直接作为实训分数!(http://taskshare.yangeit.cn:21016/)open in new window

1.4 订单详情退款

前言

好了,接下来,我们开始开发订单详情退款接口。效果图如下:

image
image

接下来,我们开始开发订单详情退款接口,接口信息如下:

  • 请求方式: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;//取消原因
}
  1. 在MemberNursingProjectController中添加退款接口,代码如下:image

  2. 测试,观察返回结果

image
image

总结

课堂作业

1.参考上述代码,自行完成订单详情退款接口的开发🎤

完成后,将练习代码截图提交到任务平台Day08,直接作为实训分数!(http://taskshare.yangeit.cn:21016/)open in new window

1.5 订单详情删除

前言

接下来,我们开始开发订单详情删除接口。效果图如下: image

接下来,我们开始开发订单详情删除接口,接口信息如下:

  • 请求方式:Delete
  • 请求路径:/customer/orders/319
  • 请求参数:路径参数,订单ID
  • 返回结果:
{
  "code": 200,
  "msg": "操作成功",
}

核心代码如下: image

测试,观察效果: image

总结

课堂作业

  1. 参考上述代码,自行完成订单详情删除接口的开发🎤

完成后,将练习代码截图提交到任务平台Day08,直接作为实训分数!(http://taskshare.yangeit.cn:21016/)open in new window