1. 程式人生 > 資料庫 >解決高併發-springboot-redis-mysql醫院預約系統專案超詳細講解--半個小時教你如何使用springboot完成預約專案-----第六章:刪除預約

解決高併發-springboot-redis-mysql醫院預約系統專案超詳細講解--半個小時教你如何使用springboot完成預約專案-----第六章:刪除預約

之前我們寫過三個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>