更换日期只会更换预约数,不会更换医生信息,所以需要使用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>–>
<option value="${d?string("yyyy-MM-dd")}">
${d?string("yyyy-MM-dd")}
</option>
</#list>–>
</select>
</div>
</form>
</div>
有问题随时评论 第一时间更新解答