解決高併發-springboot-redis-mysql醫院預約系統專案超詳細講解--半個小時教你如何使用springboot完成預約專案-----第六章:刪除預約
阿新 • • 發佈:2021-01-09
之前我們寫過三個set方法,刪除也需要刪除三個del方法,不然會導致資料不一致
set為了去重,hash為了方便檢視預約,list為了算方便算長度(預約數)
dao層
RedisDao 新增三個方法
@Override public Integer hashDel(String key, String hkey) { return redisTemplate.opsForHash().delete(key, hkey).intValue(); } @Override public Integer setDel(String key, String value) { return redisTemplate.opsForSet().remove(key, value).intValue(); } @Override public Integer listDel(String key, String value) { return redisTemplate.opsForList().remove(key,1,value).intValue(); }
service層
BOokingServiceImpl
@Transactional public Integer delOneBooking(Booking booking) { SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); String date = fmt.format(booking.getBookingDate()); Integer doctorId = booking.getDoctor().getDoctorId(); Integer patientId = booking.getPatient().getPatientId(); String key = "patient:" + patientId; redisDao.hashDel(key, date + "@" + booking.getVisitTime()); key = String.format("patient-set:%s", date); redisDao.setDel(key,patientId.toString()); key = String.format("doctor:%d:%s", doctorId, date); System.out.println(key); Integer integer = redisDao.listDel(key,doctorId.toString()); return 1; }
controller層
BookingController
//頁面獲取doctorid 因為好多鍵名需要它
@RequestMapping("del_booking") @ResponseBody public Map<String, Object> delOneBooking(Booking booking,Integer doctorId, HttpSession session) { Map<String, Object> result = new HashMap<>(); Patient user = (Patient)session.getAttribute("user"); Doctor doctor = new Doctor(); doctor.setDoctorId(doctorId);//修改doctorId booking.setDoctor(doctor); booking.setPatient(user); if (bookingService.delOneBooking(booking) > 0) { result.put("success", true); } else { result.put("success", false); } return result; }
頁面
ajax
function delBooking(obj) {
var bookingDate = $(obj).parent().prev().prev().text();
var visitTime = $(obj).parent().prev().text();
var doctorId = $(obj).parent().parent().find("input").val(); //從隱藏input標籤獲取醫生id
$.ajax({
url: 'del_booking?bookingDate='+bookingDate+"&visitTime="+visitTime+"&doctorId="+doctorId,
type: 'post',
dataType: "json",
success: function (data) {
if (data.success) {
//刪除本行資料
$(obj).parent().parent().remove();
}
else {
alert("取消失敗");
}
},
error: function(error){ //失敗後回撥
alert("伺服器連線失敗");
}
});
}
頁面迴圈列表 寫一個隱藏的input標籤 估計是最笨的方法了吧 ~
<#list bookings as b>
<tr>
<input type="hidden" value="${b.doctor.doctorId}">
<td>${b_index + 1}</td>
<td>${b.doctor.office.officeName}</td>
<td>${b.doctor.name}</td>
<td>${b.bookingDate?string("yyyy-MM-dd")}</td>
<td>${b.visitTime}</td>
<td><a href="javascript:void(0)" onclick="delBooking(this)">取消預約</a></td>
</tr>
</#list>