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

YangeIT大约 6 分钟中州养老AIIOT版本MysqlApifoxServletHTTPGETPOST

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

1. 预约模块

1.1. 我的家人

我的家人

接下来完成我的家人列表接口,用于下拉列选择家人。

image
image
  • 请求路径: /customer/user/my
  • 请求方式:GET
  • 请求参数:无
  • 响应格式:application/json;charset=UTF-8
  • 响应数据:👇
{
    "msg": "操作成功",
    "code": 200,
    "data": [
        {
            "id": 15,
            "familyMemberId": 10,//家属id
            "elderId": 1,//老人id
            "createTime": null,
            "updateTime": null,
            "createBy": null,
            "updateBy": null,
            "remark": null,
            "elderName": "刘备"//老人姓名
        },
        {
            "id": 14,
            "familyMemberId": 10,
            "elderId": 6,
            "createTime": null,
            "updateTime": null,
            "createBy": null,
            "updateBy": null,
            "remark": null,
            "elderName": "刘爱国"
        }
    ]
}

可以发现,只需要获取elderId和对应的名字即可。

1.FamilyMemberController代码如下:👇

@GetMapping("/my")
@ApiOperation(value = "我的家人列表")
public AjaxResult  my(HttpServletRequest request) {
    String token = request.getHeader("authorization");
    Claims claims = JwtUtils.parseJWT(token);
    Long userId = Long.valueOf(claims.get("userId").toString());
    if (userId == 0){
        return AjaxResult.error("请先登录");
    }
    List<FamilyMemberElderVo> memberElders = familyMemberElderMapper.selectByMemberId(Long.valueOf(userId));

    return AjaxResult.success(memberElders);
}

2.FamilyMemberMapper接口代码如下:👇

@Mapper
public interface FamilyMemberElderMapper extends BaseMapper<FamilyMemberElder> {
    List<FamilyMemberElderVo> selectByMemberId(Long userId);
}

3.FamilyMemberMapper.xml映射文件代码如下:👇

image
image

测试截图:

有多个地方会用到这个接口。 image

总结

课堂作业

  1. 接下来完成我的家人列表接口,用于下拉列选择家人。

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

1.2 查询取消预约数量

查询取消预约数量

查询某个用户取消预约数量接口,主要用来控制用户的预约次数,如果预约取消过多,则不能继续预约。

image
image
image
image

接下来查看接口信息:

  • 请求路径:/customer/reservation/cancelled-count
  • 请求方式:GET
  • 请求参数:无
  • 响应格式:application/json;charset=UTF-8
  • 响应数据:👇
{
    "msg": "操作成功",
    "code": 200,
    "data": 1 //改用户的取消次数
}

代码如下:👇

image
image

总结

课堂作业

  1. 接下来完成查询取消预约数量接口,用于控制用户的预约次数。

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

1.3 查询每个时间段剩余预约次数

查询每个时间段剩余预约次数

接下来,完成查询每个时间段剩余预约次数接口,用于控制用户的预约次数,避免某个时间段来访的太多,导致无法接待的情况。 image

接下来,查看接口信息:

  • 请求路径:/customer/reservation/countByTime
  • 请求方式:GET
  • 请求参数:time=1750521600000
  • 响应格式:application/json;charset=UTF-8
  • 响应数据:👇

需要准备一个vo类,用于封装时间与次数

@Data
public class TimeCountVo {
    /**
     * 时间
     */
    @ApiModelProperty(value = "时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")//get
    private LocalDateTime time;
    /**
     * 次数
     */
    @ApiModelProperty(value = "次数")
    private Integer count;
}

   @GetMapping("/countByTime")
    @ApiOperation("查询每个时间段剩余预约次数")
    public AjaxResult countReservationsForEachTimeWithinTimeRange(Long time) {

        //2024-09-21
        LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
        //2024-09-21 00:00:00
        LocalDateTime startTime = localDateTime.toLocalDate().atStartOfDay();
        //2024-09-22 00:00:00
        LocalDateTime endTime = startTime.plusHours(24);
        List<TimeCountVo> timeCountVoList = reservationMapper.countReservationsForTime(startTime, endTime);



        return AjaxResult.success(timeCountVoList);
    }

ReservationMapper接口中添加如下方法:

@Mapper
public interface ReservationMapper extends BaseMapper<Reservation> {
 List<TimeCountVo> countReservationsForTime(@Param("startTime") LocalDateTime startTime, @Param("endTime")  LocalDateTime endTime);
}

ReservationMapper.xml映射文件中添加如下代码:

<select id="countReservationsForTime" resultType="cn.yangeit.vo.TimeCountVo">
    SELECT time, 6 - COUNT(*) AS count
    FROM reservation
    WHERE `time` BETWEEN #{startTime}
        AND #{endTime}
        and status != 2
    GROUP BY time
</select>

测试: 👇 image

总结

课堂作业

  1. 接下来完成查询每个时间段剩余预约次数接口,用于控制用户的预约次数。

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

1.4 新增预约 🎯

新增预约

接下来,完成新增预约接口,用于新增预约信息。这里的预约含预约 image

接口信息如下:

  • 请求路径:/customer/reservation
  • 请求方式:POST
  • 请求参数:json格式,具体如下:👇
{
"mobile": "18687777444",
"name": "小王",
"time": "2025-06-23 09:30:00",
"type": 0,
"visitor": "老王"
}




 


如果是探访预约,数据如下:

{
"elderId": 3,
"mobile": "19877776565",
"name": "小张",
"time": "2025-06-23 11:30:00",
"type": 1,
"visitor": "张飞"
}

 



 


  • 响应格式:application/json;charset=UTF-8
  • 响应数据:👇
{
    "code": 200,
    "msg": "预约成功"
}

从上述接口分析,这个接口实现了2种不同的预约,传递的参数也有点不一样,需要一个综合性的dto对象来接受数据

项目中已经自带的ReservationDto类,用于接收数据,如下:👇

@Data
@Builder
public class ReservationDto {
    @ApiModelProperty("预约人")
    private String name;
    @ApiModelProperty("预约人手机号")
    private String mobile;
    @ApiModelProperty("时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime time;
    @ApiModelProperty("探访人")
    private String visitor;
    @ApiModelProperty("预约类型,0:参观预约,1:探访预约")
    private Integer type;
    @ApiModelProperty("预约状态,0:待报道,1:已完成,2:取消,3:过期")
    private Integer status;
    @ApiModelProperty("老人id")
    private Long elderId;
}

代码操作

开发流程:

  1. 编写Controller代码
  2. 编写Mapper接口和Mapper映射配置文件
  3. 微信小程序测试
1 在ReservationController中添加方法
image
image

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量

微信小程序测试

image
image

总结

课堂作业

  1. 参考接口文档和上述步骤,完成新增分页查询🎤

1.5 预约列表分页查询 🎯

预约列表分页查询

接下来完成分页查询接口,用于查询预约列表信息。接口信息如下:

  • 请求路径:/customer/reservation/page
  • 请求方式:GET
  • 请求参数:pageSize=10&pageNum=1&status=0
  • 响应格式:application/json;charset=UTF-8
  • 响应数据:👇
{
    "msg": "操作成功",
    "code": 200,
    "data": {
        "total": 2,
        "rows": [
            {
                "id": 19,
                "name": "小张",
                "mobile": "19877776565",
                "time": "2025-06-23T11:30:00",
                "visitor": "张飞",
                "type": 1,
                "status": 0,
                "createTime": "2025-06-22T20:42:33",
                "updateTime": null,
                "createBy": 10,
                "updateBy": 10,
                "remark": null
            },
            {
                "id": 18,
                "name": "小王",
                "mobile": "18687777444",
                "time": "2025-06-23T09:30:00",
                "visitor": "老王",
                "type": 0,
                "status": 0,
                "createTime": "2025-06-22T20:39:43",
                "updateTime": null,
                "createBy": 10,
                "updateBy": 10,
                "remark": null
            }
        ],
        "code": 200,
        "msg": "请求成功"
    }
}
  1. Controller层代码如下 👇
image
image

注意: 可以通过@Autowired注解,从IOC容器中获取指定类型的对象并赋值给成员变量

微信小程序测试

image
image

总结

课堂作业

  1. 参考接口文档和上述步骤,完成分页查询🎤

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

1.6 取消预约 🎯

新增预约

  1. 阅读接口文档

  2. 接口信息如下:

  • 请求路径:/customer/reservation/18/cancel
  • 请求方式:PUT
  • 请求参数:id
  • 响应格式:application/json
  • 响应数据:👇
{
    "code": 200,
    "msg": "取消成功"
}

最终效果图:

image
image

核心代码:👇 image

微信小程序测试

image
image

总结

课堂作业

  1. 参考接口文档和上述步骤,完成取消订单🎤