src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/websocket/Ball.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/websocket/BscWebSocketClient.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/websocket/BscWebSocketService.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/templates/febs/views/modules/system/systemSetting.html | ●●●●● 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>