Hắc mã trời cao cơm hộp 8 Spring Task+WebSocket tới đơn nhắc nhở cùng khách hàng thúc giục đơn

Spring Task

Spring cung cấp nhiệm vụ điều hành công cụ,Dựa theo ước định thời gian tự động chấp hành số hiệu.【 trước kia đều là căn cứ vào thỉnh cầu (http) hưởng ứng 】

cron biểu đạt thức

Thông qua cron biểu đạt thức có thể định nghĩa nhiệm vụ kích phát thời gian.
在这里插入图片描述

cron biểu đạt thức sinh thành khí
( 1 ) dẫn vào spring-context
( 2 ) @EnableScheduling mở ra nhiệm vụ điều hành, ở khởi động loại càng thêm.
( 3 ) tự định nghĩa đúng giờ nhiệm vụ loại

Đơn đặt hàng trạng thái đúng giờ xử lý

Siêu khi đơn đặt hàng xử lý

  1. Hạ đơn sau chưa chi trả, đơn đặt hàng vẫn luôn ở vào “Đãi chi trả” trạng thái
    Mỗi phút kiểm tra một lần, phán đoán thời điểm không tồn tại chi trả siêu khi đơn đặt hàng ( hạ đơn vượt qua 15 phút cho rằng chi trả tắc phán định vì chi trả siêu khi đơn đặt hàng ),
    Tồn tại tắc sửa chữa đơn đặt hàng trạng thái vì “Đã hủy bỏ”
  2. Người dùng thu hóa, đơn đặt hàng vẫn luôn ở vào “Phái đưa trung”
    Mỗi ngày rạng sáng 1 giờ kiểm tra hay không tồn tại “Phái đưa trung” đơn đặt hàng, tồn tại tắc sửa chữa đơn đặt hàng trạng thái vì “Đã hoàn thành”

task.OrderTask.java

@Component
@Slf4j
publicclassOrderTask{

@Autowired
privateOrderMapperorderMapper;

/**
* xử lý siêu khi đơn đặt hàng
*/
@Scheduled(cron="0 * * * *?")// mỗi phút kích phát một lần giây phân khi ngày nguyệt chu năm ( nhưng tuyển )
publicvoidprocessTimeOutOrders(){
LocalDateTimetime=LocalDateTime.now().plusMinutes(-15);// trước mặt thời gian -15
// căn cứ cái này đi tra ( ở vào đãi phó trạng thái, hạ đơn thời gian < trước mặt thời gian -15)
List<Orders>orders=orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT,time);
if(orders!=null&&orders.size()!=0){
List<Long>ids=newArrayList<>();
orders.forEach((order)->
ids.add(order.getId())
);
orderMapper.updateTimeOutByIds(Orders.CANCELLED,"Đơn đặt hàng siêu khi, tự động hủy bỏ",LocalDateTime.now(),ids);// sửa chữa đơn đặt hàng trạng thái
}
}

/**
* kiểm tra vẫn luôn ở vào phái đưa trung đơn đặt hàng
*/
@Scheduled(cron="0 0 1 * *?")// mỗi ngày rạng sáng 1 giờ kích phát một lần
publicvoidprocessDeliveringOrders(){
LocalDateTimetime=LocalDateTime.now().plusMinutes(-60);
List<Orders>orders=orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS,time);
if(orders!=null&&orders.size()!=0){
List<Long>ids=newArrayList<>();
orders.forEach((order)->
ids.add(order.getId())
);
orderMapper.updateDeliveringByIds(Orders.COMPLETED,ids);
}
}

}
@Select("select * from orders where status=#{status} and order_time<#{orderTime}")
List<Orders>getByStatusAndOrderTimeLT(Integerstatus,LocalDateTimeorderTime);

WebSocket

Căn cứ vào TCP một loại tân internet hiệp nghị. Thực hiện trình duyệt cùng serverToàn song công thông tín—— trình duyệt cùng server chỉ cần hoàn thành một lần bắt tay, hai người liền có thể thành lập liên tiếp,Song hướng số liệu truyền.
在这里插入图片描述
HTTP: Trình duyệt ( bản cài đặt ) — server: Trình duyệt thỉnh cầu server mới hưởng ứng.
WebSocket: Hai bên đều có thể chủ động thông tín.

Ứng dụng cảnh tượng: Trang web nói chuyện phiếm, video làn đạn, cổ phiếu tin tức thật thời đổi mới ( server chủ động đẩy đưa đến trang web thượng )
在这里插入图片描述

/**
* WebSocket phục vụ
*/
@Component
@ServerEndpoint("/ws/{sid}")// cũng là căn cứ đường nhỏ tới xứng đôi
publicclassWebSocketServer{

// gửi hội thoại đối tượng
privatestaticMap<String,Session>sessionMap=newHashMap();

/**
* liên tiếp thành lập thành công thuyên chuyển phương pháp
*/
@OnOpen// biến thành hồi điều phương pháp --- chính là thành lập liên tiếp sau sẽ tự động thuyên chuyển
publicvoidonOpen(Sessionsession,@PathParam("sid")Stringsid){
System.out.println("Bản cài đặt:"+sid+"Thành lập liên tiếp");
sessionMap.put(sid,session);
}

/**
* thu được bản cài đặt tin tức sau thuyên chuyển phương pháp
*
* @param message bản cài đặt gửi đi lại đây tin tức
*/
@OnMessage// cùng loại @controller
publicvoidonMessage(Stringmessage,@PathParam("sid")Stringsid){
System.out.println("Thu được đến từ bản cài đặt:"+sid+"Tin tức:"+message);
}

/**
* liên tiếp đóng cửa thuyên chuyển phương pháp
*
* @param sid
*/
@OnClose
publicvoidonClose(@PathParam("sid")Stringsid){
//System.out.println( "Liên tiếp tách ra:" + sid);
sessionMap.remove(sid);
}

/**
* đàn phát
*
* @param message
*/
publicvoidsendToAllClient(Stringmessage){// chủ động thuyên chuyển
Collection<Session>sessions=sessionMap.values();
for(Sessionsession:sessions){// biến lịch sở hữu bản cài đặt, đều cho bọn hắn phát tin tức
try{
// server hướng bản cài đặt gửi đi tin tức
session.getBasicRemote().sendText(message);
}catch(Exceptione){
e.printStackTrace();
}
}
}

}

Đúng giờ nhiệm vụ loại:
task.WebSocketTask.java

@Component
publicclassWebSocketTask{// đúng giờ nhiệm vụ loại
@Autowired
privateWebSocketServerwebSocketServer;

/**
* thông qua WebSocket mỗi cách 5 giây hướng bản cài đặt gửi đi tin tức
*/
@Scheduled(cron="0/5 * * * *?")
publicvoidsendMessageToClient(){
// điều đàn phát phương pháp
webSocketServer.sendToAllClient("Đây là đến từ phục vụ quả nhiên tin tức:"+DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
}
}

Tới đơn nhắc nhở

Người dùng hạ đơn thả chi trả thành công cho dù thông tri thương gia.
在这里插入图片描述
Thỉnh cầu: ws://localhost/ws/0yf1emeoqu8a
Trước hết mời cầu đến ngnix, sau đó nginx đem thỉnh cầu chuyển phát đến sau quả nhiên Tomcat server
Căn cứ vào nginx ngược hướng đại lý sau đó đem thỉnh cầu chuyển phát lại đây

Ở OrderServiceImpl.java public void paySuccess(String outTradeNo) loại trung tăng thêm

// thông qua websocket tưởng bản cài đặt đẩy đưa tin tức type prderId content
// tới đơn nhắc nhở
HashMap<String,Object>map=newHashMap<>();
map.put("type",1);//1 tới đơn nhắc nhở 2 khách hàng tiếp đơn
map.put("orderId",ordersDB.getId());
map.put("content","Đơn đặt hàng hào:"+outTradeNo);

// gửi đi cấp bản cài đặt
webSocketServer.sendToAllClient(JSONObject.toJSONString(map));

Khách hàng thúc giục đơn

在这里插入图片描述
Khách hàng kích phát, khách hàng khởi xướng tiếp lời thỉnh cầu:
在这里插入图片描述

Controller:

@GetMapping("/reminder/{id}")
@ApiOperation("Người dùng thúc giục đơn")
publicResultreminder(@PathVariableLongid){
orderService.reminder(id);
returnResult.success();
}

service

@Override
publicvoidreminder(Longid){
Ordersorder=orderMapper.getById(id);
if(order==null){
thrownewOrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
}

HashMap<String,Object>map=newHashMap<>();
map.put("type",2);
map.put("orderId",id);
map.put("content","Đơn đặt hàng hào:"+id);

webSocketServer.sendToAllClient(JSONObject.toJSONString(map));// hướng bản cài đặt đẩy đưa tin tức
}
  • 14
    Điểm tán
  • Dẫm
  • 10
    Cất chứa
    Cảm thấy cũng không tệ lắm? Một kiện cất chứa
  • 0
    Bình luận

“Tương quan đề cử” đối với ngươi có trợ giúp sao?

  • Phi thường không trợ giúp
  • Không trợ giúp
  • Giống nhau
  • Có trợ giúp
  • Phi thường có trợ giúp
Đệ trình
Bình luận
Tăng thêm bao lì xì

Thỉnh điền bao lì xì chúc phúc ngữ hoặc tiêu đề

Cái

Bao lì xì cái số nhỏ nhất vì 10 cái

Nguyên

Bao lì xì kim ngạch thấp nhất 5 nguyên

Trước mặt ngạch trống3.43Nguyên Đi trước nạp phí >
Cần chi trả:10.00Nguyên
Thành tựu một trăm triệu kỹ thuật người!
Lĩnh sau ngươi sẽ tự động trở thành bác chủ cùng bao lì xì chủ fans Quy tắc
hope_wisdom
Phát ra bao lì xì
Thật phóNguyên
Sử dụng ngạch trống chi trả
Điểm đánh một lần nữa thu hoạch
Quét mã chi trả
Tiền bao ngạch trống 0

Để khấu thuyết minh:

1. Ngạch trống là tiền bao nạp phí giả thuyết tiền, dựa theo 1:1 tỉ lệ tiến hành chi trả kim ngạch để khấu.
2. Ngạch trống vô pháp trực tiếp mua sắm download, có thể mua sắm VIP, trả phí chuyên mục cập chương trình học.

Ngạch trống nạp phí