解决高并发-springboot-redis-mysql医院预约系统项目超详细讲解--半个小时教你如何使用springboot完成预约项目-----第五章:更换日期查看剩余预约数

	更换日期只会更换预约数,不会更换医生信息,所以需要使用ajax局部刷新
	解决高并发,取出医生信息从缓冲区里取,不要从数据库取
	
	页面id需要显示的时候就把id拼接成字符串,传到页面,在ajax的时候把字符串卸载地址栏上
	更换日期只需要通过页面获取id,通过id和日期查看redis里的医生list长度,在算出预约数
	在使用ajax修改value

mapper
一个方法通过id查询医生信息

doctormmaper 新加一个方法

    <select id="selectDoctorById" parameterType="Integer" resultMap="doctorMap">
        select * from doctor where doctorId = #{doctorId}
    </select>

dao层
CacheDaoImpl 缓冲区实现类
新增一个方法
Cacheable,通过id吧每个医生信息存到redis里,string类型
重点!序列化:医生实体类必须实现Serializable接口

    @Override
    //Cacheable:执行此函数前先在缓存中取数据,若缓存中不存在则执行此函数,并吧信息缓存起来
    @Cacheable(value = "doctor", key = "#p0") //键名为doctor::1
    public Doctor getDoctorById(Integer doctorId) {
        return doctorMapper.selectDoctorById(doctorId);
    }

service层
新增一个方法

@Override
    public Doctor getDoctorById(Integer doctorId) {
        return cacheDao.getDoctorById(doctorId);
    }

controller层
获取预约数方法 页面绑定onchange方法 //onchange参数改变触发
页面获取日期和医生的id字符串(之前all_doctor方法穿过)
获取参数时可以把字符串转成数组(我也不知道为什么,就是能!springboot牛逼!)
获取需要把数据传到地址栏上~

    @RequestMapping("get_total")
    @ResponseBody
    public Map<String, Integer> getDoctorsTotal(Integer[] doctorId, @DateTimeFormat(pattern = "yyyy-MM-dd") Date bookingDate) {

        Map<String, Integer> result = new HashMap<>();

        SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
        String date = fmt.format(bookingDate);

        for (Integer id : doctorId) {
            Doctor doctor = doctorService.getDoctorById(id);

            String key = String.format("doctor:%d:%s", id, date);

            Integer count = redisDao.listLen(key);

            result.put(id.toString(), doctor.getTotal()-count);
        }

        return result;
    }

页面ajax

	function getTotal(obj) {
				$.ajax({
					url: 'get_total?doctorId=${doctorIds}&bookingDate='+$(obj).val(), //$(obj).val()就是修改后的日期
					type: 'post',
					dataType: "json",
					success: function (data) {
						$.each(data, function (key, value) {

							$("#total-"+key).text(value);
						});
					},
					error: function(error){    //失败后回调
						alert("服务器连接失败");
					}
				});
			}

页面
onchage事件传入this

   <div class="col-md-3">
                    <form class="form-inline">
                        <div class="form-group">
							<label>预约日期:</label>
							<select class="form-control"  id="booking-date" name="bookingDate"  onchange="getTotal(this)">
								<#list weekday as d>&ndash;&gt;
								<option value="${d?string("yyyy-MM-dd")}">
									${d?string("yyyy-MM-dd")}
								</option>
								</#list>&ndash;&gt;
							</select>
                        </div>
                    </form>
                </div>

有问题随时评论 第一时间更新解答

上一篇:Java项目-医院挂号管理系统


下一篇:Java学习之继承