国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket

這篇具有很好參考價(jià)值的文章主要介紹了Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

本章實(shí)現(xiàn)的業(yè)務(wù)功能

超時(shí)未支付訂單自動(dòng)取消,配送中訂單商家忘點(diǎn)完成自動(dòng)再固定時(shí)間檢查且修改成完成狀態(tài)
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
來單提醒功能
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
催單提醒功能
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

SpringTask

介紹

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

SpringTask_corn表達(dá)式

一般的話周幾和第幾日是不能同時(shí)出現(xiàn)的
因?yàn)楸热?4月15日 周四 可能4月15日不是周四 可能沖突的 所以周和日一般只能有一個(gè)
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
現(xiàn)在有這種生成表達(dá)式的網(wǎng)站
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
!其實(shí)還挺復(fù)雜的,建議看個(gè)視頻稍微學(xué)一下怎么用這個(gè)網(wǎng)站

Spring_Task入門案例

使用springtask主要關(guān)注 1.cron表達(dá)式 2.內(nèi)部處理邏輯
spring_Task挺小的一個(gè)框架,是沒有自己的jar包的,集成在了spring_context這個(gè)包里面
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
自定義的定時(shí)任務(wù)類
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

訂單狀態(tài)定時(shí)處理

需求分析

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
合理一點(diǎn),你派送中訂單不能12點(diǎn)弄的,一般這個(gè)時(shí)候有很多是真的在派送中的

代碼開發(fā)

com.sky.Task.OrderTask

//自定義定時(shí)任務(wù)類,定時(shí)處理訂單狀態(tài)
@Component
@Slf4j
public class OrderTask {
    @Autowired
    private OrderMapper orderMapper;

    /**
     * 處理超時(shí)訂單的方法,每分鐘觸發(fā)一次
     */
    @Scheduled(cron = "0 * * * * ?")//每分鐘觸發(fā)一次
    public void processTimeoutOrder(){
        log.info("定時(shí)處理超時(shí)訂單:{}", LocalDateTime.now());
        //select * from orders where status = ? and order_time < (當(dāng)前時(shí)間-15分鐘)
        List<Orders> ordersList = orderMapper.
                getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, LocalDateTime.now().plusMinutes(-15));

        if(ordersList != null && ordersList.size() > 0){
            for (Orders orders : ordersList) {
                orders.setStatus(Orders.CANCELLED);
                orders.setCancelReason("訂單超時(shí),自動(dòng)取消");
                orders.setCancelTime(LocalDateTime.now());
                orderMapper.update(orders);
            }

        }
    }

    /**
     * 處理一直處于派送中的訂單
     */
    @Scheduled(cron = "0 0 1 * * ?")//每天凌晨一點(diǎn)觸發(fā)一次
    public void processDeliveryOrder(){
        log.info("定時(shí)處理處于派送中的訂單:{}",LocalDateTime.now());

        List<Orders> ordersList = orderMapper.
                getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, LocalDateTime.now().plusMinutes(-60));
        if(ordersList != null && ordersList.size() > 0){
            for (Orders orders : ordersList) {
                orders.setStatus(Orders.COMPLETED);
                orderMapper.update(orders);
            }
        }
    }
}

ordermapper

    /**
     *根據(jù)訂單狀態(tài)和訂單時(shí)間查詢訂單
     * @return
     */
    @Select("select * from orders where status=#{status} and order_time < #{orderTime} ")
    List<Orders> getByStatusAndOrderTimeLT(Integer status, LocalDateTime orderTime);

功能測(cè)試


這個(gè)運(yùn)行然后看數(shù)據(jù)庫
弄幾個(gè)status為1(待支付)的訂單然后等到它自動(dòng)處理看看能不能取消
然后那個(gè)配送的可以改一下那個(gè)cron表達(dá)式不用真的等到1點(diǎn)

WebScoket

介紹

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

入門案例

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
com.sky.webscoket.WebSocketServer
前三個(gè)方法 1. 建立連接 2.進(jìn)行通話 3.結(jié)束連接
最后一個(gè)是 服務(wù)端向客戶端發(fā)送信息的方法需要自己調(diào)用 所以沒有注解標(biāo)識(shí)

package com.sky.webscoket;

/**
 * WebSocket服務(wù)
 */
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {

    //存放會(huì)話對(duì)象
    private static Map<String, Session> sessionMap = new HashMap();

    /**
     * 連接建立成功調(diào)用的方法
     */
     
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
        System.out.println("客戶端:" + sid + "建立連接");
        sessionMap.put(sid, session);
    }

    /**
     * 收到客戶端消息后調(diào)用的方法
     *
     * @param message 客戶端發(fā)送過來的消息
     */
     
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
        System.out.println("收到來自客戶端:" + sid + "的信息:" + message);
    }

    /**
     * 連接關(guān)閉調(diào)用的方法
     *
     * @param sid
     */
     
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
        System.out.println("連接斷開:" + sid);
        sessionMap.remove(sid);
    }

    /**
     * 群發(fā)
     *
     * @param message
     */
    public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服務(wù)器向客戶端發(fā)送消息
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

給這個(gè)bean注冊(cè)一下
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

弄個(gè)Task來模擬服務(wù)端發(fā)消息
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

然后自己運(yùn)行一下看效果
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

來單提醒

需求分析

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

代碼開發(fā)

修改OrderServiceImpl的代碼
在PaySuccess下新增推送消息即可
新增的

        //通過websocket向客戶端瀏覽器推送消息!!!!!!!!!
        Map map = new HashMap();
        map.put("type",1);//type1表示來單提醒 2表示客戶催單
        map.put("orderId",ordersDB.getId());
        map.put("content","訂單號(hào)"+ outTradeNo);
        String json = JSON.toJSONString(map);
        webSocketServer.sendToAllClient(json);

完整的


    /**
     * 支付成功,修改訂單狀態(tài)
     *
     * @param outTradeNo
     */
    public void paySuccess(String outTradeNo) {

        // 根據(jù)訂單號(hào)查詢訂單
        Orders ordersDB = orderMapper.getByNumber(outTradeNo);

        // 根據(jù)訂單id更新訂單的狀態(tài)、支付方式、支付狀態(tài)、結(jié)賬時(shí)間
        Orders orders = Orders.builder()
                .id(ordersDB.getId())
                .status(Orders.TO_BE_CONFIRMED)
                .payStatus(Orders.PAID)
                .checkoutTime(LocalDateTime.now())
                .build();

        orderMapper.update(orders);

        //通過websocket向客戶端瀏覽器推送消息!!!!!!!!!
        Map map = new HashMap();
        map.put("type",1);//type1表示來單提醒 2表示客戶催單
        map.put("orderId",ordersDB.getId());
        map.put("content","訂單號(hào)"+ outTradeNo);
        String json = JSON.toJSONString(map);
        webSocketServer.sendToAllClient(json);

    }

功能測(cè)試

這個(gè)略顯難受
因?yàn)槲覀儗?shí)際上沒有實(shí)現(xiàn)微信支付接口
所以我們要更改一下邏輯的
小程序前端

if (res.code === 1) {
            wx.showModel({
              title: '提示',
              content: '支付成功',
              success:function(){
                uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
              }
            })
          //  wx.requestPayment({
          //    nonceStr: res.data.nonceStr,
          //    package: res.data.packageStr,
          //    paySign: res.data.paySign,
          //    timeStamp: res.data.timeStamp,
          //    signType: res.data.signType,
          //    success:function(res){
          //      wx.showModal({
          //        title: '提示',
          //        content: '支付成功',
          //        success:function(){
          //          uni.redirectTo({url: '/pages/success/index?orderId=' + _this.orderId });
          //        }
          //      })
          //      console.log('支付成功!')
          //    }
          //  })

//  直接重新定向不用微信支付
//這里的代碼移到前面

Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
OrderController
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python

OrderServiceImpl
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python
效果就會(huì)是你點(diǎn)擊確定支付就會(huì)直接支付成功
且不會(huì)跳出那個(gè)支付成功的頁面

客戶催單

代碼開發(fā)

controller

   /**
     * 客戶催單
     * @param id
     * @return
     */
    @ApiOperation("客戶催單")
    @GetMapping("/reminder/{id}")
    public Result reminder(@PathVariable Long id){
        orderService.reminder(id);
        return Result.success();
    }

serviceimpl

    /**
     * 用戶催單
     * @param id
     */
    public void reminder(Long id) {
        // 根據(jù)id查詢訂單
        Orders ordersDB = orderMapper.getById(id);

        // 校驗(yàn)訂單是否存在
        if (ordersDB == null) {
            throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
        }
        Map map = new HashMap();
        map.put("type",2);//1表示來單提醒 2表示客戶催單
        map.put("orderId",id);
        map.put("content","訂單號(hào):"+ordersDB.getNumber());
        String json = JSON.toJSONString(map);
        webSocketServer.sendToAllClient(json);

    }

功能測(cè)試

催單去個(gè)人中心的訂單找
然后我這個(gè)沒報(bào)語音(后來我換了edge瀏覽器就可以了)
Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket,項(xiàng)目記錄,java,websocket,python文章來源地址http://www.zghlxwxcb.cn/news/detail-702430.html

到了這里,關(guān)于Java項(xiàng)目-蒼穹外賣-Day10-SpirngTask及WebSocket的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java項(xiàng)目-蒼穹外賣-Day11-Apache ECharts數(shù)據(jù)統(tǒng)計(jì)

    Java項(xiàng)目-蒼穹外賣-Day11-Apache ECharts數(shù)據(jù)統(tǒng)計(jì)

    主要是以下四項(xiàng)的統(tǒng)計(jì),以不同形式的圖形進(jìn)行展示 自己去網(wǎng)站上看一哈,我不太懂前端 com.sky.controller.admin.ReportController com.sky.service.impl.ReportServiceImpl.java orderMapper orderMapper.xml Reportcontroller ReportServiceImpl orderMapper.xml reportController ReportServiceImpl orderMapper.xml

    2024年02月09日
    瀏覽(27)
  • 蒼穹外賣day02項(xiàng)目日志

    蒼穹外賣day02項(xiàng)目日志

    參考產(chǎn)品原型,設(shè)計(jì)表和接口。 1.1.1設(shè)計(jì)表 看員工管理的產(chǎn)品原型: 有員工姓名、賬號(hào)、手機(jī)號(hào)、賬號(hào)狀態(tài)、最后操作時(shí)間等。 注意,操作一欄不是字段,其中的啟用禁用才是。 再看添加員工的原型: ?可以發(fā)現(xiàn)還有性別和身份證號(hào)。 不要忘了旁邊: 還有密碼。 總結(jié)出了

    2024年02月14日
    瀏覽(27)
  • 項(xiàng)目實(shí)戰(zhàn)————蒼穹外賣(DAY11)

    項(xiàng)目實(shí)戰(zhàn)————蒼穹外賣(DAY11)

    Apache ECharts 營(yíng)業(yè)額統(tǒng)計(jì) 用戶統(tǒng)計(jì) 訂單統(tǒng)計(jì) 銷量排名Top10 功能實(shí)現(xiàn): 數(shù)據(jù)統(tǒng)計(jì) 數(shù)據(jù)統(tǒng)計(jì)效果圖: 1.1 介紹 Apache ECharts 是一款基于 Javascript 的數(shù)據(jù)可視化圖表庫,提供直觀,生動(dòng),可交互,可個(gè)性化定制的數(shù)據(jù)可視化圖表。 官網(wǎng)地址:Apache ECharts 常見效果展示: 1). 柱形圖

    2024年01月20日
    瀏覽(25)
  • 蒼穹外賣項(xiàng)目解讀(四) 微信小程序支付、定時(shí)任務(wù)、WebSocket

    蒼穹外賣項(xiàng)目解讀(四) 微信小程序支付、定時(shí)任務(wù)、WebSocket

    HM新出springboot入門項(xiàng)目《蒼穹外賣》,筆者打算寫一個(gè)系列學(xué)習(xí)筆記,“蒼穹外賣項(xiàng)目解讀”,內(nèi)容主要從HM課程,自己實(shí)踐,以及踩坑填坑出發(fā),以技術(shù),經(jīng)驗(yàn)為主,記錄學(xué)習(xí),也希望能給在學(xué)想學(xué)的小伙伴一個(gè)參考。 注:本文章是直接拿到項(xiàng)目的最終代碼,然后從代碼出發(fā)

    2024年02月07日
    瀏覽(23)
  • 蒼穹外賣 Spring Task 來單提醒 催單Apache ECharts day10~11

    蒼穹外賣 Spring Task 來單提醒 催單Apache ECharts day10~11

    Spring Task 訂單狀態(tài)定時(shí)處理 WebSocket 來單提醒 客戶催單 功能實(shí)現(xiàn): 訂單狀態(tài)定時(shí)處理 、 來單提醒 和 客戶催單 訂單狀態(tài)定時(shí)處理: 來單提醒: 客戶催單: 1.1 介紹 Spring Task 是Spring框架提供的 任務(wù)調(diào)度工具 ,可以按照約定的時(shí)間自動(dòng)執(zhí)行某個(gè)代碼邏輯。 定位: 定時(shí)任務(wù)框

    2024年02月14日
    瀏覽(21)
  • itheima蒼穹外賣項(xiàng)目學(xué)習(xí)筆記--Day9: 訂單模塊

    (1). 查詢歷史訂單 在OrderController中,創(chuàng)建查詢方法 在OrderServiceImpl中,創(chuàng)建分頁查詢方法,及其父類接口 在OrderMapper中,添加查詢方法,并在映射文件中寫入動(dòng)態(tài)SQL語句 在OrderDetailMapper中,實(shí)現(xiàn)根據(jù)訂單id查詢訂單明細(xì) (2). 查詢訂單詳細(xì) 在OrderController中,創(chuàng)建查詢訂單詳細(xì)方

    2024年02月16日
    瀏覽(184)
  • itheima蒼穹外賣項(xiàng)目學(xué)習(xí)筆記--Day1:項(xiàng)目介紹與開發(fā)環(huán)境搭建

    itheima蒼穹外賣項(xiàng)目學(xué)習(xí)筆記--Day1:項(xiàng)目介紹與開發(fā)環(huán)境搭建

    (1). 前端環(huán)境搭建 前端工程基于 nginx 運(yùn)行 啟動(dòng)nginx:雙擊 nginx.exe 即可啟動(dòng) nginx 服務(wù),訪問端口號(hào)為 80 (2). 后端環(huán)境搭建 后端工程基于 maven 進(jìn)行項(xiàng)目構(gòu)建,并且進(jìn)行分模塊開發(fā) (3). 前后端聯(lián)調(diào) 修改數(shù)據(jù)庫中明文密碼,改為MD5加密后的密文 修改Java代碼,前端提交的密碼進(jìn)行

    2024年02月15日
    瀏覽(29)
  • itheima蒼穹外賣項(xiàng)目學(xué)習(xí)筆記--Day7:緩存商品 / 購物車

    通過Redis來緩存菜品數(shù)據(jù),減少數(shù)據(jù)庫查詢操作。 緩存邏輯分析: 每個(gè)分類下的菜品保存一份緩存數(shù)據(jù) 數(shù)據(jù)庫中菜品數(shù)據(jù)有變更時(shí)清理緩存數(shù)據(jù) 修改用戶端接口 DishController 的 list 方法,加入緩存處理邏輯 修改管理端接口 DishController 的相關(guān)方法,加入清理緩存的邏輯,需要

    2024年02月16日
    瀏覽(23)
  • 【java蒼穹外賣項(xiàng)目實(shí)戰(zhàn)三】nginx反向代理和負(fù)載均衡

    【java蒼穹外賣項(xiàng)目實(shí)戰(zhàn)三】nginx反向代理和負(fù)載均衡

    我們思考一個(gè)問題: 前端發(fā)送的請(qǐng)求,是如何請(qǐng)求到后端服務(wù)的? 前端請(qǐng)求地址:http://localhost/api/employee/login 后端接口地址:http://localhost:8080/admin/employee/login 很明顯,兩個(gè)地址不一致,那是如何請(qǐng)求到后端服務(wù)的呢? 1、nginx反向代理 nginx 反向代理 ,就是將前端發(fā)送的動(dòng)態(tài)

    2024年02月21日
    瀏覽(27)
  • 《蒼穹外賣》電商實(shí)戰(zhàn)項(xiàng)目(java)知識(shí)點(diǎn)整理(P1~P65)【上】

    《蒼穹外賣》電商實(shí)戰(zhàn)項(xiàng)目(java)知識(shí)點(diǎn)整理(P1~P65)【上】

    史上最完整的《蒼穹外賣》項(xiàng)目實(shí)操筆記,跟視頻的每一P對(duì)應(yīng),全系列10萬字,涵蓋詳細(xì)步驟與問題的解決方案。如果你操作到某一步卡殼,參考這篇,相信會(huì)帶給你極大啟發(fā)。 《蒼穹外賣》項(xiàng)目實(shí)操筆記【中】:P66~P122《蒼穹外賣》項(xiàng)目實(shí)操筆記【中】 1. nginx反向代理好處

    2024年01月24日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包