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ý
- 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ỏ” - 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
}