xiaoyong931011
2023-03-28 d83c9be06ca59d5d45c884e46c5a8aefa6b65123
后台修改
3 files added
2 files modified
222 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/Ball.java 69 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/BscWebSocketClient.java 81 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/BscWebSocketService.java 68 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/system/systemSetting.html 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -404,7 +404,7 @@
                agentCode
        );
        cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(agentDic.getValue());
        String subsidyPercentStr = jsonObject.get("manageSubsidyPercent").toString();
        String subsidyPercentStr = jsonObject.get("subsidyPercent").toString();
        subsidyPercent =  new BigDecimal(subsidyPercentStr)
                .multiply(new BigDecimal(0.01))
                .setScale(2,BigDecimal.ROUND_DOWN);
src/main/java/cc/mrbird/febs/websocket/Ball.java
New file
@@ -0,0 +1,69 @@
package cc.mrbird.febs.websocket;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Ball extends JPanel implements ActionListener {
    private Timer timer;
    private int x, y;
    private int size;
    public Ball() {
        x = 0;
        y = 0;
        size = 20;
        timer = new Timer(10, this);
        timer.start();
    }
    // 重写paintComponent方法,绘制红色的球
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        // 开启抗锯齿
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        // 设置颜色为红色
        g2d.setColor(Color.RED);
        // 绘制圆形
        g2d.fillOval(x, y, size, size);
    }
    // 重写actionPerformed方法,控制球的大小
    @Override
    public void actionPerformed(ActionEvent e) {
        // 如果球的大小小于100,则增加大小
        if (size < 100) {
            size++;
        } else {
            // 否则减小大小
            size--;
        }
        // 重新绘制
        repaint();
        // 控制球的移动
        x++;
        if (x > getWidth()) {
            x = 0;
        }
    }
    public static void main(String[] args) {
        // 创建窗口
        JFrame frame = new JFrame("Ball");
        // 添加球
        frame.add(new Ball());
        // 设置窗口大小
        frame.setSize(300, 300);
        // 显示窗口
        frame.setVisible(true);
        // 设置关闭窗口时的操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
src/main/java/cc/mrbird/febs/websocket/BscWebSocketClient.java
New file
@@ -0,0 +1,81 @@
package cc.mrbird.febs.websocket;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.TimeUnit;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
public class BscWebSocketClient extends WebSocketClient {
    public BscWebSocketClient(String url) throws URISyntaxException {
        super(new URI(url));
    }
    @Override
    public void onOpen(ServerHandshake handshakedata) {
        System.out.println("Connected to BSC WebSocket node");
        // 订阅ERC-20代币转账事件
        subscribeToErc20Transfers("0x55d398326f99059ff775485246999027b3197955"); // USDT合约地址
    }
    @Override
    public void onMessage(String message) {
        System.out.println("Received message: " + message);
        // 在这里处理收到的区块链事件
        JSONObject jsonObject = new JSONObject(Boolean.parseBoolean(message));
        String method = jsonObject.getString("method");
        if (method.equals("eth_subscription")) {
            JSONArray params = jsonObject.getJSONArray("params");
            JSONObject result = params.getJSONObject(0).getJSONObject("result");
            String from = result.getString("from");
            String to = result.getString("to");
            String value = result.getString("value");
            System.out.println("Received USDT transfer from " + from + " to " + to + ", amount: " + value);
        }
    }
    @Override
    public void onClose(int code, String reason, boolean remote) {
        System.out.println("Disconnected from BSC WebSocket node");
    }
    @Override
    public void onError(Exception ex) {
        System.err.println("Error occurred: " + ex.getMessage());
    }
    // 订阅ERC-20代币转账事件
    private void subscribeToErc20Transfers(String contractAddress) {
        String message = "{\"id\":1,\"method\":\"eth_subscribe\",\"params\":[\"logs\",{" +
                "\"address\":\"" + contractAddress + "\"," +
                "\"topics\":[\"0x" + "a9059cbb" + "\",null,null]," +
                "\"fromBlock\":\"latest\"" +
                "}]}";
        send(message);
        System.out.println("Subscribed to ERC-20 transfer events for " + contractAddress);
    }
    public static void main(String[] args) throws URISyntaxException, InterruptedException {
        String url = "wss://bsc-ws-node.nariox.org:443"; // 更换为您想要连接的节点地址
        BscWebSocketClient client = new BscWebSocketClient(url);
        client.connect();
        // 等待连接成功
        while (!client.isOpen()) {
            System.out.println("Connecting to BSC WebSocket node...");
            TimeUnit.SECONDS.sleep(1);
        }
        // 连接成功后,继续运行程序
        System.out.println("Connected to BSC WebSocket node, waiting for events...");
        TimeUnit.SECONDS.sleep(60); // 等待60秒,以便收到一些事件
        client.close();
    }
}
src/main/java/cc/mrbird/febs/websocket/BscWebSocketService.java
New file
@@ -0,0 +1,68 @@
package cc.mrbird.febs.websocket;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Service;
import java.net.URI;
@Service
public class BscWebSocketService {
    private final String USDT_CONTRACT_ADDRESS = "0xdac17f958d2ee523a2206206994597c13d831ec7"; // USDT合约地址
    private final String YOUR_ADDRESS = "0x1234567890"; // 您的地址
    public void subscribeToUsdtTransfers() throws Exception {
        URI uri = new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"); // BSC主网节点WebSocket API地址
        WebSocketClient client = new WebSocketClient(uri) {
            @Override
            public void onOpen(ServerHandshake handshake) {
                JSONObject payload = new JSONObject();
                payload.put("jsonrpc", "2.0");
                payload.put("method", "eth_subscribe");
                payload.put("params", new Object[]{"logs", getFilterParams()});
                send(payload.toString());
            }
            @Override
            public void onMessage(String message) {
                JSONObject response = new JSONObject(Boolean.parseBoolean(message));
                if (response.containsKey("params")) {
                    JSONObject result = response.getJSONObject("params").getJSONArray("result").getJSONObject(0);
                    String transactionHash = result.getString("transactionHash");
                    String from = result.getString("address");
                    String to = result.getJSONArray("topics").getString(2);
                    String value = result.getJSONArray("data").getString(0);
                    // 在这里处理收到的交易信息
                    // transactionHash: 交易哈希值
                    // from: 发送方地址
                    // to: 接收方地址
                    // value: 转账数量
                }
            }
            @Override
            public void onClose(int code, String reason, boolean remote) {
                System.out.println("WebSocket连接关闭: " + reason);
            }
            @Override
            public void onError(Exception ex) {
                System.out.println("WebSocket连接出错: " + ex.getMessage());
            }
        };
        client.connect();
    }
    private JSONObject getFilterParams() {
        JSONObject filterParams = new JSONObject();
        filterParams.put("address", USDT_CONTRACT_ADDRESS);
        filterParams.put("topics", new String[]{
                "0xa9059cbb000000000000000000000000" + YOUR_ADDRESS.substring(2),
                null,
                null
        });
        return filterParams;
    }
}
src/main/resources/templates/febs/views/modules/system/systemSetting.html
@@ -7,7 +7,7 @@
                        <label class="layui-form-label ">商品补贴比例:</label>
                        <div class="layui-input-block">
                            <input type="text" name="subsidyPercent" data-th-id="${adminSystemSettingVo.subsidyPercent}"
                                   lay-verify="number" autocomplete="off" class="layui-input" >
                                   lay-verify="text" autocomplete="off" class="layui-input" >
                        </div>
                        <div class="layui-word-aux" style="margin-left: 150px;">完成一单,会员获得补贴订单金额</div>
                        <div class="layui-word-aux" style="margin-left: 150px;">【填写整数】:直接输入百分比,例如25%,直接输入25</div>