From b235462189b7c08069f6ccc1636632e6d1895cf9 Mon Sep 17 00:00:00 2001
From: zhangsan <646228430@qq.com>
Date: Wed, 16 Jul 2025 17:12:35 +0800
Subject: [PATCH] =?UTF-8?q?7.16=20=E5=B0=8F=E5=95=86=E5=9C=BAUI=EF=BC=88?=
=?UTF-8?q?=E6=8B=BC=E5=9B=A2=E7=9A=84UI=E5=A4=8D=E7=94=A8=E5=B9=B6?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=89=E4=B8=8E=E6=8E=A5=E5=8F=A3=E5=AF=B9?=
=?UTF-8?q?=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/dev-ops/mysql/sql/0716paymall.sql | 13 +-
docs/dev-ops/nginx/html/css/index.css | 147 ++++++++
docs/dev-ops/nginx/html/css/login.css | 94 +++++
docs/dev-ops/nginx/html/form.html | 5 -
.../dev-ops/nginx/html/images/goods_info1.png | Bin 0 -> 355755 bytes
.../dev-ops/nginx/html/images/goods_info2.png | Bin 0 -> 288010 bytes
.../dev-ops/nginx/html/images/goods_info3.png | Bin 0 -> 48659 bytes
.../nginx/html/images/keyboard-001.jpg | Bin 972607 -> 0 bytes
docs/dev-ops/nginx/html/images/logo.png | Bin 0 -> 54549 bytes
docs/dev-ops/nginx/html/images/qrcode.png | Bin 0 -> 465698 bytes
docs/dev-ops/nginx/html/index.html | 191 ++++------
docs/dev-ops/nginx/html/js/index.js | 347 ++++++++++++++++++
docs/dev-ops/nginx/html/js/login.js | 52 +++
docs/dev-ops/nginx/html/login.html | 111 +-----
.../order/service/AbstractOrderService.java | 68 +++-
.../domain/order/service/OrderService.java | 2 +-
.../whut/trigger/http/AliPayController.java | 1 +
.../whut/trigger/job/NoPayNotifyOrderJob.java | 5 +-
.../trigger/job/TimeoutCloseOrderJob.java | 9 +-
.../whut/types/weixin/MessageTextEntity.java | 11 +
20 files changed, 815 insertions(+), 241 deletions(-)
create mode 100644 docs/dev-ops/nginx/html/css/index.css
create mode 100644 docs/dev-ops/nginx/html/css/login.css
delete mode 100644 docs/dev-ops/nginx/html/form.html
create mode 100644 docs/dev-ops/nginx/html/images/goods_info1.png
create mode 100644 docs/dev-ops/nginx/html/images/goods_info2.png
create mode 100644 docs/dev-ops/nginx/html/images/goods_info3.png
delete mode 100644 docs/dev-ops/nginx/html/images/keyboard-001.jpg
create mode 100644 docs/dev-ops/nginx/html/images/logo.png
create mode 100644 docs/dev-ops/nginx/html/images/qrcode.png
create mode 100644 docs/dev-ops/nginx/html/js/index.js
create mode 100644 docs/dev-ops/nginx/html/js/login.js
diff --git a/docs/dev-ops/mysql/sql/0716paymall.sql b/docs/dev-ops/mysql/sql/0716paymall.sql
index 4edc432..85d7701 100644
--- a/docs/dev-ops/mysql/sql/0716paymall.sql
+++ b/docs/dev-ops/mysql/sql/0716paymall.sql
@@ -11,7 +11,7 @@
Target Server Version : 80042
File Encoding : 65001
- Date: 16/07/2025 13:59:35
+ Date: 16/07/2025 17:08:44
*/
SET NAMES utf8mb4;
@@ -40,13 +40,16 @@ CREATE TABLE `pay_order` (
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uq_order_id`(`order_id` ASC) USING BTREE,
INDEX `idx_user_id_product_id`(`user_id` ASC, `product_id` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
+) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of pay_order
-- ----------------------------
-INSERT INTO `pay_order` VALUES (31, 'smile01', '9890001', 'MyBatisBook', '376456387082', '2025-07-16 13:47:35', 100.00, 'DEAL_DONE', '
\n', '2025-07-16 13:50:29', 1, 20.00, 80.00, '2025-07-16 13:47:35', '2025-07-16 13:58:39');
-INSERT INTO `pay_order` VALUES (32, 'smile02', '9890001', 'MyBatisBook', '503529040337', '2025-07-16 13:55:51', 100.00, 'DEAL_DONE', '\n', '2025-07-16 13:56:47', 1, 20.00, 80.00, '2025-07-16 13:55:50', '2025-07-16 13:58:39');
-INSERT INTO `pay_order` VALUES (33, 'smile03', '9890001', 'MyBatisBook', '274640446882', '2025-07-16 13:57:47', 100.00, 'DEAL_DONE', '\n', '2025-07-16 13:58:39', 1, 20.00, 80.00, '2025-07-16 13:57:47', '2025-07-16 13:58:40');
+INSERT INTO `pay_order` VALUES (36, 'opEtBvq6go0co-HQC5DSHkKfkdds', '9890001', 'MyBatisBook', '498873906342', '2025-07-16 15:53:11', 100.00, 'DEAL_DONE', '\n', '2025-07-16 15:54:03', 1, 20.00, 80.00, '2025-07-16 15:53:11', '2025-07-16 16:44:47');
+INSERT INTO `pay_order` VALUES (39, 'smile01', '9890001', 'MyBatisBook', '369511405849', '2025-07-16 16:28:58', 100.00, 'PAY_SUCCESS', '\n', '2025-07-16 16:30:33', 1, 20.00, 80.00, '2025-07-16 16:28:57', '2025-07-16 16:30:33');
+INSERT INTO `pay_order` VALUES (40, 'smile01', '9890001', 'MyBatisBook', '698481154046', '2025-07-16 16:34:25', 100.00, 'DEAL_DONE', '\n', '2025-07-16 16:35:36', 0, 0.00, 100.00, '2025-07-16 16:34:24', '2025-07-16 16:35:36');
+INSERT INTO `pay_order` VALUES (41, 'smile02', '9890001', 'MyBatisBook', '541129857040', '2025-07-16 16:36:49', 100.00, 'DEAL_DONE', '\n', '2025-07-16 16:38:05', 1, 20.00, 80.00, '2025-07-16 16:36:49', '2025-07-16 16:44:47');
+INSERT INTO `pay_order` VALUES (42, 'smile04', '9890001', 'MyBatisBook', '381698719384', '2025-07-16 16:43:47', 100.00, 'DEAL_DONE', '\n', '2025-07-16 16:44:47', 1, 20.00, 80.00, '2025-07-16 16:43:46', '2025-07-16 16:44:47');
+INSERT INTO `pay_order` VALUES (45, 'smile04', '9890001', 'MyBatisBook', '380924838419', '2025-07-16 16:54:06', 100.00, 'DEAL_DONE', '\n', '2025-07-16 16:55:14', 0, 0.00, 100.00, '2025-07-16 16:54:05', '2025-07-16 16:55:14');
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/docs/dev-ops/nginx/html/css/index.css b/docs/dev-ops/nginx/html/css/index.css
new file mode 100644
index 0000000..7ec93be
--- /dev/null
+++ b/docs/dev-ops/nginx/html/css/index.css
@@ -0,0 +1,147 @@
+/* ========== 全局 ========== */
+*{
+ margin:0;padding:0;box-sizing:border-box;
+ font-family:'PingFang SC','Helvetica Neue',Arial,sans-serif;
+}
+body{
+ background:#f5f5f5;
+ color:#333;
+ max-width:500px;
+ margin:0 auto;
+ position:relative;
+ padding-bottom:30px;
+}
+
+/* ========== 轮播图 ========== */
+.swiper-container{
+ width:100%;height:375px;position:relative;overflow:hidden;
+}
+.swiper-wrapper{display:flex;transition:transform .3s;}
+.swiper-slide{flex:0 0 100%;height:375px;}
+.swiper-slide img{width:100%;height:100%;object-fit:contain;background:#fff;}
+
+.swiper-pagination{
+ position:absolute;bottom:10px;left:50%;
+ transform:translateX(-50%);display:flex;gap:6px;
+}
+.swiper-dot{
+ width:8px;height:8px;border-radius:50%;
+ background:rgba(255,255,255,.5);transition:all .3s;
+}
+.swiper-dot.active{background:#ff5000;width:16px;border-radius:4px;}
+
+/* ========== 商品信息 ========== */
+.product-info{background:#fff;padding:15px;margin-bottom:10px;}
+.price-row{display:flex;align-items:center;margin-bottom:12px;}
+
+.current-price{color:#ff5000;font-size:28px;font-weight:bold;}
+.current-price::before{content:"¥";font-size:18px;}
+
+.original-price{
+ color:#999;font-size:16px;text-decoration:line-through;margin-left:8px;
+}
+.original-price::before{content:"¥";}
+.title{font-size:18px;font-weight:bold;line-height:1.4;margin-bottom:10px;}
+
+/* 促销行 */
+.promo-row{display:flex;align-items:center;gap:6px;margin-top:6px;}
+.promo-tag{
+ flex-shrink:0;
+ display:inline-block;
+ background:linear-gradient(90deg,#ff2c2c,#ff6b22);
+ color:#fff;font-size:12px;padding:2px 6px;border-radius:2px;
+}
+.promo-box{
+ display:inline-block;font-size:13px;padding:2px 6px;
+ border-radius:4px;font-weight:600;line-height:1.2;white-space:nowrap;
+}
+.promo-box.drop,
+.promo-box.sold{
+ background:linear-gradient(90deg,#ff7e00,#ff5000);
+ color:#fff;
+}
+
+/* ========== 拼单列表 ========== */
+.group-buying{background:#fff;padding:15px;margin-bottom:10px;position:relative;overflow:hidden;}
+.section-title{
+ font-size:16px;font-weight:bold;margin-bottom:12px;position:relative;padding-left:10px;
+}
+.section-title::before{
+ content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
+ width:3px;height:16px;background:#ff5000;border-radius:2px;
+}
+
+.group-users{height:120px;position:relative;overflow:hidden;}
+.user-list{position:absolute;top:0;left:0;width:100%;transition:transform .5s ease;}
+
+.user-item{
+ display:flex;align-items:center;padding:8px 0;border-bottom:1px solid #f5f5f5;
+}
+.user-item:last-child{border-bottom:none;}
+
+.user-avatar{
+ width:40px;height:40px;border-radius:50%;background:#f5f5f5;
+ display:flex;align-items:center;justify-content:center;margin-right:10px;
+ color:#999;font-size:20px;
+}
+
+.user-info{flex:1;}
+.user-name{font-size:15px;font-weight:bold;margin-bottom:4px;}
+.user-status{font-size:13px;color:#666;}
+
+.countdown{
+ display:inline-block;background:#ff5000;color:#fff;
+ padding:1px 4px;border-radius:2px;margin-left:5px;
+}
+
+.buy-btn{
+ background:linear-gradient(90deg,#ff2c2c,#ff6b22);
+ color:#fff;border:none;border-radius:4px;padding:6px 15px;
+ font-size:14px;font-weight:bold;cursor:pointer;
+}
+
+/* ========== 底部操作栏 ========== */
+.action-bar{
+ position:fixed;inset-inline:0;bottom:0;max-width:500px;margin:0 auto;
+ background:#fff;display:flex;height:60px;
+ box-shadow:0 -2px 10px rgba(0,0,0,.1);z-index:100;
+}
+.action-btn{
+ flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
+ font-size:12px;color:#666;
+}
+.action-btn i{font-size:20px;margin-bottom:4px;}
+
+.purchase-btn{flex:2;display:flex;}
+.btn-single,
+.btn-group{
+ flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
+ gap:2px;border:none;cursor:pointer;
+}
+.btn-single{background:#ff9500;color:#fff;}
+.btn-group {background:#ff5000;color:#fff;}
+
+.btn-price{font-size:18px;font-weight:700;line-height:1;}
+.btn-label{font-size:12px;line-height:1;}
+
+/* ========== 支付弹窗 ========== */
+.payment-overlay{
+ position:fixed;inset:0;z-index:9999;
+ background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;
+ backdrop-filter:blur(2px);
+}
+.payment-modal{
+ width:300px;max-width:90vw;padding:26px 28px 30px;background:#fff;
+ border-radius:12px;box-shadow:0 12px 30px rgba(0,0,0,.18);
+ font-size:14px;line-height:1.45;text-align:center;
+}
+.payment-modal h3{font-size:18px;margin:0 0 14px;color:#333;}
+.payment-modal p{margin:6px 0;color:#555;word-break:break-all;}
+.payment-modal .copyable{color:#ff5000;cursor:pointer;text-decoration:underline;}
+
+.modal-buttons{margin-top:22px;display:flex;gap:12px;}
+.modal-buttons button{
+ flex:1;padding:8px 0;border-radius:6px;font-size:14px;cursor:pointer;border:none;
+}
+.confirm-btn{background:#ff5000;color:#fff;}
+.cancel-btn{background:#f2f3f5;color:#333;}
diff --git a/docs/dev-ops/nginx/html/css/login.css b/docs/dev-ops/nginx/html/css/login.css
new file mode 100644
index 0000000..6a08fb1
--- /dev/null
+++ b/docs/dev-ops/nginx/html/css/login.css
@@ -0,0 +1,94 @@
+/* ==================== Reset & 基础 ==================== */
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family: "Helvetica Neue", Arial, sans-serif;
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
+
+/* ==================== 登录卡片 ==================== */
+.login-container {
+ background-color: #fff;
+ padding: 40px;
+ border-radius: 20px;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
+ text-align: center;
+ max-width: 400px;
+ width: 90%;
+ transition: all 0.3s ease;
+}
+
+.login-container:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 15px 35px rgba(0, 0, 0, 0.15);
+}
+
+.login-container h1 {
+ margin-bottom: 30px;
+ color: #333;
+ font-size: 28px;
+ font-weight: 600;
+}
+
+/* ==================== Logo ==================== */
+.logo {
+ width: 80px;
+ height: 80px;
+ margin-bottom: 20px;
+}
+
+/* ==================== 二维码 ==================== */
+.qr-code {
+ margin: 30px 0;
+ position: relative;
+}
+
+.qr-code img {
+ width: 200px;
+ height: 200px;
+ border-radius: 10px;
+ transition: all 0.3s ease;
+}
+
+.qr-code::before {
+ content: "";
+ position: absolute;
+ inset: -5px;
+ background: linear-gradient(45deg, #12c2e9, #c471ed, #f64f59);
+ z-index: -1;
+ filter: blur(20px);
+ border-radius: 15px;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+}
+
+.qr-code:hover::before {
+ opacity: 1;
+}
+
+/* ==================== 说明文字 ==================== */
+.instructions {
+ color: #666;
+ font-size: 16px;
+ margin-top: 20px;
+ line-height: 1.5;
+}
+
+/* ==================== 动画 ==================== */
+@keyframes pulse {
+ 0% { transform: scale(1); }
+ 50% { transform: scale(1.05); }
+ 100% { transform: scale(1); }
+}
+
+.pulse {
+ animation: pulse 2s infinite;
+}
diff --git a/docs/dev-ops/nginx/html/form.html b/docs/dev-ops/nginx/html/form.html
deleted file mode 100644
index 71fe6ea..0000000
--- a/docs/dev-ops/nginx/html/form.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/docs/dev-ops/nginx/html/images/goods_info1.png b/docs/dev-ops/nginx/html/images/goods_info1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e80f6a56d1cba94f7528883ece8ae634baa5c7c
GIT binary patch
literal 355755
zcmbSyRahL|wr$fi9-QD7++7kZ5TJ3l#)7-MyL)gC1b1&VKm)-gxJ%IBEp6;}w6+TXfYI~MfNM>(IROCv7RyM8se67t
zezr=X8FnK_^~Wan+4-uSnF>9d)0p$&Cr0PNN2P>=!;$`?gom;pMI2QCc6b>(`(QCa
z^qfuM;yRI&>9RK{WJTUW9~CMM2a<8ZmIhL`*YkQ;pVs&pIG5|082o;$X_N8*T;46T&A`V+HIyJ=h#Ys@`i!zqy{UVz^xS`cdRGArY|xvNG6Tqx@
zJhuu~YY`Gy1FP__udRYr`CoGFsmn?JDz+rf#s!qFNFNS#&)CtpZEqa#CAD9ixsu4N
z{qbmzE3$tQT>JO*!g5`5qkm23Z&8_z^WgvYSAFn`rV2FlXWRDm7l4LXo4miD03PEn
zmhJG41uA48Na9qz!)$hBspUaZ{z4X~exfrgLnZt&u*|0e-v)2
z&{hkaL^Erhq~ZQfXEw{vH13NWMS&dZOOCofn{DXRiV5ETY|pEqmo1$Q#qDXK$E{CY
z+>@q3J+r0&zSCqD!4jxS<+(J((KZ=?ZZuT^V|e2W!e