全部开发者教程

企业级在线办公系统

上个小节我们配置好了SpringBoot上面的WebSocket,我们可以主动向客户端推送消息了。那么这节课咱们就补充一下后端Web方法的代码,后端接收到微信平台发送的付款成功通知,然后用WebSocket技术把结果推送给前端页面。

图片描述

一、编写持久层代码

因为微信平台发送过来的XML数据中,没有userId,所以我们想根据userId查找缓存的Session,然后给客户端推送结果也就犯了难,那怎么办呢?我们可以用商品订单ID查找罚款单记录关联的userId,这不就迎刃而解了。

TbAmectDao.xml文件中,定义SQL语句。

<select id="searchUserIdByUUID" parameterType="String" resultType="Integer">
    SELECT user_id AS userId
    FROM tb_amect
    WHERE uuid = #{uuid}
</select>

TbAmectDao.java接口中,定义DAO方法。

public interface TbAmectDao {
    ……
    public int searchUserIdByUUID(String uuid);
}

二、编写业务层代码

AmectService.java接口中,声明抽象方法。

public interface AmectService {
    ……
    public int searchUserIdByUUID(String uuid);
}

AmectServiceImpl.java类中,实现抽象方法。

public class AmectServiceImpl implements AmectService {
    ……
    @Override
    public int searchUserIdByUUID(String uuid) {
        int userId = amectDao.searchUserIdByUUID(uuid);
        return userId;
    }
}

三、编写Web层代码

AmectController.java类中,添加向前端推送付款结果的代码。

public class AmectController {
    ……
    @Operation(summary = "接收消息通知")
    @RequestMapping("/recieveMessage")
    public void recieveMessage(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ……
        int rows = amectService.updateStatus(param);
        if (rows == 1) {
            //根据罚款单ID查询用户ID
            int userId = amectService.searchUserIdByUUID(outTradeNo);
            //向用户推送结果
            WebSocketService.sendInfo("收款成功", userId + "");
            ……
        }
        ……
    }
}