diff --git a/README.md b/README.md
index 13149b1c6..220de8853 100644
--- a/README.md
+++ b/README.md
@@ -183,20 +183,22 @@ youlai-mall
[![Star History Chart](https://api.star-history.com/svg?repos=youlaitech/youlai-mall&type=Timeline)](https://star-history.com/#youlaitech/youlai-mall&Timeline)
-## 💻贡献者们
+## 💻贡献者
-## 💥加交流群
+## 🚀交流群
-> 群二维码失效添加开发者,备注“有来”进群即可
+> 关注「有来技术」公众号,获取交流群二维码。
+>
+> 如果交流群的二维码过期,加我微信,备注「前端」、「后端」或「全栈」即可。
+>
+> 为了避免营销广告人群混入,此举无奈,望理解!
-| 交流群 | 开发者 | 开发者 |
-|---------------------------------------------------------|-------------------------------------------------|---------------------------------------------------|
-| ![](https://oss.youlai.tech/youlai-boot/2023/05/13/d085a0b01c914daebe9b4e0f251b9fc4.png) | ![](https://www.youlai.tech/files/blog/rui.jpg) | ![](https://www.youlai.tech/files/blog/chuan.jpg) |
-| ![](https://s2.loli.net/2022/11/19/OGjum9wr8f6idLX.png) |
-|---------------------------------------------------------|
+|公众号|交流群|
+|-|-|
+|||
## 📰开源协议
diff --git a/docs/nacos/nacos_config.zip b/docs/nacos/nacos_config.zip
index b2680a818..d55fc5244 100644
Binary files a/docs/nacos/nacos_config.zip and b/docs/nacos/nacos_config.zip differ
diff --git a/docs/sql/mysql5.x/mall_oms.sql b/docs/sql/mysql5.x/mall_oms.sql
index ff269b0b6..aeeeba54f 100644
--- a/docs/sql/mysql5.x/mall_oms.sql
+++ b/docs/sql/mysql5.x/mall_oms.sql
@@ -2,6 +2,7 @@
* 商城订单表
* MySQL5.x版本
*/
+
use mall_oms;
SET NAMES utf8;
@@ -16,16 +17,17 @@ CREATE TABLE `oms_order` (
`order_sn` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '订单号',
`total_amount` bigint NOT NULL DEFAULT 0 COMMENT '订单总额(分)',
`total_quantity` int NOT NULL DEFAULT 0 COMMENT '商品总数',
- `source_type` tinyint NOT NULL DEFAULT 1 COMMENT '订单来源[0->PC订单;1->APP订单]',
+ `source` tinyint NULL DEFAULT NULL COMMENT '订单来源(1:APP;2:网页)',
`status` int NOT NULL DEFAULT 101 COMMENT '订单状态:\r\n101->待付款;\r\n102->用户取消;\r\n103->系统取消;\r\n201->已付款;\r\n202->申请退款;\r\n203->已退款;\r\n301->待发货;\r\n401->已发货;\r\n501->用户收货;\r\n502->系统收货;\r\n901->已完成;',
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '订单备注',
`member_id` bigint NOT NULL DEFAULT 0 COMMENT '会员id',
`coupon_id` bigint NOT NULL DEFAULT 0 COMMENT '使用的优惠券',
`coupon_amount` bigint NOT NULL DEFAULT 0 COMMENT '优惠券抵扣金额(分)',
`freight_amount` bigint NOT NULL DEFAULT 0 COMMENT '运费金额(分)',
+ `payment_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
`pay_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
- `pay_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
- `pay_type` tinyint NULL DEFAULT NULL COMMENT '支付方式【1->微信jsapi;2->支付宝;3->余额; 4->微信app;】',
+ `payment_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
+ `payment_method` tinyint NULL DEFAULT NULL COMMENT '支付方式(1:微信JSAPI;2:支付宝;3:余额;4:微信APP)',
`out_trade_no` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '微信支付等第三方支付平台的商户订单号',
`transaction_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '微信支付订单号',
`out_refund_no` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商户退款单号',
@@ -37,31 +39,14 @@ CREATE TABLE `oms_order` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `index_order_sn`(`order_sn`) USING BTREE COMMENT '订单号唯一索引',
- UNIQUE INDEX `index_otn`(`out_trade_no`) USING BTREE COMMENT '商户订单号唯一索引',
- UNIQUE INDEX `index_ti`(`transaction_id`) USING BTREE COMMENT '商户支付单号唯一索引',
- UNIQUE INDEX `index_orn`(`out_refund_no`) USING BTREE COMMENT '商户退款单号唯一索引',
- UNIQUE INDEX `index_ri`(`refund_id`) USING BTREE COMMENT '退款单号唯一索引'
-) ENGINE = InnoDB AUTO_INCREMENT = 1351548262424821956 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单详情表' ROW_FORMAT = DYNAMIC;
+ UNIQUE INDEX `index_order_sn`(`order_sn` ASC) USING BTREE COMMENT '订单号唯一索引',
+ UNIQUE INDEX `index_otn`(`out_trade_no` ASC) USING BTREE COMMENT '商户订单号唯一索引',
+ UNIQUE INDEX `index_ti`(`transaction_id` ASC) USING BTREE COMMENT '商户支付单号唯一索引',
+ UNIQUE INDEX `index_orn`(`out_refund_no` ASC) USING BTREE COMMENT '商户退款单号唯一索引',
+ UNIQUE INDEX `index_ri`(`refund_id` ASC) USING BTREE COMMENT '退款单号唯一索引'
+) ENGINE = InnoDB AUTO_INCREMENT = 1351548262424822232 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单详情表' ROW_FORMAT = DYNAMIC;
+
--- ----------------------------
--- Records of oms_order
--- ----------------------------
-INSERT INTO `oms_order` VALUES (1351548262424821940, '20210815300000009', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 12:38:02', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 12:38:02', '2021-08-15 12:38:02');
-INSERT INTO `oms_order` VALUES (1351548262424821941, '20210815300000010', 300, 1, 1, 201, '', 39, 0, 0, 0, 300, '2021-08-15 21:34:00', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:33:56', '2021-08-15 21:34:00');
-INSERT INTO `oms_order` VALUES (1351548262424821942, '20210815300000011', 100, 1, 1, 201, '', 4, 0, 0, 0, 100, '2021-08-15 21:34:16', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:34:10', '2021-08-15 21:34:16');
-INSERT INTO `oms_order` VALUES (1351548262424821943, '20210815300000012', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 21:44:02', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:44:01', '2021-08-15 21:44:02');
-INSERT INTO `oms_order` VALUES (1351548262424821944, '20210815300000013', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 21:45:27', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:45:21', '2021-08-15 21:45:27');
-INSERT INTO `oms_order` VALUES (1351548262424821945, '20210815300000014', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 22:00:38', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 22:00:36', '2021-08-15 22:00:38');
-INSERT INTO `oms_order` VALUES (1351548262424821948, '20210816300000002', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-16 23:18:17', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-16 23:18:14', '2021-08-16 23:18:17');
-INSERT INTO `oms_order` VALUES (1351548262424821949, '20210828300000009', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-28 00:43:59', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-28 00:43:55', NULL);
-INSERT INTO `oms_order` VALUES (1351548262424821950, '20220213300000040', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-13 21:55:52', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-13 21:52:46', '2022-02-13 21:52:46');
-INSERT INTO `oms_order` VALUES (1351548262424821951, '20220224300000001', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 00:54:10', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 00:54:06', '2022-02-24 00:54:06');
-INSERT INTO `oms_order` VALUES (1351548262424821952, '20220224300000002', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 00:54:56', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 00:54:55', '2022-02-24 00:54:55');
-INSERT INTO `oms_order` VALUES (1351548262424821953, '20220224300000003', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 01:16:40', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 01:16:37', '2022-02-24 01:16:37');
-INSERT INTO `oms_order` VALUES (1351548262424821954, '20220224300000004', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 01:17:21', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 01:17:20', '2022-02-24 01:17:20');
-INSERT INTO `oms_order` VALUES (1351548262424821955, '20220224300000005', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 09:34:55', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 09:34:53', '2022-02-24 09:34:53');
-INSERT INTO `oms_order` VALUES (1351548262424821956, '20220224300000008', 100, 1, 1, 103, '', 39, 0, 0, 0, 100, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 23:23:22', '2022-02-24 23:23:22');
-- ----------------------------
-- Table structure for oms_order_delivery
@@ -106,95 +91,16 @@ CREATE TABLE `oms_order_item` (
`sku_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '规格名称',
`pic_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '商品图片',
`price` bigint NOT NULL DEFAULT 0 COMMENT '商品单价(单位:分)',
- `count` int NOT NULL DEFAULT 0 COMMENT '商品数量',
+ `quantity` int NULL DEFAULT NULL COMMENT '商品数量',
`total_amount` bigint NOT NULL DEFAULT 0 COMMENT '商品总价(单位:分)',
`deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(1:已删除;0:正常)',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `index_order_id`(`order_id`) USING BTREE COMMENT '订单id索引'
-) ENGINE = InnoDB AUTO_INCREMENT = 210 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单商品信息表' ROW_FORMAT = DYNAMIC;
+ INDEX `index_order_id`(`order_id` ASC) USING BTREE COMMENT '订单id索引'
+) ENGINE = InnoDB AUTO_INCREMENT = 501 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单商品信息表' ROW_FORMAT = DYNAMIC;
+
--- ----------------------------
--- Records of oms_order_item
--- ----------------------------
-INSERT INTO `oms_order_item` VALUES (128, 1351548262424821882, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-22 23:34:46', '2021-03-22 23:34:46');
-INSERT INTO `oms_order_item` VALUES (129, 1351548262424821883, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 01:03:47', '2021-03-23 01:03:47');
-INSERT INTO `oms_order_item` VALUES (130, 1351548262424821884, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 01:10:17', '2021-03-23 01:10:17');
-INSERT INTO `oms_order_item` VALUES (131, 1351548262424821885, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 02:21:27', '2021-03-23 02:21:27');
-INSERT INTO `oms_order_item` VALUES (132, 1351548262424821886, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 06:37:27', '2021-03-23 06:37:27');
-INSERT INTO `oms_order_item` VALUES (133, 1351548262424821887, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 07:02:27', '2021-03-23 07:02:27');
-INSERT INTO `oms_order_item` VALUES (134, 1351548262424821888, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 07:31:43', '2021-03-23 07:31:43');
-INSERT INTO `oms_order_item` VALUES (135, 1351548262424821889, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 18:55:41', '2021-03-23 18:55:41');
-INSERT INTO `oms_order_item` VALUES (136, 1351548262424821890, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-25 19:02:51', '2021-03-25 19:02:51');
-INSERT INTO `oms_order_item` VALUES (137, 1351548262424821891, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-29 15:57:45', '2021-03-29 15:57:45');
-INSERT INTO `oms_order_item` VALUES (138, 1351548262424821892, NULL, 186, '1614505517559', '测试手机1 黑 6+128 ', 'http://a.youlai.store:9000/default/9715dde8c35c429b8c56cbe800ebd205.jpg', 299900, 1, 299900, 0, '2021-03-29 16:02:46', '2021-03-29 16:02:46');
-INSERT INTO `oms_order_item` VALUES (139, 1351548262424821893, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-31 14:22:33', '2021-03-31 14:22:33');
-INSERT INTO `oms_order_item` VALUES (140, 1351548262424821894, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-04-14 22:59:43', '2021-04-14 22:59:43');
-INSERT INTO `oms_order_item` VALUES (141, 1351548262424821895, NULL, 192, '1614505936511', '测试手机2 黑 8+256 ', 'http://a.youlai.tech:9000/default/3e369c91377a4c9f9eb33f66a6dd6906.jpg', 199900, 1, 199900, 0, '2021-04-14 23:03:21', '2021-04-14 23:03:21');
-INSERT INTO `oms_order_item` VALUES (142, 1351548262424821896, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 1, 159900, 0, '2021-04-14 23:33:48', '2021-04-14 23:33:48');
-INSERT INTO `oms_order_item` VALUES (143, 1351548262424821897, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:38:15', '2021-04-14 23:38:15');
-INSERT INTO `oms_order_item` VALUES (144, 1351548262424821898, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:38:31', '2021-04-14 23:38:31');
-INSERT INTO `oms_order_item` VALUES (145, 1351548262424821899, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:42:47', '2021-04-14 23:42:47');
-INSERT INTO `oms_order_item` VALUES (146, 1351548262424821900, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 3, 479700, 0, '2021-04-14 23:48:04', '2021-04-14 23:48:04');
-INSERT INTO `oms_order_item` VALUES (147, 1351548262424821901, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 1, 159900, 0, '2021-04-16 16:18:27', '2021-04-16 16:18:27');
-INSERT INTO `oms_order_item` VALUES (150, 1351548262424821904, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:20:33', '2021-06-11 00:20:33');
-INSERT INTO `oms_order_item` VALUES (151, 1351548262424821905, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:24:07', '2021-06-11 00:24:07');
-INSERT INTO `oms_order_item` VALUES (152, 1351548262424821906, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:26:16', '2021-06-11 00:26:16');
-INSERT INTO `oms_order_item` VALUES (153, 1351548262424821907, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:42:43', '2021-06-11 00:42:43');
-INSERT INTO `oms_order_item` VALUES (154, 1351548262424821908, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 07:58:04', '2021-06-11 07:58:04');
-INSERT INTO `oms_order_item` VALUES (155, 1351548262424821909, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 08:35:11', '2021-06-11 08:35:11');
-INSERT INTO `oms_order_item` VALUES (156, 1351548262424821909, NULL, 244, '1623369301480', '测试合约机 蓝 12+256g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 08:35:11', '2021-06-11 08:35:11');
-INSERT INTO `oms_order_item` VALUES (157, 1351548262424821910, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-12 14:16:13', '2021-06-12 14:16:13');
-INSERT INTO `oms_order_item` VALUES (158, 1351548262424821911, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, '2021-06-17 08:48:45', '2021-06-17 08:48:45');
-INSERT INTO `oms_order_item` VALUES (163, 1351548262424821918, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (164, 1351548262424821919, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (165, 1351548262424821920, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (166, 1351548262424821921, NULL, 197, '1616310848932', '测试衣服1 白 M ', 'http://a.youlai.store:9000/default/063350d473a64ee7857e91841add1177.jpg', 29900, 1, 29900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (167, 1351548262424821922, NULL, 197, '1616310848932', '测试衣服1 白 M ', 'http://a.youlai.store:9000/default/063350d473a64ee7857e91841add1177.jpg', 29900, 4, 119600, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (168, 1351548262424821923, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 1, 609900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (169, 1351548262424821924, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 2, 1219800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (170, 1351548262424821925, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 2, 1219800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (171, 1351548262424821927, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 00:25:33', '2021-08-13 00:25:33');
-INSERT INTO `oms_order_item` VALUES (172, 1351548262424821928, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 00:29:25', '2021-08-13 00:29:25');
-INSERT INTO `oms_order_item` VALUES (173, 1351548262424821912, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 22:45:19', '2021-08-13 22:45:19');
-INSERT INTO `oms_order_item` VALUES (174, 1351548262424821913, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 23:37:42', '2021-08-13 23:37:42');
-INSERT INTO `oms_order_item` VALUES (175, 1351548262424821914, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 00:17:19', '2021-08-14 00:17:19');
-INSERT INTO `oms_order_item` VALUES (176, 1351548262424821914, NULL, 291, '1', '', 'http://a.youlai.tech:9000/default/fb3f1be8aae644f497255f29aa51c641.jpg', 100, 1, 100, 0, '2021-08-14 00:17:19', '2021-08-14 00:17:19');
-INSERT INTO `oms_order_item` VALUES (177, 1351548262424821915, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 01:24:26', '2021-08-14 01:24:26');
-INSERT INTO `oms_order_item` VALUES (178, 1351548262424821916, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 17:24:13', '2021-08-14 17:24:13');
-INSERT INTO `oms_order_item` VALUES (179, 1351548262424821917, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 17:30:19', '2021-08-14 17:30:19');
-INSERT INTO `oms_order_item` VALUES (180, 1351548262424821918, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 18:58:28', '2021-08-14 18:58:28');
-INSERT INTO `oms_order_item` VALUES (181, 1351548262424821919, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 2, 200, 0, '2021-08-14 19:01:46', '2021-08-14 19:01:46');
-INSERT INTO `oms_order_item` VALUES (182, 1351548262424821921, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 21:41:42', '2021-08-14 21:41:42');
-INSERT INTO `oms_order_item` VALUES (183, 1351548262424821922, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:32:39', '2021-08-14 22:32:39');
-INSERT INTO `oms_order_item` VALUES (184, 1351548262424821923, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:35:14', '2021-08-14 22:35:14');
-INSERT INTO `oms_order_item` VALUES (185, 1351548262424821924, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:38:04', '2021-08-14 22:38:04');
-INSERT INTO `oms_order_item` VALUES (186, 1351548262424821925, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 23:14:42', '2021-08-14 23:14:42');
-INSERT INTO `oms_order_item` VALUES (187, 1351548262424821926, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:42:26', '2021-08-15 00:42:26');
-INSERT INTO `oms_order_item` VALUES (188, 1351548262424821927, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:46:45', '2021-08-15 00:46:45');
-INSERT INTO `oms_order_item` VALUES (189, 1351548262424821928, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:50:57', '2021-08-15 00:50:57');
-INSERT INTO `oms_order_item` VALUES (190, 1351548262424821929, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:54:41', '2021-08-15 00:54:41');
-INSERT INTO `oms_order_item` VALUES (191, 1351548262424821930, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 01:00:50', '2021-08-15 01:00:50');
-INSERT INTO `oms_order_item` VALUES (192, 1351548262424821931, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 09:24:03', '2021-08-15 09:24:03');
-INSERT INTO `oms_order_item` VALUES (193, 1351548262424821932, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 09:24:14', '2021-08-15 09:24:14');
-INSERT INTO `oms_order_item` VALUES (194, 1351548262424821933, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 12:23:37', '2021-08-15 12:23:37');
-INSERT INTO `oms_order_item` VALUES (195, 1351548262424821940, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 12:38:02', '2021-08-15 12:38:02');
-INSERT INTO `oms_order_item` VALUES (196, 1351548262424821941, NULL, 331, '4', '黑色 8+256G 套餐一 ', '', 300, 1, 300, 0, '2021-08-15 21:33:56', '2021-08-15 21:33:56');
-INSERT INTO `oms_order_item` VALUES (197, 1351548262424821942, NULL, 308, '1', '123 1233 ', '', 100, 1, 100, 0, '2021-08-15 21:34:10', '2021-08-15 21:34:10');
-INSERT INTO `oms_order_item` VALUES (198, 1351548262424821943, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 21:44:01', '2021-08-15 21:44:01');
-INSERT INTO `oms_order_item` VALUES (199, 1351548262424821944, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 21:45:22', '2021-08-15 21:45:22');
-INSERT INTO `oms_order_item` VALUES (200, 1351548262424821945, NULL, 328, '1', '黑色 6+128G 标准 ', '', 100, 1, 100, 0, '2021-08-15 22:00:37', '2021-08-15 22:00:37');
-INSERT INTO `oms_order_item` VALUES (201, 1351548262424821946, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-16 17:05:17', '2021-08-16 17:05:17');
-INSERT INTO `oms_order_item` VALUES (202, 1351548262424821948, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-16 23:18:16', '2021-08-16 23:18:16');
-INSERT INTO `oms_order_item` VALUES (203, 1351548262424821949, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (204, 1351548262424821950, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-13 21:52:46', '2022-02-13 21:52:46');
-INSERT INTO `oms_order_item` VALUES (205, 1351548262424821951, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 00:54:07', '2022-02-24 00:54:07');
-INSERT INTO `oms_order_item` VALUES (206, 1351548262424821952, NULL, 296, '1213', '117|11', '', 100, 1, 100, 0, '2022-02-24 00:54:55', '2022-02-24 00:54:55');
-INSERT INTO `oms_order_item` VALUES (207, 1351548262424821953, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 01:16:38', '2022-02-24 01:16:38');
-INSERT INTO `oms_order_item` VALUES (208, 1351548262424821954, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 01:17:20', '2022-02-24 01:17:20');
-INSERT INTO `oms_order_item` VALUES (209, 1351548262424821955, NULL, 291, '1', '', 'http://a.youlai.tech:9000/default/fb3f1be8aae644f497255f29aa51c641.jpg', 100, 1, 100, 0, '2022-02-24 09:34:53', '2022-02-24 09:34:53');
-INSERT INTO `oms_order_item` VALUES (210, 1351548262424821956, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 23:23:22', '2022-02-24 23:23:22');
-- ----------------------------
-- Table structure for oms_order_log
@@ -277,7 +183,7 @@ CREATE TABLE `undo_log` (
`log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` datetime(6) NOT NULL COMMENT 'create datetime',
`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
- UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
+ UNIQUE INDEX `ux_undo_log`(`xid` ASC, `branch_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'AT transaction mode undo table' ROW_FORMAT = DYNAMIC;
-- ----------------------------
diff --git a/docs/sql/mysql5.x/mall_pms.sql b/docs/sql/mysql5.x/mall_pms.sql
index 19cf5740c..92b2b53e4 100644
--- a/docs/sql/mysql5.x/mall_pms.sql
+++ b/docs/sql/mysql5.x/mall_pms.sql
@@ -1,5 +1,5 @@
/*
-* 商城商品表
+* 商品数据库
* MySQL5.x版本
*/
use mall_pms;
@@ -71,7 +71,7 @@ CREATE TABLE `pms_category_attribute` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_attr_pms_category`(`category_id`) USING BTREE
+ INDEX `fk_pms_attr_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 183 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品属性表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -82,17 +82,17 @@ INSERT INTO `pms_category_attribute` VALUES (35, 5, '规格', 1, '2021-07-11 18:
INSERT INTO `pms_category_attribute` VALUES (36, 5, '上市时间', 2, '2021-07-11 18:00:08', '2022-06-01 17:41:05');
-- ----------------------------
--- Table structure for pms_catetgory_brand
+-- Table structure for pms_category_brand
-- ----------------------------
-DROP TABLE IF EXISTS `pms_catetgory_brand`;
-CREATE TABLE `pms_catetgory_brand` (
- `category_id` bigint NOT NULL,
- `brand_id` bigint NOT NULL,
- PRIMARY KEY (`category_id`) USING BTREE
+DROP TABLE IF EXISTS `pms_category_brand`;
+CREATE TABLE `pms_category_brand` (
+ `category_id` bigint NOT NULL,
+ `brand_id` bigint NOT NULL,
+ PRIMARY KEY (`category_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
--- Records of pms_catetgory_brand
+-- Records of pms_category_brand
-- ----------------------------
-- ----------------------------
@@ -106,34 +106,35 @@ CREATE TABLE `pms_sku` (
`name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称',
`spec_ids` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品规格值,以英文逗号(,)分割',
`price` bigint NULL DEFAULT NULL COMMENT '商品价格(单位:分)',
- `stock_num` int NULL DEFAULT 0 COMMENT '库存数量',
- `locked_stock_num` int NULL DEFAULT 0 COMMENT '锁定库存数量',
+ `stock` int UNSIGNED NULL DEFAULT NULL COMMENT '库存数量',
+ `locked_stock` int NULL DEFAULT NULL COMMENT '库存锁定数量',
`pic_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品图片地址',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_sku_pms_spu`(`spu_id`) USING BTREE
+ INDEX `fk_pms_sku_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 755 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品库存表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of pms_sku
-- ----------------------------
-INSERT INTO `pms_sku` VALUES (1, 'sn001', 1, '黑 6+128g', '1_3', 399900, 999, 5, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (2, 'sn002', 1, '黑 8+256g', '1_4', 499900, 9998, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (3, 'sn003', 1, '蓝 6+128g', '216_3', 399900, 9998, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (4, 'sn004', 1, '蓝 8+256g', '216_4', 499900, 9988, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (5, '10000001', 2, '魔幻青 RTX3060/i7-12700H/165Hz 2.5K屏', '256_258', 1025000, 9816, 26, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (6, '10000002', 2, '魔幻青 RTX3050tTi/12代i5/144Hz高色域屏', '256_259', 925000, 10000, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (7, '10000003', 2, '日蚀灰 RTX3060/i7-12700H/165Hz 2.5K屏', '257_258', 1025000, 10000, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (8, '10000004', 2, '日蚀灰 RTX3050tTi/12代i5/144Hz高色域屏', '257_259', 925000, 10000, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (747, '111', 287, '16g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_843_845', 589900, 9991, 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (748, '112', 287, '16g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_843_846', 629900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (749, '113', 287, '16g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_844_845', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (750, '114', 287, '16g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_844_846', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (751, '115', 287, '32g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_843_845', 589900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (752, '116', 287, '32g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_843_846', 629900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (753, '117', 287, '32g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_844_845', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (754, '118', 287, '32g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_844_846', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (1, 'sn001', 1, '黑 6+128g', '1_3', 399900, 996, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (2, 'sn002', 1, '黑 8+256g', '1_4', 499900, 999, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (3, 'sn003', 1, '蓝 6+128g', '216_3', 399900, 999, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (4, 'sn004', 1, '蓝 8+256g', '216_4', 499900, 999, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (5, '10000001', 2, '魔幻青 RTX3060/i7-12700H/165Hz 2.5K屏', '256_258', 1025000, 999, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (6, '10000002', 2, '魔幻青 RTX3050tTi/12代i5/144Hz高色域屏', '256_259', 925000, 999, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (7, '10000003', 2, '日蚀灰 RTX3060/i7-12700H/165Hz 2.5K屏', '257_258', 1025000, 999, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (8, '10000004', 2, '日蚀灰 RTX3050tTi/12代i5/144Hz高色域屏', '257_259', 925000, 999, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (9, '111', 3, '16g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_843_845', 589900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (10, '112', 3, '16g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_843_846', 629900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (11, '113', 3, '16g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_844_845', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (12, '114', 3, '16g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_844_846', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (13, '115', 3, '32g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_843_845', 589900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (14, '116', 3, '32g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_843_846', 629900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (15, '117', 3, '32g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_844_845', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (16, '118', 3, '32g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_844_846', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (17, 'sn001', 4, '黑 6+128g', '1_3', 399900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/6b83dd33eaa248ed8e11cff0003287ee.jpg', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-- ----------------------------
-- Table structure for pms_spu
@@ -156,8 +157,8 @@ CREATE TABLE `pms_spu` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_spu_pms_brand`(`brand_id`) USING BTREE,
- INDEX `fk_pms_spu_pms_category`(`category_id`) USING BTREE
+ INDEX `fk_pms_spu_pms_brand`(`brand_id` ASC) USING BTREE,
+ INDEX `fk_pms_spu_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 288 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -165,7 +166,8 @@ CREATE TABLE `pms_spu` (
-- ----------------------------
INSERT INTO `pms_spu` VALUES (1, '小米12 PRO', 5, 10, 599900, 599900, 1, 'https://oss.youlai.tech/default/0ccd5bf5cf384185be1f18a01da076b9.png', '[]', '台', '好快,好稳,\n好一次强上加强。\n高通全新一代芯片赋能,速度大幅提升。\n三大专业主摄影像加持,能力全面进化。\n大师级设计理念新诠释,质感简而不凡。\n斩获十五项纪录旗舰屏,感官万般出众。', '
', 1, NULL, '2022-07-03 14:16:16');
INSERT INTO `pms_spu` VALUES (2, '华硕天选3', 101, 11, 1145000, 929900, 0, 'https://www.youlai.tech/files/default/d97457b3fd7d4aef8846da96fe032bf8.jpg', '[\"https://www.youlai.tech/files/default/3edd01c723ff456384cea9bd3c9b19e7.jpg\", \"https://www.youlai.tech/files/default/a6681c18fc294ee49efb8e121b8e943f.jpg\", \"https://www.youlai.tech/files/default/97458ae9ea734bc498724660abb1c6cd.jpg\", \"https://www.youlai.tech/files/default/501b0e6dcb3f4d69b7e40e90b3d3ac32.jpg\"]', NULL, '中国台湾华硕电脑股份有限公司 [1] 是当前全球第一大主板生产商、全球第三大显卡生产商,同时也是全球领先的3C解决方案提供商之一,致力于为个人和企业用户提供最具创新价值的产品及应用方案。华硕的产品线完整覆盖至笔记本电脑、主板、显卡、服务器、光存储、有线/无线网络通讯产品、LCD、掌上电脑、智能手机等全线3C产品。其中显卡和主板以及笔记本电脑三大产品已经成为华硕的主要竞争实力。', '', 1, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_spu` VALUES (287, '惠普战X ', 99, 33, 639900, 629900, 0, 'https://oss.youlai.tech/default/e59859e0effb4b66a0f7380ff5369d66.jpg', '[\"https://oss.youlai.tech/default/de9c5625e35b4c0aa9888c48d4def446.jpg\"]', NULL, '【2022新款】HP/惠普战X 16英寸锐龙新款6000系列R5六核/R7八核高性能学生家用轻薄办公商用笔记本电脑\n六核/八核处理器,高性能集成显卡', '', 1, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu` VALUES (3, '惠普战X ', 99, 33, 639900, 629900, 0, 'https://oss.youlai.tech/default/e59859e0effb4b66a0f7380ff5369d66.jpg', '[\"https://oss.youlai.tech/default/de9c5625e35b4c0aa9888c48d4def446.jpg\"]', NULL, '【2022新款】HP/惠普战X 16英寸锐龙新款6000系列R5六核/R7八核高性能学生家用轻薄办公商用笔记本电脑\n六核/八核处理器,高性能集成显卡', '', 1, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu` VALUES (4, '小米13', 5, 10, 599900, 599900, 1, 'https://oss.youlai.tech/youlai-boot/2023/06/08/6b83dd33eaa248ed8e11cff0003287ee.jpg', '[]', '台', '好快,好稳,\n好一次强上加强。\n高通全新一代芯片赋能,速度大幅提升。\n三大专业主摄影像加持,能力全面进化。\n大师级设计理念新诠释,质感简而不凡。\n斩获十五项纪录旗舰屏,感官万般出众。', '', 1, NULL, '2022-07-03 14:16:16');
-- ----------------------------
-- Table structure for pms_spu_attribute
@@ -182,8 +184,8 @@ CREATE TABLE `pms_spu_attribute` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_spu_attribute_pms_attr`(`name`) USING BTREE,
- INDEX `fk_pms_spu_attribute_pms_spu`(`spu_id`) USING BTREE
+ INDEX `fk_pms_spu_attribute_pms_attr`(`name` ASC) USING BTREE,
+ INDEX `fk_pms_spu_attribute_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 847 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品属性/规格表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -203,15 +205,15 @@ INSERT INTO `pms_spu_attribute` VALUES (256, 2, NULL, '颜色', '魔幻青', 1,
INSERT INTO `pms_spu_attribute` VALUES (257, 2, NULL, '颜色', '日蚀灰', 1, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
INSERT INTO `pms_spu_attribute` VALUES (258, 2, NULL, '规格', 'RTX3060/i7-12700H/165Hz 2.5K屏', 1, NULL, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
INSERT INTO `pms_spu_attribute` VALUES (259, 2, NULL, '规格', 'RTX3050tTi/12代i5/144Hz高色域屏', 1, NULL, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_spu_attribute` VALUES (838, 287, NULL, '内存', '16g 32g', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (839, 287, NULL, '重量', '1.5kg(含)-2kg(不含)', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (840, 287, NULL, '显卡类型', '核芯显卡', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (841, 287, NULL, '内存容量', '16g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (842, 287, NULL, '内存容量', '32g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (843, 287, NULL, '硬盘容量', '512g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (844, 287, NULL, '硬盘容量', '1t', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (845, 287, NULL, '套餐类型', '【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (846, 287, NULL, '套餐类型', '【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (838, 3, NULL, '内存', '16g 32g', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (839, 3, NULL, '重量', '1.5kg(含)-2kg(不含)', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (840, 3, NULL, '显卡类型', '核芯显卡', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (841, 3, NULL, '内存容量', '16g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (842, 3, NULL, '内存容量', '32g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (843, 3, NULL, '硬盘容量', '512g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (844, 3, NULL, '硬盘容量', '1t', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (845, 3, NULL, '套餐类型', '【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (846, 3, NULL, '套餐类型', '【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-- ----------------------------
-- Table structure for undo_log
@@ -225,8 +227,11 @@ CREATE TABLE `undo_log` (
`log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` datetime(6) NOT NULL COMMENT 'create datetime',
`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
- UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
+ UNIQUE INDEX `ux_undo_log`(`xid` ASC, `branch_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'AT transaction mode undo table' ROW_FORMAT = DYNAMIC;
+-- ----------------------------
+-- Records of undo_log
+-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/docs/sql/mysql8.x/mall_oms.sql b/docs/sql/mysql8.x/mall_oms.sql
index 02507f9a0..b354318db 100644
--- a/docs/sql/mysql8.x/mall_oms.sql
+++ b/docs/sql/mysql8.x/mall_oms.sql
@@ -24,81 +24,65 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
DROP TABLE IF EXISTS `oms_order`;
CREATE TABLE `oms_order` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `order_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '订单号',
- `total_amount` bigint NOT NULL DEFAULT 0 COMMENT '订单总额(分)',
- `total_quantity` int NOT NULL DEFAULT 0 COMMENT '商品总数',
- `source_type` tinyint NOT NULL DEFAULT 1 COMMENT '订单来源[0->PC订单;1->APP订单]',
- `status` int NOT NULL DEFAULT 101 COMMENT '订单状态:\r\n101->待付款;\r\n102->用户取消;\r\n103->系统取消;\r\n201->已付款;\r\n202->申请退款;\r\n203->已退款;\r\n301->待发货;\r\n401->已发货;\r\n501->用户收货;\r\n502->系统收货;\r\n901->已完成;',
- `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '订单备注',
- `member_id` bigint NOT NULL DEFAULT 0 COMMENT '会员id',
- `coupon_id` bigint NOT NULL DEFAULT 0 COMMENT '使用的优惠券',
- `coupon_amount` bigint NOT NULL DEFAULT 0 COMMENT '优惠券抵扣金额(分)',
- `freight_amount` bigint NOT NULL DEFAULT 0 COMMENT '运费金额(分)',
- `pay_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
- `pay_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
- `pay_type` tinyint NULL DEFAULT NULL COMMENT '支付方式【1->微信jsapi;2->支付宝;3->余额; 4->微信app;】',
- `out_trade_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信支付等第三方支付平台的商户订单号',
- `transaction_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信支付订单号',
- `out_refund_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商户退款单号',
- `refund_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信退款单号',
- `delivery_time` datetime NULL DEFAULT NULL COMMENT '发货时间',
- `receive_time` datetime NULL DEFAULT NULL COMMENT '确认收货时间',
- `comment_time` datetime NULL DEFAULT NULL COMMENT '评价时间',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `index_order_sn`(`order_sn`) USING BTREE COMMENT '订单号唯一索引',
- UNIQUE INDEX `index_otn`(`out_trade_no`) USING BTREE COMMENT '商户订单号唯一索引',
- UNIQUE INDEX `index_ti`(`transaction_id`) USING BTREE COMMENT '商户支付单号唯一索引',
- UNIQUE INDEX `index_orn`(`out_refund_no`) USING BTREE COMMENT '商户退款单号唯一索引',
- UNIQUE INDEX `index_ri`(`refund_id`) USING BTREE COMMENT '退款单号唯一索引'
-) ENGINE = InnoDB AUTO_INCREMENT = 1351548262424821956 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单详情表' ROW_FORMAT = DYNAMIC;
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `order_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '订单号',
+ `total_amount` bigint NOT NULL DEFAULT 0 COMMENT '订单总额(分)',
+ `total_quantity` int NOT NULL DEFAULT 0 COMMENT '商品总数',
+ `source` tinyint NULL DEFAULT NULL COMMENT '订单来源(1:APP;2:网页)',
+ `status` int NOT NULL DEFAULT 101 COMMENT '订单状态:\r\n101->待付款;\r\n102->用户取消;\r\n103->系统取消;\r\n201->已付款;\r\n202->申请退款;\r\n203->已退款;\r\n301->待发货;\r\n401->已发货;\r\n501->用户收货;\r\n502->系统收货;\r\n901->已完成;',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '订单备注',
+ `member_id` bigint NOT NULL DEFAULT 0 COMMENT '会员id',
+ `coupon_id` bigint NOT NULL DEFAULT 0 COMMENT '使用的优惠券',
+ `coupon_amount` bigint NOT NULL DEFAULT 0 COMMENT '优惠券抵扣金额(分)',
+ `freight_amount` bigint NOT NULL DEFAULT 0 COMMENT '运费金额(分)',
+ `payment_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
+ `pay_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
+ `payment_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
+ `payment_method` tinyint NULL DEFAULT NULL COMMENT '支付方式(1:微信JSAPI;2:支付宝;3:余额;4:微信APP)',
+ `out_trade_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信支付等第三方支付平台的商户订单号',
+ `transaction_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信支付订单号',
+ `out_refund_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商户退款单号',
+ `refund_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '微信退款单号',
+ `delivery_time` datetime NULL DEFAULT NULL COMMENT '发货时间',
+ `receive_time` datetime NULL DEFAULT NULL COMMENT '确认收货时间',
+ `comment_time` datetime NULL DEFAULT NULL COMMENT '评价时间',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `index_order_sn`(`order_sn` ASC) USING BTREE COMMENT '订单号唯一索引',
+ UNIQUE INDEX `index_otn`(`out_trade_no` ASC) USING BTREE COMMENT '商户订单号唯一索引',
+ UNIQUE INDEX `index_ti`(`transaction_id` ASC) USING BTREE COMMENT '商户支付单号唯一索引',
+ UNIQUE INDEX `index_orn`(`out_refund_no` ASC) USING BTREE COMMENT '商户退款单号唯一索引',
+ UNIQUE INDEX `index_ri`(`refund_id` ASC) USING BTREE COMMENT '退款单号唯一索引'
+) ENGINE = InnoDB AUTO_INCREMENT = 1351548262424822232 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单详情表' ROW_FORMAT = DYNAMIC;
+
--- ----------------------------
--- Records of oms_order
--- ----------------------------
-INSERT INTO `oms_order` VALUES (1351548262424821940, '20210815300000009', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 12:38:02', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 12:38:02', '2021-08-15 12:38:02');
-INSERT INTO `oms_order` VALUES (1351548262424821941, '20210815300000010', 300, 1, 1, 201, '', 39, 0, 0, 0, 300, '2021-08-15 21:34:00', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:33:56', '2021-08-15 21:34:00');
-INSERT INTO `oms_order` VALUES (1351548262424821942, '20210815300000011', 100, 1, 1, 201, '', 4, 0, 0, 0, 100, '2021-08-15 21:34:16', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:34:10', '2021-08-15 21:34:16');
-INSERT INTO `oms_order` VALUES (1351548262424821943, '20210815300000012', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 21:44:02', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:44:01', '2021-08-15 21:44:02');
-INSERT INTO `oms_order` VALUES (1351548262424821944, '20210815300000013', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 21:45:27', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 21:45:21', '2021-08-15 21:45:27');
-INSERT INTO `oms_order` VALUES (1351548262424821945, '20210815300000014', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-15 22:00:38', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-15 22:00:36', '2021-08-15 22:00:38');
-INSERT INTO `oms_order` VALUES (1351548262424821948, '20210816300000002', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-16 23:18:17', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-16 23:18:14', '2021-08-16 23:18:17');
-INSERT INTO `oms_order` VALUES (1351548262424821949, '20210828300000009', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2021-08-28 00:43:59', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2021-08-28 00:43:55', NULL);
-INSERT INTO `oms_order` VALUES (1351548262424821950, '20220213300000040', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-13 21:55:52', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-13 21:52:46', '2022-02-13 21:52:46');
-INSERT INTO `oms_order` VALUES (1351548262424821951, '20220224300000001', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 00:54:10', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 00:54:06', '2022-02-24 00:54:06');
-INSERT INTO `oms_order` VALUES (1351548262424821952, '20220224300000002', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 00:54:56', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 00:54:55', '2022-02-24 00:54:55');
-INSERT INTO `oms_order` VALUES (1351548262424821953, '20220224300000003', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 01:16:40', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 01:16:37', '2022-02-24 01:16:37');
-INSERT INTO `oms_order` VALUES (1351548262424821954, '20220224300000004', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 01:17:21', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 01:17:20', '2022-02-24 01:17:20');
-INSERT INTO `oms_order` VALUES (1351548262424821955, '20220224300000005', 100, 1, 1, 201, '', 39, 0, 0, 0, 100, '2022-02-24 09:34:55', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 09:34:53', '2022-02-24 09:34:53');
-INSERT INTO `oms_order` VALUES (1351548262424821956, '20220224300000008', 100, 1, 1, 103, '', 39, 0, 0, 0, 100, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '2022-02-24 23:23:22', '2022-02-24 23:23:22');
-- ----------------------------
-- Table structure for oms_order_delivery
-- ----------------------------
DROP TABLE IF EXISTS `oms_order_delivery`;
CREATE TABLE `oms_order_delivery` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `order_id` bigint NOT NULL COMMENT '订单id',
- `delivery_company` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '物流公司(配送方式)',
- `delivery_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '物流单号',
- `receiver_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人姓名',
- `receiver_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人电话',
- `receiver_post_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人邮编',
- `receiver_province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '省份/直辖市',
- `receiver_city` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '城市',
- `receiver_region` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '区',
- `receiver_detail_address` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '详细地址',
- `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
- `delivery_status` tinyint NULL DEFAULT 0 COMMENT '物流状态【0->运输中;1->已收货】',
- `delivery_time` datetime NULL DEFAULT NULL COMMENT '发货时间',
- `receive_time` datetime NULL DEFAULT NULL COMMENT '确认收货时间',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `order_id` bigint NOT NULL COMMENT '订单id',
+ `delivery_company` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '物流公司(配送方式)',
+ `delivery_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '物流单号',
+ `receiver_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人姓名',
+ `receiver_phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人电话',
+ `receiver_post_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '收货人邮编',
+ `receiver_province` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '省份/直辖市',
+ `receiver_city` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '城市',
+ `receiver_region` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '区',
+ `receiver_detail_address` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '详细地址',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
+ `delivery_status` tinyint NULL DEFAULT 0 COMMENT '物流状态【0->运输中;1->已收货】',
+ `delivery_time` datetime NULL DEFAULT NULL COMMENT '发货时间',
+ `receive_time` datetime NULL DEFAULT NULL COMMENT '确认收货时间',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单物流记录表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -110,119 +94,40 @@ CREATE TABLE `oms_order_delivery` (
-- ----------------------------
DROP TABLE IF EXISTS `oms_order_item`;
CREATE TABLE `oms_order_item` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `order_id` bigint NOT NULL COMMENT '订单ID',
- `spu_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名称',
- `sku_id` bigint NOT NULL DEFAULT 0 COMMENT '商品ID',
- `sku_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品编码',
- `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '规格名称',
- `pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品图片',
- `price` bigint NOT NULL DEFAULT 0 COMMENT '商品单价(单位:分)',
- `count` int NOT NULL DEFAULT 0 COMMENT '商品数量',
- `total_amount` bigint NOT NULL DEFAULT 0 COMMENT '商品总价(单位:分)',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(1:已删除;0:正常)',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE,
- INDEX `index_order_id`(`order_id`) USING BTREE COMMENT '订单id索引'
-) ENGINE = InnoDB AUTO_INCREMENT = 210 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单商品信息表' ROW_FORMAT = DYNAMIC;
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `order_id` bigint NOT NULL COMMENT '订单ID',
+ `spu_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名称',
+ `sku_id` bigint NOT NULL DEFAULT 0 COMMENT '商品ID',
+ `sku_sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品编码',
+ `sku_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '规格名称',
+ `pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品图片',
+ `price` bigint NOT NULL DEFAULT 0 COMMENT '商品单价(单位:分)',
+ `quantity` int NULL DEFAULT NULL COMMENT '商品数量',
+ `total_amount` bigint NOT NULL DEFAULT 0 COMMENT '商品总价(单位:分)',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(1:已删除;0:正常)',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `index_order_id`(`order_id` ASC) USING BTREE COMMENT '订单id索引'
+) ENGINE = InnoDB AUTO_INCREMENT = 501 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单商品信息表' ROW_FORMAT = DYNAMIC;
+
--- ----------------------------
--- Records of oms_order_item
--- ----------------------------
-INSERT INTO `oms_order_item` VALUES (128, 1351548262424821882, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-22 23:34:46', '2021-03-22 23:34:46');
-INSERT INTO `oms_order_item` VALUES (129, 1351548262424821883, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 01:03:47', '2021-03-23 01:03:47');
-INSERT INTO `oms_order_item` VALUES (130, 1351548262424821884, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 01:10:17', '2021-03-23 01:10:17');
-INSERT INTO `oms_order_item` VALUES (131, 1351548262424821885, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 02:21:27', '2021-03-23 02:21:27');
-INSERT INTO `oms_order_item` VALUES (132, 1351548262424821886, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 06:37:27', '2021-03-23 06:37:27');
-INSERT INTO `oms_order_item` VALUES (133, 1351548262424821887, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 07:02:27', '2021-03-23 07:02:27');
-INSERT INTO `oms_order_item` VALUES (134, 1351548262424821888, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-23 07:31:43', '2021-03-23 07:31:43');
-INSERT INTO `oms_order_item` VALUES (135, 1351548262424821889, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-23 18:55:41', '2021-03-23 18:55:41');
-INSERT INTO `oms_order_item` VALUES (136, 1351548262424821890, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 2, 319800, 0, '2021-03-25 19:02:51', '2021-03-25 19:02:51');
-INSERT INTO `oms_order_item` VALUES (137, 1351548262424821891, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-29 15:57:45', '2021-03-29 15:57:45');
-INSERT INTO `oms_order_item` VALUES (138, 1351548262424821892, NULL, 186, '1614505517559', '测试手机1 黑 6+128 ', 'http://a.youlai.store:9000/default/9715dde8c35c429b8c56cbe800ebd205.jpg', 299900, 1, 299900, 0, '2021-03-29 16:02:46', '2021-03-29 16:02:46');
-INSERT INTO `oms_order_item` VALUES (139, 1351548262424821893, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-03-31 14:22:33', '2021-03-31 14:22:33');
-INSERT INTO `oms_order_item` VALUES (140, 1351548262424821894, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.store:9000/default/37729cd58065419f84b15f44b0e4f27f.jpg', 159900, 1, 159900, 0, '2021-04-14 22:59:43', '2021-04-14 22:59:43');
-INSERT INTO `oms_order_item` VALUES (141, 1351548262424821895, NULL, 192, '1614505936511', '测试手机2 黑 8+256 ', 'http://a.youlai.tech:9000/default/3e369c91377a4c9f9eb33f66a6dd6906.jpg', 199900, 1, 199900, 0, '2021-04-14 23:03:21', '2021-04-14 23:03:21');
-INSERT INTO `oms_order_item` VALUES (142, 1351548262424821896, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 1, 159900, 0, '2021-04-14 23:33:48', '2021-04-14 23:33:48');
-INSERT INTO `oms_order_item` VALUES (143, 1351548262424821897, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:38:15', '2021-04-14 23:38:15');
-INSERT INTO `oms_order_item` VALUES (144, 1351548262424821898, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:38:31', '2021-04-14 23:38:31');
-INSERT INTO `oms_order_item` VALUES (145, 1351548262424821899, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 2, 319800, 0, '2021-04-14 23:42:47', '2021-04-14 23:42:47');
-INSERT INTO `oms_order_item` VALUES (146, 1351548262424821900, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 3, 479700, 0, '2021-04-14 23:48:04', '2021-04-14 23:48:04');
-INSERT INTO `oms_order_item` VALUES (147, 1351548262424821901, NULL, 190, '1614505936507', '测试手机2 黑 4+64 ', 'http://a.youlai.tech:9000/default/c9f6f4f2e4de46f78d9c7a87d25948e1.jpg', 159900, 1, 159900, 0, '2021-04-16 16:18:27', '2021-04-16 16:18:27');
-INSERT INTO `oms_order_item` VALUES (150, 1351548262424821904, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:20:33', '2021-06-11 00:20:33');
-INSERT INTO `oms_order_item` VALUES (151, 1351548262424821905, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:24:07', '2021-06-11 00:24:07');
-INSERT INTO `oms_order_item` VALUES (152, 1351548262424821906, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:26:16', '2021-06-11 00:26:16');
-INSERT INTO `oms_order_item` VALUES (153, 1351548262424821907, NULL, 232, '1622008618852', '名称 红色 l ', '', 200, 1, 200, 0, '2021-06-11 00:42:43', '2021-06-11 00:42:43');
-INSERT INTO `oms_order_item` VALUES (154, 1351548262424821908, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 07:58:04', '2021-06-11 07:58:04');
-INSERT INTO `oms_order_item` VALUES (155, 1351548262424821909, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 08:35:11', '2021-06-11 08:35:11');
-INSERT INTO `oms_order_item` VALUES (156, 1351548262424821909, NULL, 244, '1623369301480', '测试合约机 蓝 12+256g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-11 08:35:11', '2021-06-11 08:35:11');
-INSERT INTO `oms_order_item` VALUES (157, 1351548262424821910, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, '2021-06-12 14:16:13', '2021-06-12 14:16:13');
-INSERT INTO `oms_order_item` VALUES (158, 1351548262424821911, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, '2021-06-17 08:48:45', '2021-06-17 08:48:45');
-INSERT INTO `oms_order_item` VALUES (163, 1351548262424821918, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (164, 1351548262424821919, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 1, 999900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (165, 1351548262424821920, NULL, 236, '1623369301480', '测试合约机 黑 6+64g ', 'http://a.youlai.tech:9000/default/c6e941103d8841acaf2f3f7356e11686.jpg', 999900, 2, 1999800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (166, 1351548262424821921, NULL, 197, '1616310848932', '测试衣服1 白 M ', 'http://a.youlai.store:9000/default/063350d473a64ee7857e91841add1177.jpg', 29900, 1, 29900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (167, 1351548262424821922, NULL, 197, '1616310848932', '测试衣服1 白 M ', 'http://a.youlai.store:9000/default/063350d473a64ee7857e91841add1177.jpg', 29900, 4, 119600, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (168, 1351548262424821923, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 1, 609900, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (169, 1351548262424821924, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 2, 1219800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (170, 1351548262424821925, NULL, 245, '1626080416010', 'huawei mate40pro 12 2 3 ', '', 609900, 2, 1219800, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (171, 1351548262424821927, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 00:25:33', '2021-08-13 00:25:33');
-INSERT INTO `oms_order_item` VALUES (172, 1351548262424821928, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 00:29:25', '2021-08-13 00:29:25');
-INSERT INTO `oms_order_item` VALUES (173, 1351548262424821912, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 22:45:19', '2021-08-13 22:45:19');
-INSERT INTO `oms_order_item` VALUES (174, 1351548262424821913, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-13 23:37:42', '2021-08-13 23:37:42');
-INSERT INTO `oms_order_item` VALUES (175, 1351548262424821914, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 00:17:19', '2021-08-14 00:17:19');
-INSERT INTO `oms_order_item` VALUES (176, 1351548262424821914, NULL, 291, '1', '', 'http://a.youlai.tech:9000/default/fb3f1be8aae644f497255f29aa51c641.jpg', 100, 1, 100, 0, '2021-08-14 00:17:19', '2021-08-14 00:17:19');
-INSERT INTO `oms_order_item` VALUES (177, 1351548262424821915, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 01:24:26', '2021-08-14 01:24:26');
-INSERT INTO `oms_order_item` VALUES (178, 1351548262424821916, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 17:24:13', '2021-08-14 17:24:13');
-INSERT INTO `oms_order_item` VALUES (179, 1351548262424821917, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 17:30:19', '2021-08-14 17:30:19');
-INSERT INTO `oms_order_item` VALUES (180, 1351548262424821918, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 18:58:28', '2021-08-14 18:58:28');
-INSERT INTO `oms_order_item` VALUES (181, 1351548262424821919, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 2, 200, 0, '2021-08-14 19:01:46', '2021-08-14 19:01:46');
-INSERT INTO `oms_order_item` VALUES (182, 1351548262424821921, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 21:41:42', '2021-08-14 21:41:42');
-INSERT INTO `oms_order_item` VALUES (183, 1351548262424821922, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:32:39', '2021-08-14 22:32:39');
-INSERT INTO `oms_order_item` VALUES (184, 1351548262424821923, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:35:14', '2021-08-14 22:35:14');
-INSERT INTO `oms_order_item` VALUES (185, 1351548262424821924, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 22:38:04', '2021-08-14 22:38:04');
-INSERT INTO `oms_order_item` VALUES (186, 1351548262424821925, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-14 23:14:42', '2021-08-14 23:14:42');
-INSERT INTO `oms_order_item` VALUES (187, 1351548262424821926, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:42:26', '2021-08-15 00:42:26');
-INSERT INTO `oms_order_item` VALUES (188, 1351548262424821927, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:46:45', '2021-08-15 00:46:45');
-INSERT INTO `oms_order_item` VALUES (189, 1351548262424821928, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:50:57', '2021-08-15 00:50:57');
-INSERT INTO `oms_order_item` VALUES (190, 1351548262424821929, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 00:54:41', '2021-08-15 00:54:41');
-INSERT INTO `oms_order_item` VALUES (191, 1351548262424821930, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 01:00:50', '2021-08-15 01:00:50');
-INSERT INTO `oms_order_item` VALUES (192, 1351548262424821931, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 09:24:03', '2021-08-15 09:24:03');
-INSERT INTO `oms_order_item` VALUES (193, 1351548262424821932, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 09:24:14', '2021-08-15 09:24:14');
-INSERT INTO `oms_order_item` VALUES (194, 1351548262424821933, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 12:23:37', '2021-08-15 12:23:37');
-INSERT INTO `oms_order_item` VALUES (195, 1351548262424821940, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 12:38:02', '2021-08-15 12:38:02');
-INSERT INTO `oms_order_item` VALUES (196, 1351548262424821941, NULL, 331, '4', '黑色 8+256G 套餐一 ', '', 300, 1, 300, 0, '2021-08-15 21:33:56', '2021-08-15 21:33:56');
-INSERT INTO `oms_order_item` VALUES (197, 1351548262424821942, NULL, 308, '1', '123 1233 ', '', 100, 1, 100, 0, '2021-08-15 21:34:10', '2021-08-15 21:34:10');
-INSERT INTO `oms_order_item` VALUES (198, 1351548262424821943, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 21:44:01', '2021-08-15 21:44:01');
-INSERT INTO `oms_order_item` VALUES (199, 1351548262424821944, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-15 21:45:22', '2021-08-15 21:45:22');
-INSERT INTO `oms_order_item` VALUES (200, 1351548262424821945, NULL, 328, '1', '黑色 6+128G 标准 ', '', 100, 1, 100, 0, '2021-08-15 22:00:37', '2021-08-15 22:00:37');
-INSERT INTO `oms_order_item` VALUES (201, 1351548262424821946, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-16 17:05:17', '2021-08-16 17:05:17');
-INSERT INTO `oms_order_item` VALUES (202, 1351548262424821948, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2021-08-16 23:18:16', '2021-08-16 23:18:16');
-INSERT INTO `oms_order_item` VALUES (203, 1351548262424821949, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, NULL, NULL);
-INSERT INTO `oms_order_item` VALUES (204, 1351548262424821950, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-13 21:52:46', '2022-02-13 21:52:46');
-INSERT INTO `oms_order_item` VALUES (205, 1351548262424821951, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 00:54:07', '2022-02-24 00:54:07');
-INSERT INTO `oms_order_item` VALUES (206, 1351548262424821952, NULL, 296, '1213', '117|11', '', 100, 1, 100, 0, '2022-02-24 00:54:55', '2022-02-24 00:54:55');
-INSERT INTO `oms_order_item` VALUES (207, 1351548262424821953, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 01:16:38', '2022-02-24 01:16:38');
-INSERT INTO `oms_order_item` VALUES (208, 1351548262424821954, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 01:17:20', '2022-02-24 01:17:20');
-INSERT INTO `oms_order_item` VALUES (209, 1351548262424821955, NULL, 291, '1', '', 'http://a.youlai.tech:9000/default/fb3f1be8aae644f497255f29aa51c641.jpg', 100, 1, 100, 0, '2022-02-24 09:34:53', '2022-02-24 09:34:53');
-INSERT INTO `oms_order_item` VALUES (210, 1351548262424821956, NULL, 300, '1', 'tid_1_1|tid_2_1|tid_3_', 'http://a.youlai.tech:9000/default/852f076dd41d4e199c969289838149fa.jpg', 100, 1, 100, 0, '2022-02-24 23:23:22', '2022-02-24 23:23:22');
-- ----------------------------
-- Table structure for oms_order_log
-- ----------------------------
DROP TABLE IF EXISTS `oms_order_log`;
CREATE TABLE `oms_order_log` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `order_id` bigint NOT NULL COMMENT '订单id',
- `user` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人[用户;系统;后台管理员]',
- `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '操作详情',
- `order_status` int NULL DEFAULT NULL COMMENT '操作时订单状态',
- `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `order_id` bigint NOT NULL COMMENT '订单id',
+ `user` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人[用户;系统;后台管理员]',
+ `detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '操作详情',
+ `order_status` int NULL DEFAULT NULL COMMENT '操作时订单状态',
+ `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单操作历史记录' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -234,21 +139,21 @@ CREATE TABLE `oms_order_log` (
-- ----------------------------
DROP TABLE IF EXISTS `oms_order_pay`;
CREATE TABLE `oms_order_pay` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `order_id` bigint NOT NULL COMMENT '订单id',
- `pay_sn` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '支付流水号',
- `pay_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
- `pay_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
- `pay_type` tinyint NULL DEFAULT NULL COMMENT '支付方式【1->支付宝;2->微信;3->银联; 4->货到付款;】',
- `pay_status` tinyint NULL DEFAULT NULL COMMENT '支付状态',
- `confirm_time` datetime NULL DEFAULT NULL COMMENT '确认时间',
- `callback_content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '回调内容',
- `callback_time` datetime NULL DEFAULT NULL COMMENT '回调时间',
- `pay_subject` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '交易内容',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `order_id` bigint NOT NULL COMMENT '订单id',
+ `pay_sn` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '支付流水号',
+ `pay_amount` bigint NOT NULL DEFAULT 0 COMMENT '应付总额(分)',
+ `pay_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
+ `pay_type` tinyint NULL DEFAULT NULL COMMENT '支付方式【1->支付宝;2->微信;3->银联; 4->货到付款;】',
+ `pay_status` tinyint NULL DEFAULT NULL COMMENT '支付状态',
+ `confirm_time` datetime NULL DEFAULT NULL COMMENT '确认时间',
+ `callback_content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '回调内容',
+ `callback_time` datetime NULL DEFAULT NULL COMMENT '回调时间',
+ `pay_subject` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '交易内容',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '支付信息表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -260,17 +165,17 @@ CREATE TABLE `oms_order_pay` (
-- ----------------------------
DROP TABLE IF EXISTS `oms_order_setting`;
CREATE TABLE `oms_order_setting` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `flash_order_overtime` int NULL DEFAULT NULL COMMENT '秒杀订单超时关闭时间(分)',
- `normal_order_overtime` int NULL DEFAULT NULL COMMENT '正常订单超时时间(分)',
- `confirm_overtime` int NULL DEFAULT NULL COMMENT '发货后自动确认收货时间(天)',
- `finish_overtime` int NULL DEFAULT NULL COMMENT '自动完成交易时间,不能申请退货(天)',
- `comment_overtime` int NULL DEFAULT NULL COMMENT '订单完成后自动好评时间(天)',
- `member_level` tinyint NULL DEFAULT NULL COMMENT '会员等级【0-不限会员等级,全部通用;其他-对应的其他会员等级】',
- `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
- `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
- PRIMARY KEY (`id`) USING BTREE
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `flash_order_overtime` int NULL DEFAULT NULL COMMENT '秒杀订单超时关闭时间(分)',
+ `normal_order_overtime` int NULL DEFAULT NULL COMMENT '正常订单超时时间(分)',
+ `confirm_overtime` int NULL DEFAULT NULL COMMENT '发货后自动确认收货时间(天)',
+ `finish_overtime` int NULL DEFAULT NULL COMMENT '自动完成交易时间,不能申请退货(天)',
+ `comment_overtime` int NULL DEFAULT NULL COMMENT '订单完成后自动好评时间(天)',
+ `member_level` tinyint NULL DEFAULT NULL COMMENT '会员等级【0-不限会员等级,全部通用;其他-对应的其他会员等级】',
+ `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除【0->正常;1->已删除】',
+ `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
+ PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '订单配置信息' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -282,14 +187,14 @@ CREATE TABLE `oms_order_setting` (
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log` (
- `branch_id` bigint NOT NULL COMMENT 'branch transaction id',
- `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'global transaction id',
- `context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'undo_log context,such as serialization',
- `rollback_info` longblob NOT NULL COMMENT 'rollback info',
- `log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
- `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
- `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
- UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
+ `branch_id` bigint NOT NULL COMMENT 'branch transaction id',
+ `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'global transaction id',
+ `context` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'undo_log context,such as serialization',
+ `rollback_info` longblob NOT NULL COMMENT 'rollback info',
+ `log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
+ `log_created` datetime(6) NOT NULL COMMENT 'create datetime',
+ `log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
+ UNIQUE INDEX `ux_undo_log`(`xid` ASC, `branch_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'AT transaction mode undo table' ROW_FORMAT = DYNAMIC;
-- ----------------------------
diff --git a/docs/sql/mysql8.x/mall_pms.sql b/docs/sql/mysql8.x/mall_pms.sql
index 73abecd09..27354f307 100644
--- a/docs/sql/mysql8.x/mall_pms.sql
+++ b/docs/sql/mysql8.x/mall_pms.sql
@@ -82,7 +82,7 @@ CREATE TABLE `pms_category_attribute` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_attr_pms_category`(`category_id`) USING BTREE
+ INDEX `fk_pms_attr_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 183 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品属性表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -93,17 +93,17 @@ INSERT INTO `pms_category_attribute` VALUES (35, 5, '规格', 1, '2021-07-11 18:
INSERT INTO `pms_category_attribute` VALUES (36, 5, '上市时间', 2, '2021-07-11 18:00:08', '2022-06-01 17:41:05');
-- ----------------------------
--- Table structure for pms_catetgory_brand
+-- Table structure for pms_category_brand
-- ----------------------------
-DROP TABLE IF EXISTS `pms_catetgory_brand`;
-CREATE TABLE `pms_catetgory_brand` (
- `category_id` bigint NOT NULL,
- `brand_id` bigint NOT NULL,
- PRIMARY KEY (`category_id`) USING BTREE
+DROP TABLE IF EXISTS `pms_category_brand`;
+CREATE TABLE `pms_category_brand` (
+ `category_id` bigint NOT NULL,
+ `brand_id` bigint NOT NULL,
+ PRIMARY KEY (`category_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
--- Records of pms_catetgory_brand
+-- Records of pms_category_brand
-- ----------------------------
-- ----------------------------
@@ -117,34 +117,35 @@ CREATE TABLE `pms_sku` (
`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名称',
`spec_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品规格值,以英文逗号(,)分割',
`price` bigint NULL DEFAULT NULL COMMENT '商品价格(单位:分)',
- `stock_num` int NULL DEFAULT 0 COMMENT '库存数量',
- `locked_stock_num` int NULL DEFAULT 0 COMMENT '锁定库存数量',
+ `stock` int UNSIGNED NULL DEFAULT NULL COMMENT '库存数量',
+ `locked_stock` int NULL DEFAULT NULL COMMENT '库存锁定数量',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品图片地址',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_sku_pms_spu`(`spu_id`) USING BTREE
+ INDEX `fk_pms_sku_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 755 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品库存表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of pms_sku
-- ----------------------------
-INSERT INTO `pms_sku` VALUES (1, 'sn001', 1, '黑 6+128g', '1_3', 399900, 999, 5, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (2, 'sn002', 1, '黑 8+256g', '1_4', 499900, 9998, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (3, 'sn003', 1, '蓝 6+128g', '216_3', 399900, 9998, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (4, 'sn004', 1, '蓝 8+256g', '216_4', 499900, 9988, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
-INSERT INTO `pms_sku` VALUES (5, '10000001', 2, '魔幻青 RTX3060/i7-12700H/165Hz 2.5K屏', '256_258', 1025000, 9816, 26, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (6, '10000002', 2, '魔幻青 RTX3050tTi/12代i5/144Hz高色域屏', '256_259', 925000, 10000, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (7, '10000003', 2, '日蚀灰 RTX3060/i7-12700H/165Hz 2.5K屏', '257_258', 1025000, 10000, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (8, '10000004', 2, '日蚀灰 RTX3050tTi/12代i5/144Hz高色域屏', '257_259', 925000, 10000, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_sku` VALUES (747, '111', 287, '16g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_843_845', 589900, 9991, 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (748, '112', 287, '16g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_843_846', 629900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (749, '113', 287, '16g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_844_845', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (750, '114', 287, '16g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_844_846', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (751, '115', 287, '32g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_843_845', 589900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (752, '116', 287, '32g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_843_846', 629900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (753, '117', 287, '32g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_844_845', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_sku` VALUES (754, '118', 287, '32g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_844_846', 639900, 9999, 0, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (1, 'sn001', 1, '黑 6+128g', '1_3', 399900, 996, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (2, 'sn002', 1, '黑 8+256g', '1_4', 499900, 999, 0, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (3, 'sn003', 1, '蓝 6+128g', '216_3', 399900, 999, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (4, 'sn004', 1, '蓝 8+256g', '216_4', 499900, 999, 0, 'https://www.youlai.tech/files/default/835d73a337964b9b97e5c7c90acc8cb2.png', '2022-03-05 09:25:53', '2022-07-03 14:16:16');
+INSERT INTO `pms_sku` VALUES (5, '10000001', 2, '魔幻青 RTX3060/i7-12700H/165Hz 2.5K屏', '256_258', 1025000, 999, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (6, '10000002', 2, '魔幻青 RTX3050tTi/12代i5/144Hz高色域屏', '256_259', 925000, 999, 0, 'http://a.youlai.tech:9000/default/8815c9a46fcc4b1ea952623406750da5.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (7, '10000003', 2, '日蚀灰 RTX3060/i7-12700H/165Hz 2.5K屏', '257_258', 1025000, 999, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (8, '10000004', 2, '日蚀灰 RTX3050tTi/12代i5/144Hz高色域屏', '257_259', 925000, 999, 0, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
+INSERT INTO `pms_sku` VALUES (9, '111', 3, '16g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_843_845', 589900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (10, '112', 3, '16g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_843_846', 629900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (11, '113', 3, '16g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '841_844_845', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (12, '114', 3, '16g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '841_844_846', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (13, '115', 3, '32g 512g 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_843_845', 589900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (14, '116', 3, '32g 512g 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_843_846', 629900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (15, '117', 3, '32g 1t 【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', '842_844_845', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/78b8efecb753426f81e5dcfcd175495f.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (16, '118', 3, '32g 1t 【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', '842_844_846', 639900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/93cbc9dc6fe144f5a59793a6248479a0.jpg', '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_sku` VALUES (17, 'sn001', 4, '黑 6+128g', '1_3', 399900, 999, 0, 'https://oss.youlai.tech/youlai-boot/2023/06/08/6b83dd33eaa248ed8e11cff0003287ee.jpg', '2021-08-08 00:43:26', '2022-07-03 14:16:16');
-- ----------------------------
-- Table structure for pms_spu
@@ -167,8 +168,8 @@ CREATE TABLE `pms_spu` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_spu_pms_brand`(`brand_id`) USING BTREE,
- INDEX `fk_pms_spu_pms_category`(`category_id`) USING BTREE
+ INDEX `fk_pms_spu_pms_brand`(`brand_id` ASC) USING BTREE,
+ INDEX `fk_pms_spu_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 288 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -176,7 +177,8 @@ CREATE TABLE `pms_spu` (
-- ----------------------------
INSERT INTO `pms_spu` VALUES (1, '小米12 PRO', 5, 10, 599900, 599900, 1, 'https://oss.youlai.tech/default/0ccd5bf5cf384185be1f18a01da076b9.png', '[]', '台', '好快,好稳,\n好一次强上加强。\n高通全新一代芯片赋能,速度大幅提升。\n三大专业主摄影像加持,能力全面进化。\n大师级设计理念新诠释,质感简而不凡。\n斩获十五项纪录旗舰屏,感官万般出众。', '', 1, NULL, '2022-07-03 14:16:16');
INSERT INTO `pms_spu` VALUES (2, '华硕天选3', 101, 11, 1145000, 929900, 0, 'https://www.youlai.tech/files/default/d97457b3fd7d4aef8846da96fe032bf8.jpg', '[\"https://www.youlai.tech/files/default/3edd01c723ff456384cea9bd3c9b19e7.jpg\", \"https://www.youlai.tech/files/default/a6681c18fc294ee49efb8e121b8e943f.jpg\", \"https://www.youlai.tech/files/default/97458ae9ea734bc498724660abb1c6cd.jpg\", \"https://www.youlai.tech/files/default/501b0e6dcb3f4d69b7e40e90b3d3ac32.jpg\"]', NULL, '中国台湾华硕电脑股份有限公司 [1] 是当前全球第一大主板生产商、全球第三大显卡生产商,同时也是全球领先的3C解决方案提供商之一,致力于为个人和企业用户提供最具创新价值的产品及应用方案。华硕的产品线完整覆盖至笔记本电脑、主板、显卡、服务器、光存储、有线/无线网络通讯产品、LCD、掌上电脑、智能手机等全线3C产品。其中显卡和主板以及笔记本电脑三大产品已经成为华硕的主要竞争实力。', '', 1, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_spu` VALUES (287, '惠普战X ', 99, 33, 639900, 629900, 0, 'https://oss.youlai.tech/default/e59859e0effb4b66a0f7380ff5369d66.jpg', '[\"https://oss.youlai.tech/default/de9c5625e35b4c0aa9888c48d4def446.jpg\"]', NULL, '【2022新款】HP/惠普战X 16英寸锐龙新款6000系列R5六核/R7八核高性能学生家用轻薄办公商用笔记本电脑\n六核/八核处理器,高性能集成显卡', '', 1, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu` VALUES (3, '惠普战X ', 99, 33, 639900, 629900, 0, 'https://oss.youlai.tech/default/e59859e0effb4b66a0f7380ff5369d66.jpg', '[\"https://oss.youlai.tech/default/de9c5625e35b4c0aa9888c48d4def446.jpg\"]', NULL, '【2022新款】HP/惠普战X 16英寸锐龙新款6000系列R5六核/R7八核高性能学生家用轻薄办公商用笔记本电脑\n六核/八核处理器,高性能集成显卡', '', 1, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu` VALUES (4, '小米13', 5, 10, 599900, 599900, 1, 'https://oss.youlai.tech/youlai-boot/2023/06/08/6b83dd33eaa248ed8e11cff0003287ee.jpg', '[]', '台', '好快,好稳,\n好一次强上加强。\n高通全新一代芯片赋能,速度大幅提升。\n三大专业主摄影像加持,能力全面进化。\n大师级设计理念新诠释,质感简而不凡。\n斩获十五项纪录旗舰屏,感官万般出众。', '', 1, NULL, '2022-07-03 14:16:16');
-- ----------------------------
-- Table structure for pms_spu_attribute
@@ -193,8 +195,8 @@ CREATE TABLE `pms_spu_attribute` (
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `fk_pms_spu_attribute_pms_attr`(`name`) USING BTREE,
- INDEX `fk_pms_spu_attribute_pms_spu`(`spu_id`) USING BTREE
+ INDEX `fk_pms_spu_attribute_pms_attr`(`name` ASC) USING BTREE,
+ INDEX `fk_pms_spu_attribute_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 847 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品属性/规格表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
@@ -214,15 +216,15 @@ INSERT INTO `pms_spu_attribute` VALUES (256, 2, NULL, '颜色', '魔幻青', 1,
INSERT INTO `pms_spu_attribute` VALUES (257, 2, NULL, '颜色', '日蚀灰', 1, 'http://a.youlai.tech:9000/default/3210cd1ffb6c4346b743a10855d3cb37.jpg', '2022-03-11 14:39:21', '2022-07-08 00:29:56');
INSERT INTO `pms_spu_attribute` VALUES (258, 2, NULL, '规格', 'RTX3060/i7-12700H/165Hz 2.5K屏', 1, NULL, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
INSERT INTO `pms_spu_attribute` VALUES (259, 2, NULL, '规格', 'RTX3050tTi/12代i5/144Hz高色域屏', 1, NULL, '2022-03-11 14:39:21', '2022-07-08 00:29:56');
-INSERT INTO `pms_spu_attribute` VALUES (838, 287, NULL, '内存', '16g 32g', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (839, 287, NULL, '重量', '1.5kg(含)-2kg(不含)', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (840, 287, NULL, '显卡类型', '核芯显卡', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (841, 287, NULL, '内存容量', '16g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (842, 287, NULL, '内存容量', '32g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (843, 287, NULL, '硬盘容量', '512g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (844, 287, NULL, '硬盘容量', '1t', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (845, 287, NULL, '套餐类型', '【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-INSERT INTO `pms_spu_attribute` VALUES (846, 287, NULL, '套餐类型', '【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (838, 3, NULL, '内存', '16g 32g', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (839, 3, NULL, '重量', '1.5kg(含)-2kg(不含)', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (840, 3, NULL, '显卡类型', '核芯显卡', 2, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (841, 3, NULL, '内存容量', '16g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (842, 3, NULL, '内存容量', '32g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (843, 3, NULL, '硬盘容量', '512g', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (844, 3, NULL, '硬盘容量', '1t', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (845, 3, NULL, '套餐类型', '【2022款】锐龙六核R5-6600U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
+INSERT INTO `pms_spu_attribute` VALUES (846, 3, NULL, '套餐类型', '【2022款】锐龙八核R7-6800U/核芯显卡/100%sRGB高色域', 1, NULL, '2022-07-07 00:22:13', '2022-07-08 00:29:41');
-- ----------------------------
-- Table structure for undo_log
@@ -236,7 +238,11 @@ CREATE TABLE `undo_log` (
`log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` datetime(6) NOT NULL COMMENT 'create datetime',
`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
- UNIQUE INDEX `ux_undo_log`(`xid`, `branch_id`) USING BTREE
+ UNIQUE INDEX `ux_undo_log`(`xid` ASC, `branch_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'AT transaction mode undo table' ROW_FORMAT = DYNAMIC;
+-- ----------------------------
+-- Records of undo_log
+-- ----------------------------
+
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/laboratory/Dockerfile b/laboratory/Dockerfile
deleted file mode 100644
index c59094154..000000000
--- a/laboratory/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-FROM openjdk:8-jre
-MAINTAINER youlai youlaitech@163.com
-
-RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
-
-# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
-# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
-VOLUME /tmp
-
-# 复制jar到镜像
-ADD target/laboratory.jar app.jar
-
-ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
-
-EXPOSE 8000
-
-
-
diff --git a/laboratory/README.md b/laboratory/README.md
deleted file mode 100644
index 07212db1d..000000000
--- a/laboratory/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-### 项目结构
-
-``` lua
-youlai-loboratory
-├── base 基础设置
- ├── config -- 公共配置
-├── seata 分布式事务
-├── seata 分布式事务
-└── end
-```
\ No newline at end of file
diff --git a/laboratory/pom.xml b/laboratory/pom.xml
deleted file mode 100644
index e28361baa..000000000
--- a/laboratory/pom.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-
- youlai-mall
- com.youlai
- 2.2.0
-
- 4.0.0
-
- laboratory
- 有来实验室
-
-
- 8
- 8
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-bootstrap
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
- jsr305
- com.google.code.findbugs
-
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-loadbalancer
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-config
-
-
-
-
- com.github.xiaoymin
- knife4j-micro-spring-boot-starter
-
-
-
- com.youlai
- oms-api
-
-
-
- com.youlai
- pms-api
-
-
-
- com.youlai
- ums-api
-
-
-
- com.youlai
- common-web
-
-
-
- com.youlai
- common-mybatis
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
-
-
-
- com.alibaba.csp
- sentinel-datasource-nacos
-
-
-
- com.youlai
- common-seata
-
-
-
- com.youlai
- common-rabbitmq
-
-
-
-
-
- ${project.artifactId}
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
diff --git a/laboratory/src/main/java/com/youlai/laboratory/LaboratoryApplication.java b/laboratory/src/main/java/com/youlai/laboratory/LaboratoryApplication.java
deleted file mode 100644
index 006a75fd8..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/LaboratoryApplication.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.youlai.laboratory;
-
-import com.youlai.mall.oms.api.OrderFeignClient;
-import com.youlai.mall.pms.api.SkuFeignClient;
-import com.youlai.mall.ums.api.MemberFeignClient;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-
-/**
- * 实验室启动类
- *
- * @author zc
- * @date 2021/11/29 0029 22:50
- */
-@SpringBootApplication
-@EnableFeignClients(basePackageClasses = {OrderFeignClient.class, SkuFeignClient.class, MemberFeignClient.class})
-@EnableDiscoveryClient
-public class LaboratoryApplication {
- public static void main(String[] args) {
- SpringApplication.run(LaboratoryApplication.class, args);
- }
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/seata/controller/SeataController.java b/laboratory/src/main/java/com/youlai/laboratory/seata/controller/SeataController.java
deleted file mode 100644
index 9d6b73ed0..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/seata/controller/SeataController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.youlai.laboratory.seata.controller;
-
-import com.youlai.common.result.Result;
-import com.youlai.laboratory.seata.pojo.form.SeataForm;
-import com.youlai.laboratory.seata.pojo.vo.SeataVO;
-import com.youlai.laboratory.seata.service.SeataService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * Seata 控制层
- *
- * @author haoxr
- * @date 2022/4/16 20:46
- */
-@Api(tags = "「实验室」Seata接口")
-@RestController
-@RequestMapping("/api/v1/seata")
-@RequiredArgsConstructor
-@Slf4j
-public class SeataController {
-
- private final SeataService seataService;
-
- @ApiOperation("获取模拟数据")
- @GetMapping("/data")
- public Result getData() {
- SeataVO result = seataService.getData();
- return Result.success(result);
- }
-
- @ApiOperation("重置模拟数据")
- @PutMapping("/data/_reset")
- public Result resetData() {
- boolean result = seataService.resetData();
- return Result.success(result);
- }
-
- @ApiOperation("订单支付")
- @PostMapping("/_pay")
- public Result payOrder(@RequestBody SeataForm seataForm) {
- boolean openTx = seataForm.isOpenTx();
-
- boolean result;
- if (openTx) {
- // 开启全局事务
- result = seataService.payOrderWithGlobalTx(seataForm);
- } else {
- result = seataService.payOrder(seataForm);
- }
- return Result.success(result);
- }
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/form/SeataForm.java b/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/form/SeataForm.java
deleted file mode 100644
index a1723af06..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/form/SeataForm.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.youlai.laboratory.seata.pojo.form;
-
-import lombok.Data;
-
-/**
- * Seata 表单数据
- *
- * @author haoxr
- * @date 2022/4/21 23:16
- */
-@Data
-public class SeataForm {
-
- /**
- * 订单金额
- */
- private Long amount;
-
- /**
- * 是否开启事务
- */
- private boolean openTx;
-
- /**
- * 是否开启异常
- */
- private boolean openEx;
-
-
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/vo/SeataVO.java b/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/vo/SeataVO.java
deleted file mode 100644
index 2112511d8..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/seata/pojo/vo/SeataVO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.youlai.laboratory.seata.pojo.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * Seata模拟数据视图对象
- *
- * @author haoxr
- * @date 2022/4/17 16:51
- */
-@ApiModel("Seata模拟数据视图对象")
-@Data
-public class SeataVO {
-
- @ApiModelProperty("商品库存信息")
- private StockInfo stockInfo;
-
- @ApiModelProperty("会员信息")
- private AccountInfo accountInfo;
-
- @ApiModelProperty("订单信息")
- private OrderInfo orderInfo;
-
- @ApiModel("商品库存信息")
- @Data
- public static class StockInfo{
-
- @ApiModelProperty("商品名称")
- private String name;
- @ApiModelProperty("商品图片")
- private String picUrl;
- @ApiModelProperty("库存数量")
- private Integer stockNum;
-
- }
-
- @ApiModel("订单信息")
- @Data
- public static class OrderInfo{
- @ApiModelProperty("订单编号")
- private String orderSn;
- @ApiModelProperty("订单状态")
- private Integer status;
-
- }
-
- @ApiModel("会员信息")
- @Data
- public static class AccountInfo{
- @ApiModelProperty("会员")
- private String nickName;
- @ApiModelProperty("订单状态")
- private String avatarUrl;
- @ApiModelProperty("订单状态")
- private Long balance;
- }
-
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/seata/service/SeataService.java b/laboratory/src/main/java/com/youlai/laboratory/seata/service/SeataService.java
deleted file mode 100644
index 5958976dc..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/seata/service/SeataService.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.youlai.laboratory.seata.service;
-
-import com.youlai.laboratory.seata.pojo.form.SeataForm;
-import com.youlai.laboratory.seata.pojo.vo.SeataVO;
-
-/**
- * Seata 实验室接口层
- *
- * @author haoxr
- * @date 2022/4/16 20:49
- */
-public interface SeataService {
-
- /**
- * 获取模拟数据
- *
- * @return
- */
- SeataVO getData();
-
- /**
- * 重置模拟数据
- *
- * @return
- */
- boolean resetData();
-
- /**
- * 订单支付
- */
- boolean payOrder(SeataForm seataForm);
-
- /**
- * 订单支付(全局事务)
- */
- boolean payOrderWithGlobalTx(SeataForm seataForm);
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/seata/service/impl/SeataServiceImpl.java b/laboratory/src/main/java/com/youlai/laboratory/seata/service/impl/SeataServiceImpl.java
deleted file mode 100644
index b11f5b25f..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/seata/service/impl/SeataServiceImpl.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.youlai.laboratory.seata.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import com.youlai.laboratory.seata.pojo.form.SeataForm;
-import com.youlai.laboratory.seata.pojo.vo.SeataVO;
-import com.youlai.laboratory.seata.service.SeataService;
-import com.youlai.mall.oms.api.OrderFeignClient;
-import com.youlai.mall.oms.dto.OrderInfoDTO;
-import com.youlai.mall.oms.dto.SeataOrderDTO;
-import com.youlai.mall.pms.api.SkuFeignClient;
-import com.youlai.mall.pms.pojo.dto.SkuDTO;
-import com.youlai.mall.ums.api.MemberFeignClient;
-import com.youlai.mall.ums.dto.MemberInfoDTO;
-import io.seata.spring.annotation.GlobalTransactional;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * Seata 实验室业务类接口
- *
- * @author haoxr
- * @date 2022/4/16 20:49
- */
-@Service
-@Slf4j
-@RequiredArgsConstructor
-public class SeataServiceImpl implements SeataService {
-
- private final SkuFeignClient skuFeignClient;
- private final OrderFeignClient orderFeignClient;
- private final MemberFeignClient memberFeignClient;
-
-
- private static Long skuId = 1l; // SkuID
- private static Long memberId = 1l; // 会员ID
- private static Long orderId = 1l;// 订单ID
-
-
- /**
- * 获取模拟数据
- *
- * @return
- */
- @Override
- public SeataVO getData() {
-
-
- SeataVO seataVO = new SeataVO();
-
- SkuDTO skuDTO = skuFeignClient.getSkuInfo(skuId).getData();
- SeataVO.StockInfo stockInfo = new SeataVO.StockInfo();
- BeanUtil.copyProperties(skuDTO, stockInfo);
- stockInfo.setName(skuDTO.getSkuName());
- seataVO.setStockInfo(stockInfo);
-
- MemberInfoDTO memberInfoDTO = memberFeignClient.getMemberInfo(memberId).getData();
- SeataVO.AccountInfo accountInfo = new SeataVO.AccountInfo();
- BeanUtil.copyProperties(memberInfoDTO, accountInfo);
- seataVO.setAccountInfo(accountInfo);
-
- SeataVO.OrderInfo orderInfo = new SeataVO.OrderInfo();
- OrderInfoDTO orderInfoDTO = orderFeignClient.getOrderInfo(orderId).getData();
- BeanUtil.copyProperties(orderInfoDTO, orderInfo);
- seataVO.setOrderInfo(orderInfo);
-
- return seataVO;
- }
-
- /**
- * 重置还原数据
- *
- * @return
- */
- @Override
- public boolean resetData() {
- skuFeignClient.resetStock(skuId); // 还原库存
- memberFeignClient.resetBalance(memberId); // 还原余额
- orderFeignClient.resetOrder(orderId); // 删除订单
- return true;
-
- }
-
- /**
- * 订单支付
- */
- @Override
- public boolean payOrder(SeataForm seataForm) {
- log.info("========扣减商品库存(全局事务)========");
- skuFeignClient.deductStock(skuId, 1); // 扣减库存
-
- log.info("========创建订单(全局事务)========");
- SeataOrderDTO seataOrderDTO = new SeataOrderDTO(
- memberId,
- skuId,
- seataForm.getAmount(),
- seataForm.isOpenEx()
- );
- orderFeignClient.payOrder(orderId, seataOrderDTO);
-
- return true;
- }
-
- /**
- * 订单支付(全局事务)
- */
- @Override
- @GlobalTransactional
- public boolean payOrderWithGlobalTx(SeataForm seataForm) {
-
- log.info("========扣减商品库存========");
- skuFeignClient.deductStock(skuId, 1); // 扣减库存
-
- log.info("========订单支付========");
- SeataOrderDTO seataOrderDTO = new SeataOrderDTO(
- memberId,
- skuId,
- seataForm.getAmount(),
- seataForm.isOpenEx()
- );
-
- orderFeignClient.payOrder(orderId, seataOrderDTO);
-
- return true;
- }
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/sentinel/controller/SentinelController.java b/laboratory/src/main/java/com/youlai/laboratory/sentinel/controller/SentinelController.java
deleted file mode 100644
index ee823dc24..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/sentinel/controller/SentinelController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.youlai.laboratory.sentinel.controller;
-
-import com.youlai.common.result.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@Api(tags = "「实验室」Sentinel接口")
-@RestController
-@RequestMapping("/api/v1/sentinel")
-@RequiredArgsConstructor
-@Slf4j
-public class SentinelController {
-
- @ApiOperation("【普通流控】获取数据")
- @GetMapping("/flow_limiting/data")
- public Result getFlowLimitingData() {
- return Result.success("正常数据");
- }
-
- @ApiOperation("【网关流控-RouteID】获取数据")
- @GetMapping("/gateway_route_flow_limiting/data")
- public Result getGatewayRouteFlowLimitingData() {
- return Result.success("正常数据");
- }
-
- @ApiOperation("【网关流控-API分组】获取数据")
- @GetMapping("/gateway_api_flow_limiting/data")
- public Result getGatewayApiFlowLimitingData() {
- return Result.success("正常数据");
- }
-
-}
diff --git a/laboratory/src/main/java/com/youlai/laboratory/sentinel/handler/DefaultBlockExceptionHandler.java b/laboratory/src/main/java/com/youlai/laboratory/sentinel/handler/DefaultBlockExceptionHandler.java
deleted file mode 100644
index 5c2a3c76d..000000000
--- a/laboratory/src/main/java/com/youlai/laboratory/sentinel/handler/DefaultBlockExceptionHandler.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.youlai.laboratory.sentinel.handler;
-
-import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
-import com.alibaba.csp.sentinel.slots.block.BlockException;
-import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.youlai.common.result.Result;
-import com.youlai.common.result.ResultCode;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Component
-public class DefaultBlockExceptionHandler implements BlockExceptionHandler {
-
- @Override
- public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
- response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/json;charset=utf-8");
- if(e instanceof FlowException){
- // objectMapper.writeValue 用于将java对象转位JSON格式返回调用方
- new ObjectMapper().writeValue(response.getWriter(), Result.failed(ResultCode.FLOW_LIMITING));
- }
- }
-
-}
diff --git a/laboratory/src/main/resources/bootstrap-dev.yml b/laboratory/src/main/resources/bootstrap-dev.yml
deleted file mode 100644
index d006a54d8..000000000
--- a/laboratory/src/main/resources/bootstrap-dev.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-server:
- port: 8805
-
-spring:
- main:
- allow-circular-references: true
- allow-bean-definition-overriding: true
- mvc:
- pathmatch:
- matching-strategy: ant_path_matcher
- cloud:
- nacos:
- # 注册中心
- discovery:
- server-addr: http://localhost:8848
- # 配置中心
- config:
- server-addr: http://f.youlai.tech:8848
- file-extension: yaml
- # 公共配置
- shared-configs[0]:
- data-id: youlai-common.yaml
- refresh: true
diff --git a/laboratory/src/main/resources/bootstrap-prod.yml b/laboratory/src/main/resources/bootstrap-prod.yml
deleted file mode 100644
index a88aa5bab..000000000
--- a/laboratory/src/main/resources/bootstrap-prod.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-server:
- port: 8805
-
-spring:
- main:
- allow-circular-references: true
- allow-bean-definition-overriding: true
- mvc:
- pathmatch:
- matching-strategy: ant_path_matcher
- cloud:
- nacos:
- # 注册中心
- discovery:
- server-addr: http://f.youlai.tech:8848
- namespace: prod-namespace-id
- # 配置中心
- config:
- server-addr: ${spring.cloud.nacos.discovery.server-addr}
- namespace: prod-namespace-id
- file-extension: yaml
- # 公共配置
- shared-configs[0]:
- data-id: youlai-common.yaml
- refresh: true
diff --git a/laboratory/src/main/resources/bootstrap.yml b/laboratory/src/main/resources/bootstrap.yml
deleted file mode 100644
index beb80707c..000000000
--- a/laboratory/src/main/resources/bootstrap.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-spring:
- application:
- name: laboratory
- profiles:
- active: dev
diff --git a/mall-oms/oms-api/pom.xml b/mall-oms/oms-api/pom.xml
index 4f1b65100..09eab42eb 100644
--- a/mall-oms/oms-api/pom.xml
+++ b/mall-oms/oms-api/pom.xml
@@ -5,7 +5,7 @@
mall-oms
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/mall-oms/oms-boot/pom.xml b/mall-oms/oms-boot/pom.xml
index 8eb7ef104..0f26e26ad 100644
--- a/mall-oms/oms-boot/pom.xml
+++ b/mall-oms/oms-boot/pom.xml
@@ -5,7 +5,7 @@
mall-oms
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
@@ -49,7 +49,6 @@
-
com.youlai
oms-api
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/constant/OmsConstants.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/constant/OmsConstants.java
deleted file mode 100644
index 383bdbba8..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/constant/OmsConstants.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.youlai.mall.oms.common.constant;
-
-/**
- * 订单常量
- *
- * @author haoxr
- * @date 2021/03/16
- */
-public interface OmsConstants {
-
- /**
- * 会员购物车缓存KEY前缀
- */
- String MEMBER_CART_PREFIX = "MEMBER:CART:";
-
- /**
- * 订单防重提交锁KEY前缀
- */
- String ORDER_RESUBMIT_LOCK_PREFIX = "ORDER:RESUBMIT_LOCK:";
-
-
- /**
- * 订单锁前缀
- *
- */
- String ORDER_LOCK_PREFIX = "ORDER:LOCK:";
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderCloseRabbitConfig.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderRabbitConfig.java
similarity index 92%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderCloseRabbitConfig.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderRabbitConfig.java
index 0853decd3..3c3a14f3d 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderCloseRabbitConfig.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/OrderRabbitConfig.java
@@ -15,22 +15,21 @@
* 订单超时关单延时队列
*
* @author haoxr
- * @date 2022/2/4 23:21
+ * @since 2.0.0
*/
-
@Component
@Slf4j
-public class OrderCloseRabbitConfig {
+public class OrderRabbitConfig {
// 普通延迟队列
private static final String ORDER_CLOSE_DELAY_QUEUE = "order.close.delay.queue";
private static final String ORDER_EXCHANGE = "order.exchange";
- private static final String ORDER_CLOSE_DELAY_ROUTING_KEY = "order.close.delay.routing.key";
+ private static final String ORDER_CLOSE_DELAY_ROUTING_KEY = "order.close.delay";
// 死信关单队列
private static final String ORDER_ClOSE_QUEUE = "order.close.queue";
private static final String ORDER_DLX_EXCHANGE = "order.dlx.exchange";
- private static final String ORDER_ClOSE_ROUTING_KEY = "order.close.routing.key";
+ private static final String ORDER_ClOSE_ROUTING_KEY = "order.close";
/**
* 定义交换机
@@ -57,7 +56,7 @@ public Queue orderDelayQueue() {
Map args = new HashMap<>();
args.put("x-dead-letter-exchange", ORDER_DLX_EXCHANGE);
args.put("x-dead-letter-routing-key", ORDER_ClOSE_ROUTING_KEY); // 死信路由Key
- args.put("x-message-ttl", 5 * 1000L); // 单位毫秒,5s用于测试
+ args.put("x-message-ttl", 10 * 1000L); // 单位毫秒,10s用于测试
return new Queue(ORDER_CLOSE_DELAY_QUEUE, true, false, false, args);
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/ThreadPoolConfig.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/ThreadPoolConfig.java
index c2ffed7c8..35bc11b36 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/ThreadPoolConfig.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/config/ThreadPoolConfig.java
@@ -25,11 +25,11 @@ public ThreadPoolExecutor threadPoolExecutor() {
int cpuCoreSize = Runtime.getRuntime().availableProcessors();
log.info("当前CPU核心数:{}", cpuCoreSize);
- /**
+ /*
* 计算密集型: 核心线程数=CPU核心 +1 √
* I/O密集型: 核心线程数=2*CPU核心 +1
*/
- Integer corePoolSize = cpuCoreSize + 1;
+ int corePoolSize = cpuCoreSize + 1;
return new ThreadPoolExecutor(
corePoolSize,
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/constant/OrderConstants.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/constant/OrderConstants.java
new file mode 100644
index 000000000..9fb0fcd05
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/constant/OrderConstants.java
@@ -0,0 +1,28 @@
+package com.youlai.mall.oms.constant;
+
+/**
+ * 订单相关常量
+ *
+ * 该接口定义了与订单相关的常量。
+ *
+ * @author haoxr
+ * @since 2.0.0
+ */
+public interface OrderConstants {
+
+ /**
+ * 会员购物车缓存键前缀
+ */
+ String MEMBER_CART_PREFIX = "order:cart:";
+
+ /**
+ * 订单防重提交令牌缓存键前缀
+ */
+ String ORDER_TOKEN_PREFIX = "order:token:";
+
+ /**
+ * 订单锁缓存键前缀
+ */
+ String ORDER_LOCK_PREFIX = "order:lock";
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/admin/OmsOrderController.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/admin/OmsOrderController.java
index 72d68cbd8..970ce5a69 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/admin/OmsOrderController.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/admin/OmsOrderController.java
@@ -1,34 +1,34 @@
package com.youlai.mall.oms.controller.admin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
-import com.youlai.mall.oms.dto.OrderInfoDTO;
-import com.youlai.mall.oms.dto.SeataOrderDTO;
-import com.youlai.mall.oms.common.enums.OrderStatusEnum;
-import com.youlai.mall.oms.pojo.dto.OrderDTO;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
-import com.youlai.mall.oms.service.OrderItemService;
+import com.youlai.mall.oms.model.dto.OrderDTO;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OmsOrderPageVO;
import com.youlai.mall.oms.service.admin.OmsOrderService;
+import com.youlai.mall.oms.service.app.OrderItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
/**
- * 「管理端」订单控制层
+ * 管理端-订单控制层
*
* @author huawei
- * @date 2020/12/30
+ * @since 2.3.0
*/
@Api(tags = "「管理端」订单管理")
@RestController
@@ -42,9 +42,9 @@ public class OmsOrderController {
@ApiOperation("订单分页列表")
@GetMapping
- public PageResult listOrderPages(OrderPageQuery queryParams) {
- IPage result = orderService.listOrderPages(queryParams);
- return PageResult.success(result);
+ public PageResult getOrderPage(OrderPageQuery queryParams) {
+ IPage page = orderService.getOrderPage(queryParams);
+ return PageResult.success(page);
}
@ApiOperation(value = "订单详情")
@@ -65,42 +65,4 @@ public Result getOrderDetail(
orderDTO.setOrder(order).setOrderItems(orderItems);
return Result.success(orderDTO);
}
-
- @ApiOperation(value = "「实验室」获取订单信息", hidden = true)
- @GetMapping("/{orderId}/orderInfo")
- public Result getOrderInfo(
- @ApiParam("订单ID") @PathVariable Long orderId
- ) {
- OrderInfoDTO orderInfo = new OrderInfoDTO();
-
- OmsOrder order = orderService.getById(orderId);
- if (order != null) {
- orderInfo.setOrderSn(order.getOrderSn());
- orderInfo.setStatus(order.getStatus());
- }
- return Result.success(orderInfo);
- }
-
- @ApiOperation(value = "「实验室」订单支付", hidden = true)
- @PutMapping("/{orderId}/_pay")
- public Result payOrder(
- @ApiParam("订单ID") @PathVariable Long orderId,
- @RequestBody SeataOrderDTO orderDTO
- ) {
- Boolean result = orderService.payOrder(orderId, orderDTO);
- return Result.judge(result);
- }
-
- @ApiOperation(value = "「实验室」订单重置", hidden = true)
- @PutMapping("/{orderId}/_reset")
- public Result resetOrder(
- @ApiParam("订单ID") @PathVariable Long orderId
- ) {
- boolean result = orderService.update(new LambdaUpdateWrapper()
- .eq(OmsOrder::getId, orderId)
- .set(OmsOrder::getStatus, OrderStatusEnum.UNPAID.getValue())
- );
- return Result.judge(result);
- }
-
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java
index 9f30109dc..a559659ff 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/CartController.java
@@ -2,8 +2,8 @@
import com.youlai.common.result.Result;
import com.youlai.common.security.util.SecurityUtils;
-import com.youlai.mall.oms.pojo.dto.CartItemDTO;
-import com.youlai.mall.oms.service.CartService;
+import com.youlai.mall.oms.model.dto.CartItemDTO;
+import com.youlai.mall.oms.service.app.CartService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -16,8 +16,7 @@
* 「移动端」购物车接口
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2020-12-30 22:31:10
+ * @since 2020-12-30 22:31:10
*/
@Api(tags = "「移动端」购物车接口")
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/OrderController.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/OrderController.java
index a8e28a64a..924ecc153 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/OrderController.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/OrderController.java
@@ -3,74 +3,68 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.common.result.PageResult;
import com.youlai.common.result.Result;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
-import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
-import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
-import com.youlai.mall.oms.service.OrderService;
+import com.youlai.mall.oms.model.form.OrderPaymentForm;
+import com.youlai.mall.oms.model.form.OrderSubmitForm;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OrderConfirmVO;
+import com.youlai.mall.oms.model.vo.OrderPageVO;
+import com.youlai.mall.oms.service.app.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
- * 「移动端」订单控制层
+ * APP-订单控制层
*
* @author huawei
- * @date 2020/12/30
+ * @since 2020/12/30
*/
-@Api(tags = "「移动端」订单接口")
+@Api(tags = "APP-订单接口")
@RestController
@RequestMapping("/app-api/v1/orders")
@RequiredArgsConstructor
public class OrderController {
- final OrderService orderService;
+ private final OrderService orderService;
- @ApiOperation("分页列表")
+ @ApiOperation("订单分页列表")
@GetMapping
- public PageResult listOrderPages(OrderPageQuery queryParams) {
- IPage result = orderService.listOrderPages(queryParams);
+ public PageResult getOrderPage(OrderPageQuery queryParams) {
+ IPage result = orderService.getOrderPage(queryParams);
return PageResult.success(result);
}
- /**
- * 订单确认 → 进入创建订单页面
- *
- * 获取购买商品明细、用户默认收货地址、防重提交唯一token
- * 进入订单创建页面有两个入口,1:立即购买;2:购物车结算
- *
- * @param skuId 直接购买必填,购物车结算不填
- * @return
- */
- @ApiOperation("订单确认")
- @PostMapping("/_confirm")
- public Result confirmOrder(@RequestParam(required = false) Long skuId) {
+ @ApiOperation(value = "订单确认", notes = "进入订单确认页面有两个入口,1:立即购买;2:购物车结算")
+ @PostMapping("/confirm")
+ public Result confirmOrder(
+ @ApiParam("立即购买必填,购物车结算不填") @RequestParam(required = false) Long skuId
+ ) {
OrderConfirmVO result = orderService.confirmOrder(skuId);
return Result.success(result);
}
@ApiOperation("订单提交")
- @PostMapping("/_submit")
- public Result submitOrder(@RequestBody @Validated OrderSubmitForm orderSubmitForm) {
- OrderSubmitResultVO result = orderService.submitOrder(orderSubmitForm);
- return Result.success(result);
+ @PostMapping("/submit")
+ public Result submitOrder(@Validated @RequestBody OrderSubmitForm submitForm) {
+ String orderSn = orderService.submitOrder(submitForm);
+ return Result.success(orderSn);
}
@ApiOperation("订单支付")
- @PostMapping("/{orderId}/_pay")
- public Result payOrder(@PathVariable Long orderId) {
- boolean result = orderService.payOrder(orderId);
+ @PostMapping("/payment")
+ public Result payOrder(@Validated @RequestBody OrderPaymentForm paymentForm) {
+ boolean result = orderService.payOrder(paymentForm);
return Result.judge(result);
}
@ApiOperation("订单删除")
@DeleteMapping("/{orderId}")
public Result deleteOrder(@PathVariable Long orderId) {
- boolean result = orderService.deleteOrder(orderId);
- return Result.judge(result);
+ boolean deleted = orderService.deleteOrder(orderId);
+ return Result.judge(deleted);
}
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/WxPayCallbackController.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/WxPayCallbackController.java
index 206ab52e4..2ac8e435f 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/WxPayCallbackController.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/controller/app/WxPayCallbackController.java
@@ -3,8 +3,8 @@
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
-import com.youlai.mall.oms.pojo.vo.WxPayResponseVO;
-import com.youlai.mall.oms.service.OrderService;
+import com.youlai.mall.oms.model.vo.WxPayResponseVO;
+import com.youlai.mall.oms.service.app.OrderService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/CartConverter.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/CartConverter.java
new file mode 100644
index 000000000..869c7e610
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/CartConverter.java
@@ -0,0 +1,24 @@
+
+package com.youlai.mall.oms.converter;
+
+import com.youlai.mall.oms.model.dto.CartItemDTO;
+import com.youlai.mall.pms.pojo.dto.SkuInfoDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+
+/**
+ * 购物车对象转化器
+ *
+ * @author haoxr
+ * @since 2.0.0
+ */
+@Mapper(componentModel = "spring")
+public interface CartConverter {
+
+ @Mappings({
+ @Mapping(target = "skuId", source = "id"),
+ })
+ CartItemDTO sku2CartItem(SkuInfoDTO skuInfo);
+
+}
\ No newline at end of file
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderConverter.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderConverter.java
index c93ba60b2..43dc9f908 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderConverter.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderConverter.java
@@ -1,25 +1,81 @@
package com.youlai.mall.oms.converter;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.youlai.mall.oms.model.bo.OrderBO;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.form.OrderSubmitForm;
+import com.youlai.mall.oms.model.vo.OmsOrderPageVO;
+import com.youlai.mall.oms.model.vo.OrderPageVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
- * 订单转化器
+ * 订单对象转化器
*
* @author haoxr
- * @date 2022/12/21
+ * @since 2.0.0
*/
@Mapper(componentModel = "spring")
public interface OrderConverter {
@Mappings({
@Mapping(target = "orderSn", source = "orderToken"),
- @Mapping(target = "totalQuantity", expression = "java(orderSubmitForm.getOrderItems().stream().map(OrderItemDTO::getCount).reduce(0, Integer::sum))"),
- @Mapping(target = "totalAmount", expression = "java(orderSubmitForm.getOrderItems().stream().map(item -> item.getPrice() * item.getCount()).reduce(0L, Long::sum))"),
+ @Mapping(target = "totalQuantity",
+ expression = "java(orderSubmitForm.getOrderItems().stream().map(OrderSubmitForm.OrderItem::getQuantity).reduce(0, Integer::sum))"),
+ @Mapping(target = "totalAmount",
+ expression = "java(orderSubmitForm.getOrderItems().stream().map(item -> item.getPrice() * item.getQuantity()).reduce(0L, Long::sum))"),
+ @Mapping(target = "source", expression = "java(orderSubmitForm.getOrderSource().getValue())"),
})
- OmsOrder submitForm2Entity(OrderSubmitForm orderSubmitForm);
+ OmsOrder form2Entity(OrderSubmitForm orderSubmitForm);
+
+ @Mappings({
+ @Mapping(
+ target = "paymentMethodLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getPaymentMethod(), com.youlai.mall.oms.enums.PaymentMethodEnum.class))"
+ ),
+ @Mapping(
+ target = "sourceLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getSource(), com.youlai.mall.oms.enums.OrderSourceEnum.class))"
+ ),
+ @Mapping(
+ target = "statusLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getStatus(), com.youlai.mall.oms.enums.OrderStatusEnum.class))"
+ ),
+ @Mapping(
+ target = "orderItems",
+ source = "orderItems"
+ )
+ })
+ OmsOrderPageVO toVoPage(OrderBO bo);
+
+ Page toVoPage(Page boPage);
+
+ OmsOrderPageVO.OrderItem toVoPageOrderItem(OrderBO.OrderItem orderItem);
+
+
+ @Mappings({
+ @Mapping(
+ target = "paymentMethodLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getPaymentMethod(), com.youlai.mall.oms.enums.PaymentMethodEnum.class))"
+ ),
+ @Mapping(
+ target = "sourceLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getSource(), com.youlai.mall.oms.enums.OrderSourceEnum.class))"
+ ),
+ @Mapping(
+ target = "statusLabel",
+ expression = "java(com.youlai.common.base.IBaseEnum.getLabelByValue(bo.getStatus(), com.youlai.mall.oms.enums.OrderStatusEnum.class))"
+ ),
+ @Mapping(
+ target = "orderItems",
+ source = "orderItems"
+ )
+ })
+ OrderPageVO toVoPageForApp(OrderBO bo);
+
+ Page toVoPageForApp(Page boPage);
+
+ OrderPageVO.OrderItem toVoPageOrderItemForApp(OrderBO.OrderItem orderItem);
}
\ No newline at end of file
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderItemConverter.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderItemConverter.java
index 700315c5e..6841b75a0 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderItemConverter.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderItemConverter.java
@@ -1,40 +1,29 @@
package com.youlai.mall.oms.converter;
-import cn.hutool.core.collection.CollectionUtil;
-import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.form.OrderSubmitForm;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
-import java.util.Collections;
import java.util.List;
-import java.util.stream.Collectors;
/**
- * 订单对象转化器
+ * 订单商品明细对象转化器
*
* @author haoxr
- * @date 2022/12/21
+ * @since 2.0.0
*/
@Mapper(componentModel = "spring")
public interface OrderItemConverter {
@Mappings({
- @Mapping(target = "totalAmount", expression = "java(dto.getPrice() * dto.getCount())"),
- @Mapping(target = "orderId", source = "orderId"),
+ @Mapping(target = "totalAmount", expression = "java(item.getPrice() * item.getQuantity())"),
})
- OmsOrderItem dto2Entity(Long orderId, OrderItemDTO dto);
+ OmsOrderItem item2Entity(OrderSubmitForm.OrderItem item);
+ List item2Entity(List list);
- default List dto2Entity(Long orderId, List list) {
- if (CollectionUtil.isNotEmpty(list)) {
- List entities = list.stream().map(dto -> dto2Entity(orderId, dto))
- .collect(Collectors.toList());
- return entities;
- }
- return Collections.EMPTY_LIST;
- }
}
\ No newline at end of file
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderSourceTypeEnum.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderSourceEnum.java
similarity index 51%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderSourceTypeEnum.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderSourceEnum.java
index 8b8a631b9..0c2ec8227 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderSourceTypeEnum.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderSourceEnum.java
@@ -1,23 +1,22 @@
-package com.youlai.mall.oms.common.enums;
+package com.youlai.mall.oms.enums;
import com.youlai.common.base.IBaseEnum;
import lombok.Getter;
/**
- * 订单来源类型枚举
+ * 订单来源枚举
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2021/1/16
+ * @since 2021/1/16
*/
-public enum OrderSourceTypeEnum implements IBaseEnum {
+public enum OrderSourceEnum implements IBaseEnum {
APP(1, "APP"), // APP订单
- PC(2, "PC"), // PC订单
+ WEB(2, "WEB"), // 网页
;
- OrderSourceTypeEnum(Integer value, String label) {
+ OrderSourceEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderStatusEnum.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderStatusEnum.java
similarity index 88%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderStatusEnum.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderStatusEnum.java
index 6a790c861..4d614ab07 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/OrderStatusEnum.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderStatusEnum.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.common.enums;
+package com.youlai.mall.oms.enums;
import com.youlai.common.base.IBaseEnum;
import lombok.Getter;
@@ -7,7 +7,7 @@
* 订单状态枚举
*
* @author haoxr
- * @date 2022/11/28
+ * @since 2.0.0
*/
public enum OrderStatusEnum implements IBaseEnum {
@@ -34,8 +34,7 @@ public enum OrderStatusEnum implements IBaseEnum {
/**
* 售后中
*/
- SERVICING(5, "售后中")
- ;
+ SERVICING(5, "售后中");
OrderStatusEnum(Integer value, String label) {
this.value = value;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/PayTypeEnum.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/PaymentMethodEnum.java
similarity index 63%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/PayTypeEnum.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/PaymentMethodEnum.java
index b4f1b163f..62480ef04 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/common/enums/PayTypeEnum.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/PaymentMethodEnum.java
@@ -1,24 +1,23 @@
-package com.youlai.mall.oms.common.enums;
+package com.youlai.mall.oms.enums;
import com.youlai.common.base.IBaseEnum;
import lombok.Getter;
/**
- * 订单支付类型枚举
+ * 订单支付方式枚举
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2021/1/16
+ * @since 2.0.0
*/
-public enum PayTypeEnum implements IBaseEnum {
+public enum PaymentMethodEnum implements IBaseEnum {
WX_JSAPI(1, "微信JSAPI支付"),
ALIPAY(2, "支付宝支付"),
BALANCE(3, "会员余额支付"),
WX_APP(4, "微信APP支付");
- PayTypeEnum(int value, String label) {
+ PaymentMethodEnum(int value, String label) {
this.value = value;
this.label = label;
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OmsCloseListener.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OmsCloseListener.java
new file mode 100644
index 000000000..71c862564
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OmsCloseListener.java
@@ -0,0 +1,92 @@
+package com.youlai.mall.oms.listener;
+
+
+import com.rabbitmq.client.Channel;
+import com.youlai.mall.oms.service.app.OrderService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.*;
+
+import java.io.IOException;
+
+/**
+ * 订单超时未支付取消
+ *
+ * @author haoxr
+ * @since 2.0.0
+ */
+//@Component // 注解绑定死信队列无效暂不使用
+@RequiredArgsConstructor
+@Slf4j
+public class OmsCloseListener {
+ private final OrderService orderService;
+
+ // 延迟队列
+ private static final String ORDER_CLOSE_DELAY_QUEUE = "order.close.delay.queue";
+ private static final String ORDER_EXCHANGE = "order.exchange";
+ private static final String ORDER_CLOSE_DELAY_ROUTING_KEY = "order.close.delay";
+
+ // 关单队列
+ private static final String ORDER_ClOSE_QUEUE = "order.close.queue";
+ private static final String ORDER_DLX_EXCHANGE = "order.dlx.exchange";
+ private static final String ORDER_ClOSE_ROUTING_KEY = "order.close";
+
+ /**
+ * 延迟队列
+ *
+ * 超过 x-message-ttl 设定时间未被消费转发到死信交换机
+ */
+ @RabbitListener(bindings =
+ {
+ @QueueBinding(
+ value = @Queue(value = ORDER_CLOSE_DELAY_QUEUE,
+ arguments =
+ {
+ @Argument(name = "x-dead-letter-exchange", value = ORDER_DLX_EXCHANGE),
+ @Argument(name = "x-dead-letter-routing-key", value = ORDER_ClOSE_ROUTING_KEY),
+ @Argument(name = "x-message-ttl", value = "5000", type = "java.lang.Long") // 超时10s
+ }),
+ exchange = @Exchange(value = ORDER_EXCHANGE),
+ key = {ORDER_CLOSE_DELAY_ROUTING_KEY}
+ )
+ }, ackMode = "MANUAL" // 手动ACK
+ )
+ public void handleOrderCloseDelay(String orderSn, Message message, Channel channel) throws IOException {
+ log.info("订单({})延时队列,10s内如果未支付将路由到关单队列", orderSn);
+ long deliveryTag = message.getMessageProperties().getDeliveryTag();
+ /**
+ * @param deliveryTag 消息序号
+ * @param multiple 是否批量处理(true:批量拒绝所有小于deliveryTag的消息;false:只处理当前消息)
+ * @param requeue 拒绝是否重新入队列 (true:消息重新入队;false:禁止消息重新入队)
+ */
+ //channel.basicReject(deliveryTag, false); // 等于 channel.basicReject(deliveryTag, false);
+ }
+
+ /**
+ * 关单队列
+ */
+ @RabbitListener(bindings = {
+ @QueueBinding(
+ value = @Queue(value = ORDER_ClOSE_QUEUE, durable = "true"),
+ exchange = @Exchange(value = ORDER_DLX_EXCHANGE),
+ key = {ORDER_ClOSE_ROUTING_KEY}
+ )
+ }, ackMode = "MANUAL" // 手动ACK
+ )
+ @RabbitListener(queues = "order.close.queue")
+ public void handleOrderClose(String orderSn, Message message, Channel channel) throws IOException {
+
+ long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 消息序号
+
+ log.info("订单({})超时未支付,系统自动关闭订单", orderSn);
+ try {
+ orderService.closeOrder(orderSn);
+ channel.basicAck(deliveryTag, false);
+ } catch (Exception e) {
+
+ // TODO 关单失败,入定时任务表
+ channel.basicReject(deliveryTag, false);
+ }
+ }
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OrderCloseListener.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OrderCloseListener.java
index e2531ab0c..c208e1c98 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OrderCloseListener.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/listener/OrderCloseListener.java
@@ -1,92 +1,54 @@
package com.youlai.mall.oms.listener;
-
import com.rabbitmq.client.Channel;
-import com.youlai.mall.oms.service.OrderService;
+import com.youlai.mall.oms.service.app.OrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.*;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Component;
import java.io.IOException;
/**
- * 订单超时未支付取消
+ * 订单超时未支付系统自动取消监听器
*
* @author haoxr
- * @date 2022/12/19
+ * @since 2022/12/19
*/
-//@Component
+@Component
@RequiredArgsConstructor
@Slf4j
public class OrderCloseListener {
private final OrderService orderService;
+ private final RabbitTemplate rabbitTemplate;
- // 延迟队列
- private static final String ORDER_CLOSE_DELAY_QUEUE = "order.close.delay.queue";
- private static final String ORDER_EXCHANGE = "order.exchange";
- private static final String ORDER_CLOSE_DELAY_ROUTING_KEY = "order.close.delay.routing.key";
-
- // 关单队列
- private static final String ORDER_ClOSE_QUEUE = "order.close.queue";
- private static final String ORDER_DLX_EXCHANGE = "order.dlx.exchange";
- private static final String ORDER_ClOSE_ROUTING_KEY = "order.close.routing.key";
-
- /**
- * 延迟队列
- *
- * 超过 x-message-ttl 设定时间未被消费转发到死信交换机
- */
- @RabbitListener(bindings =
- {
- @QueueBinding(
- value = @Queue(value = ORDER_CLOSE_DELAY_QUEUE,
- arguments =
- {
- @Argument(name = "x-dead-letter-exchange", value = ORDER_DLX_EXCHANGE),
- @Argument(name = "x-dead-letter-routing-key", value = ORDER_ClOSE_ROUTING_KEY),
- @Argument(name = "x-message-ttl", value = "5000", type = "java.lang.Long") // 超时10s
- }),
- exchange = @Exchange(value = ORDER_EXCHANGE),
- key = {ORDER_CLOSE_DELAY_ROUTING_KEY}
- )
- }, ackMode = "MANUAL" // 手动ACK
- )
- public void handleOrderCloseDelay(String orderSn, Message message, Channel channel) throws IOException {
- log.info("订单【{}】延时队列,10s内如果未支付将路由到关单队列", orderSn);
- long deliveryTag = message.getMessageProperties().getDeliveryTag();
- /**
- * @param deliveryTag 消息序号
- * @param multiple 是否批量处理(true:批量拒绝所有小于deliveryTag的消息;false:只处理当前消息)
- * @param requeue 拒绝是否重新入队列 (true:消息重新入队;false:禁止消息重新入队)
- */
- //channel.basicReject(deliveryTag, false); // 等于 channel.basicReject(deliveryTag, false);
- }
-
- /**
- * 关单队列
- */
- @RabbitListener(bindings = {
- @QueueBinding(
- value = @Queue(value = ORDER_ClOSE_QUEUE, durable = "true"),
- exchange = @Exchange(value = ORDER_DLX_EXCHANGE),
- key = {ORDER_ClOSE_ROUTING_KEY}
- )
- }, ackMode = "MANUAL" // 手动ACK
- )
@RabbitListener(queues = "order.close.queue")
- public void handleOrderClose(String orderSn, Message message, Channel channel) throws IOException {
+ public void closeOrder(String orderSn, Message message, Channel channel) {
- long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 消息序号
+ long deliveryTag = message.getMessageProperties().getDeliveryTag(); // 消息序号(消息队列中的位置)
- log.info("订单 【{}】 超时未支付,系统自动关闭订单", orderSn);
+ log.info("订单({})超时未支付,系统自动关闭订单", orderSn);
try {
- orderService.closeOrder(orderSn);
- channel.basicAck(deliveryTag, false);
+ boolean closeOrderResult = orderService.closeOrder(orderSn);
+ log.info("关单结果:{}", closeOrderResult);
+ if (closeOrderResult) {
+ // 关单成功:释放库存
+ rabbitTemplate.convertAndSend("stock.exchange", "stock.unlock", orderSn);
+ } else {
+ // 关单失败:订单已被关闭,手动ACK确认并从队列移除消息
+ channel.basicAck(deliveryTag, false); // false: 不批量确认,仅确认当前单个消息
+ }
} catch (Exception e) {
+ // 关单异常:拒绝消息并重新入队
+ try {
+ channel.basicReject(deliveryTag, true); // true: 重新放回队列
+ // channel.basicReject(deliveryTag, false); // false: 直接丢弃消息 (TODO 定时任务补偿)
+ } catch (IOException ex) {
+ log.error("订单({})关闭失败,原因:{}", orderSn, ex.getMessage());
+ }
- // TODO 关单失败,入定时任务表
- channel.basicReject(deliveryTag, false);
}
}
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderDeliveryMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderDeliveryMapper.java
index 814f75576..106e2d0b5 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderDeliveryMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderDeliveryMapper.java
@@ -1,6 +1,6 @@
package com.youlai.mall.oms.mapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
+import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderItemMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderItemMapper.java
index 4aa8e12eb..40461f845 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderItemMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderItemMapper.java
@@ -1,7 +1,7 @@
package com.youlai.mall.oms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
import org.apache.ibatis.annotations.Mapper;
/**
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderLogMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderLogMapper.java
index c3c273bf0..3f9323502 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderLogMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderLogMapper.java
@@ -1,6 +1,6 @@
package com.youlai.mall.oms.mapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
+import com.youlai.mall.oms.model.entity.OmsOrderLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderMapper.java
index 3ee4fa55f..e7c02049b 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderMapper.java
@@ -2,18 +2,18 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
+import com.youlai.mall.oms.model.bo.OrderBO;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
- * 订单详情表
+ * 订单数据访问层
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2020-12-30 22:31:10
+ * @since 2020-12-30 22:31:10
*/
@Mapper
public interface OrderMapper extends BaseMapper {
@@ -25,5 +25,5 @@ public interface OrderMapper extends BaseMapper {
* @param queryParams
* @return
*/
- List listOrderPages(Page page, OrderPageQuery queryParams);
+ Page getOrderPage(Page page, OrderPageQuery queryParams);
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderPayMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderPayMapper.java
index c5477b748..c82f5bbd3 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderPayMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderPayMapper.java
@@ -1,6 +1,6 @@
package com.youlai.mall.oms.mapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderPay;
+import com.youlai.mall.oms.model.entity.OmsOrderPay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderSettingMapper.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderSettingMapper.java
index 4daf8e11a..9edb832c7 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderSettingMapper.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderSettingMapper.java
@@ -1,6 +1,6 @@
package com.youlai.mall.oms.mapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
+import com.youlai.mall.oms.model.entity.OmsOrderSetting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/bo/OrderBO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/bo/OrderBO.java
new file mode 100644
index 000000000..dd0d83d0b
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/bo/OrderBO.java
@@ -0,0 +1,124 @@
+package com.youlai.mall.oms.model.bo;
+
+import com.youlai.common.base.BaseEntity;
+import com.youlai.mall.oms.enums.OrderSourceEnum;
+import com.youlai.mall.oms.enums.OrderStatusEnum;
+import com.youlai.mall.oms.enums.PaymentMethodEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 订单业务对象
+ *
+ * @author huawei
+ * @since 2.0.0
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class OrderBO extends BaseEntity {
+
+ /**
+ * 订单ID
+ */
+ private Long id;
+ /**
+ * 订单号
+ */
+ private String orderSn;
+ /**
+ * 订单总额(分)
+ */
+ private Long totalAmount;
+ /**
+ * 商品总数
+ */
+ private Integer totalQuantity;
+
+ /**
+ * 订单来源 {@link OrderSourceEnum}
+ */
+ private Integer source;
+
+ /**
+ * 订单状态 {@link OrderStatusEnum}
+ */
+ private Integer status;
+
+ /**
+ * 应付总额(分)
+ */
+ private Long paymentAmount;
+
+ /**
+ * 支付方式 {@link PaymentMethodEnum}
+ */
+ private Integer paymentMethod;
+
+ /**
+ * 订单创建时间
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 订单备注
+ */
+ private String remark;
+
+ /**
+ * 订单商品明细列表
+ */
+ private List orderItems;
+
+ @Data
+ public static class OrderItem{
+
+ private Long id;
+
+ /**
+ * 订单ID
+ */
+ private Long orderId;
+
+ /**
+ * 规格ID
+ */
+ private Long skuId;
+
+ /**
+ * SKU编号
+ */
+ private String skuSn;
+
+ /**
+ * 商品名称
+ */
+ private String skuName;
+
+ /**
+ * 商品sku图片
+ */
+ private String picUrl;
+
+ /**
+ * 商品单价(单位:分)
+ */
+ private Long price;
+
+ /**
+ * 商品数量
+ */
+ private Integer quantity;
+
+ /**
+ * 商品总金额(单位:分)(单价*数量)
+ */
+ private Long totalAmount;
+
+
+ }
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/CartItemDTO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/CartItemDTO.java
similarity index 95%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/CartItemDTO.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/CartItemDTO.java
index c31468a01..675a3c341 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/CartItemDTO.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/CartItemDTO.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.dto;
+package com.youlai.mall.oms.model.dto;
import lombok.*;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderDTO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderDTO.java
new file mode 100644
index 000000000..896676a9b
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderDTO.java
@@ -0,0 +1,18 @@
+package com.youlai.mall.oms.model.dto;
+
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+public class OrderDTO {
+
+ private OmsOrder order;
+
+ private List orderItems;
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderItemDTO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderItemDTO.java
similarity index 86%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderItemDTO.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderItemDTO.java
index 274eb3575..f99d4302c 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderItemDTO.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderItemDTO.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.dto;
+package com.youlai.mall.oms.model.dto;
import lombok.*;
@@ -6,7 +6,7 @@
* 订单商品
*
* @author haoxr
- * @date 2022/12/21
+ * @since 2.0.0
*/
@Data
public class OrderItemDTO {
@@ -44,5 +44,5 @@ public class OrderItemDTO {
/**
* 订单商品数量
*/
- private Integer count;
+ private Integer quantity;
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrder.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrder.java
similarity index 83%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrder.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrder.java
index ef759cce9..af09e901e 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrder.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrder.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -6,7 +6,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.youlai.common.base.BaseEntity;
import lombok.Data;
-import lombok.experimental.Accessors;
+import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
@@ -15,16 +15,13 @@
* 订单详情表
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2020-12-30 22:31:10
+ * @since 2.0.0
*/
+@EqualsAndHashCode(callSuper = true)
@Data
-@Accessors(chain = true)
public class OmsOrder extends BaseEntity {
- /**
- * id
- */
+
@TableId(type = IdType.AUTO)
private Long id;
/**
@@ -42,7 +39,7 @@ public class OmsOrder extends BaseEntity {
/**
* 订单来源(0-PC订单;1-app订单)
*/
- private Integer sourceType;
+ private Integer source;
/**
* 订单状态(1-待付款;2-待发货;3-已发货;4-已完成;5-已关闭;6-已取消;)
@@ -71,15 +68,15 @@ public class OmsOrder extends BaseEntity {
/**
* 应付总额(分)
*/
- private Long payAmount;
+ private Long paymentAmount;
/**
* 支付时间
*/
- private Date payTime;
+ private Date paymentTime;
/**
- * 支付方式【1->微信jsapi;2->支付宝;3->余额; 4->微信app;】
+ * 支付方式【1->微信jsapi;2->支付宝;3->余额;4->微信app;】
*/
- private Integer payType;
+ private Integer paymentMethod;
/**
* 商户订单号
*/
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderDelivery.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderDelivery.java
similarity index 97%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderDelivery.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderDelivery.java
index 6a33b62ba..398f30c10 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderDelivery.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderDelivery.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderItem.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderItem.java
similarity index 80%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderItem.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderItem.java
index dee4fce57..2a4d17aec 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderItem.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderItem.java
@@ -1,20 +1,19 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.youlai.common.base.BaseEntity;
import lombok.Data;
-import lombok.experimental.Accessors;
+import lombok.EqualsAndHashCode;
/**
- * 订单明细表
+ * 订单商品明细
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2020-12-30 22:31:10
+ * @since 2020-12-30
*/
+@EqualsAndHashCode(callSuper = true)
@Data
-@Accessors(chain = true)
public class OmsOrderItem extends BaseEntity {
@TableId(type = IdType.AUTO)
@@ -36,7 +35,7 @@ public class OmsOrderItem extends BaseEntity {
private Long skuId;
/**
- * SKU编号
+ * SKU 编号
*/
private String skuSn;
@@ -58,7 +57,7 @@ public class OmsOrderItem extends BaseEntity {
/**
* 商品数量
*/
- private Integer count;
+ private Integer quantity;
/**
* 商品总金额(单位:分)
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderLog.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderLog.java
similarity index 94%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderLog.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderLog.java
index 9797dccb2..2d2308c9d 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderLog.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderLog.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderPay.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderPay.java
similarity index 96%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderPay.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderPay.java
index 4a0998170..2353ae379 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderPay.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderPay.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderSetting.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderSetting.java
similarity index 96%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderSetting.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderSetting.java
index 1ad1571cc..a27ffcffb 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/entity/OmsOrderSetting.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderSetting.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.oms.pojo.entity;
+package com.youlai.mall.oms.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderPaymentForm.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderPaymentForm.java
new file mode 100644
index 000000000..d2b8c6541
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderPaymentForm.java
@@ -0,0 +1,36 @@
+package com.youlai.mall.oms.model.form;
+
+import com.youlai.mall.oms.enums.PaymentMethodEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 订单支付表单对象
+ *
+ * @author haoxr
+ * @since 2.3.0
+ */
+@Data
+@ApiModel("订单支付表单对象")
+public class OrderPaymentForm {
+
+ @ApiModelProperty("订单编号")
+ private String orderSn;
+
+ @ApiModelProperty("小程序 AppId")
+ String appId;
+
+ @ApiModelProperty("支付方式")
+ private PaymentMethodEnum paymentMethod;
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderSubmitForm.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderSubmitForm.java
new file mode 100644
index 000000000..d9b05ce8f
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderSubmitForm.java
@@ -0,0 +1,99 @@
+package com.youlai.mall.oms.model.form;
+
+import com.youlai.mall.oms.enums.OrderSourceEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 订单提交表单对象
+ *
+ * @author haoxr
+ * @since 2.0.0
+ */
+@Data
+@ToString
+public class OrderSubmitForm {
+
+ @ApiModelProperty("订单确认页面签发的令牌(防止重复提交)")
+ @NotBlank(message = "订单令牌不能为空")
+ private String orderToken;
+
+ @ApiModelProperty("订单来源")
+ @NotNull(message = "订单来源不能为空")
+ private OrderSourceEnum orderSource;
+
+ @ApiModelProperty("订单商品明细")
+ @NotEmpty(message = "订单商品不能为空")
+ private List orderItems;
+
+ @ApiModelProperty("应付金额(单位:分)")
+ @NotNull(message = "应付金额不能为空")
+ private Long paymentAmount;
+
+ @ApiModelProperty("收获地址")
+ @NotNull(message = "收货地址不能为空")
+ private ShippingAddress shippingAddress;
+
+ @ApiModelProperty("订单备注")
+ @Size(max = 500, message = "订单备注长度不能超过500")
+ private String remark;
+
+ @ApiModel("收获地址")
+ @Data
+ public static class ShippingAddress {
+
+ @ApiModelProperty("收货人姓名")
+ private String consigneeName;
+
+ @ApiModelProperty("收货人手机号")
+ private String consigneeMobile;
+
+ @ApiModelProperty("省份")
+ private String province;
+
+ @ApiModelProperty("城市")
+ private String city;
+
+ @ApiModelProperty("区域")
+ private String district;
+
+ @ApiModelProperty("详细地址")
+ private String detailAddress;
+ }
+
+ @ApiModel("订单商品")
+ @Data
+ public static class OrderItem {
+
+ @ApiModelProperty(value = "SKU ID")
+ private Long skuId;
+
+ @ApiModelProperty(value = "SKU 编号")
+ private String skuSn;
+
+ @ApiModelProperty(value = "SKU 名称")
+ private String skuName;
+
+ @ApiModelProperty(value = "商品图片URL")
+ private String picUrl;
+
+ @ApiModelProperty(value = "商品价格(单位:分)")
+ private Long price;
+
+ @ApiModelProperty(value = "商品名称")
+ private String spuName;
+
+ @ApiModelProperty(value = "商品数量")
+ private Integer quantity;
+ }
+
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/query/OrderPageQuery.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/query/OrderPageQuery.java
new file mode 100644
index 000000000..aa3366307
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/query/OrderPageQuery.java
@@ -0,0 +1,49 @@
+package com.youlai.mall.oms.model.query;
+
+import com.youlai.common.base.BasePageQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 订单分页查询对象
+ *
+ * @author haoxr
+ * @since 2.3.0
+ */
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("订单分页查询对象")
+@Data
+public class OrderPageQuery extends BasePageQuery {
+
+ /**
+ * 关键字(订单编号/商品名称/会员姓名/会员手机号)
+ */
+ @ApiModelProperty("关键字(订单编号/商品名称/会员姓名/会员手机号)")
+ private String keywords;
+
+ /**
+ * 订单状态
+ */
+ @ApiModelProperty("订单状态")
+ private Integer status;
+
+ /**
+ * 开始时间
+ */
+ @ApiModelProperty(value = "开始时间(yyyy-MM-dd)",example = "2023-10-01")
+ @DateTimeFormat(pattern = "yyyy-MM-dd 00:00:00") // DateTimeFormat 用于将查询参数或表单参数转换为日期类型
+ private Date beginDate;
+
+ /**
+ * 截止时间
+ */
+ @ApiModelProperty(value = "截止时间(yyyy-MM-dd)",example = "2025-10-01")
+ @DateTimeFormat(pattern = "yyyy-MM-dd 23:59:59")
+ private Date endDate;
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OmsOrderPageVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OmsOrderPageVO.java
new file mode 100644
index 000000000..1f8613ca1
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OmsOrderPageVO.java
@@ -0,0 +1,83 @@
+package com.youlai.mall.oms.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Admin-订单分页视图对象
+ *
+ * @author haoxr
+ * @since 2.3.0
+ */
+@ApiModel("Admin-订单分页视图对象")
+@Data
+public class OmsOrderPageVO {
+
+ @ApiModelProperty("订单ID")
+ private Long id;
+
+ @ApiModelProperty("订单编号")
+ private String orderSn;
+
+ @ApiModelProperty("订单总金额(分)")
+ private BigDecimal totalAmount;
+
+ @ApiModelProperty("订单总金额(分)")
+ private Long paymentAmount;
+
+ @ApiModelProperty("支付方式标签")
+ private String paymentMethodLabel;
+
+ @ApiModelProperty("订单状态")
+ private Integer status;
+
+ @ApiModelProperty("订单状态标签")
+ private String statusLabel;
+
+ @ApiModelProperty("商品总数")
+ private Integer totalQuantity;
+
+ @ApiModelProperty("订单创建时间")
+ @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty("订单来源标签")
+ private String sourceLabel;
+
+ @ApiModelProperty("订单备注")
+ private String remark;
+
+ @ApiModelProperty("订单商品集合")
+ private List orderItems;
+
+ @ApiModel("订单商品明细")
+ @Data
+ public static class OrderItem {
+
+ @ApiModelProperty("商品ID")
+ private Long skuId;
+
+ @ApiModelProperty("商品规格名称")
+ private String skuName;
+
+ @ApiModelProperty("图片地址")
+ private String picUrl;
+
+ @ApiModelProperty("商品价格")
+ private Long price;
+
+ @ApiModelProperty("商品数量")
+ private Integer quantity;
+
+ @ApiModelProperty("商品总金额(单位:分)")
+ private Long totalAmount;
+
+ }
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderConfirmVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderConfirmVO.java
similarity index 50%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderConfirmVO.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderConfirmVO.java
index cbca5eec3..fa7a5c002 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderConfirmVO.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderConfirmVO.java
@@ -1,7 +1,6 @@
-package com.youlai.mall.oms.pojo.vo;
+package com.youlai.mall.oms.model.vo;
-import com.youlai.common.base.BaseVO;
-import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
+import com.youlai.mall.oms.model.dto.OrderItemDTO;
import com.youlai.mall.ums.dto.MemberAddressDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -9,17 +8,28 @@
import java.util.List;
-
-@ApiModel("订单确认视图层对象")
+/**
+ * 订单确认响应对象
+ */
+@ApiModel("订单确认响应对象")
@Data
public class OrderConfirmVO {
- @ApiModelProperty("订单token")
+ /**
+ * 订单防重提交令牌
+ */
+ @ApiModelProperty("订单防重提交令牌")
private String orderToken;
- @ApiModelProperty("订单明细")
+ /**
+ * 订单商品
+ */
+ @ApiModelProperty("订单商品")
private List orderItems;
+ /**
+ * 会员收货地址列表
+ */
@ApiModelProperty("会员收获地址列表")
private List addresses;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderPageVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderPageVO.java
new file mode 100644
index 000000000..36c71a222
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderPageVO.java
@@ -0,0 +1,83 @@
+package com.youlai.mall.oms.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * App-订单分页视图对象
+ *
+ * @author haoxr
+ * @since 2.3.0
+ */
+@ApiModel("App-订单分页视图对象")
+@Data
+public class OrderPageVO {
+
+ @ApiModelProperty("订单ID")
+ private Long id;
+
+ @ApiModelProperty("订单编号")
+ private String orderSn;
+
+ @ApiModelProperty("订单总金额(分)")
+ private BigDecimal totalAmount;
+
+ @ApiModelProperty("订单总金额(分)")
+ private Long paymentAmount;
+
+ @ApiModelProperty("支付方式标签")
+ private String paymentMethodLabel;
+
+ @ApiModelProperty("订单状态")
+ private Integer status;
+
+ @ApiModelProperty("订单状态标签")
+ private String statusLabel;
+
+ @ApiModelProperty("商品总数")
+ private Integer totalQuantity;
+
+ @ApiModelProperty("订单创建时间")
+ @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty("订单来源标签")
+ private String sourceLabel;
+
+ @ApiModelProperty("订单备注")
+ private String remark;
+
+ @ApiModelProperty("订单商品集合")
+ private List orderItems;
+
+ @ApiModel("订单商品明细")
+ @Data
+ public static class OrderItem {
+
+ @ApiModelProperty("商品ID")
+ private Long skuId;
+
+ @ApiModelProperty("商品规格名称")
+ private String skuName;
+
+ @ApiModelProperty("图片地址")
+ private String picUrl;
+
+ @ApiModelProperty("商品价格")
+ private Long price;
+
+ @ApiModelProperty("商品数量")
+ private Integer quantity;
+
+ @ApiModelProperty("商品总金额(单位:分)")
+ private Long totalAmount;
+
+ }
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/WxPayResponseVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/WxPayResponseVO.java
similarity index 79%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/WxPayResponseVO.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/WxPayResponseVO.java
index 5714fbd29..8de70ac34 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/WxPayResponseVO.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/WxPayResponseVO.java
@@ -1,6 +1,5 @@
-package com.youlai.mall.oms.pojo.vo;
+package com.youlai.mall.oms.model.vo;
-import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderDTO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderDTO.java
deleted file mode 100644
index 0a47a8d4c..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/dto/OrderDTO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.youlai.mall.oms.pojo.dto;
-
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
-import com.youlai.mall.ums.dto.MemberDTO;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.util.List;
-
-/**
- * @author huawei
- * @desc
- * @email huawei_code@163.com
- * @date 2021/1/19
- */
-@Data
-@Accessors(chain = true)
-public class OrderDTO {
-
- private OmsOrder order;
-
- private List orderItems;
-
- private MemberDTO member;
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/form/OrderSubmitForm.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/form/OrderSubmitForm.java
deleted file mode 100644
index 0fcb4d468..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/form/OrderSubmitForm.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.youlai.mall.oms.pojo.form;
-
-import com.youlai.mall.oms.common.enums.OrderSourceTypeEnum;
-import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
-import com.youlai.mall.ums.dto.MemberAddressDTO;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.ToString;
-
-import javax.validation.constraints.Size;
-import java.util.List;
-
-/**
- * 订单提交表单对象
- *
- * @author huawei
- * @email huawei_code@163.com
- * @date 2021/1/16
- */
-@Data
-@ToString
-public class OrderSubmitForm {
-
-
- /**
- * 订单来源
- *
- * @see OrderSourceTypeEnum
- */
- @ApiModelProperty("订单来源")
- private Integer sourceType;
-
- @ApiModelProperty("提交订单确认页面签发的令牌(防止订单重复提交,订单提交成功转为订单编号)")
- private String orderToken;
-
- @ApiModelProperty("订单总金额-用于验价(单位:分)")
- private Long totalAmount;
-
- @ApiModelProperty("支付金额(单位:分)")
- private Long payAmount;
-
- @ApiModelProperty("订单的商品明细")
- private List orderItems;
-
- @ApiModelProperty("订单备注")
- @Size(max = 500, message = "订单备注长度不能超过500")
- private String remark;
-
- @ApiModelProperty("优惠券ID")
- private String couponId;
-
- @ApiModelProperty("收获地址")
- private MemberAddressDTO deliveryAddress;
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/query/OrderPageQuery.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/query/OrderPageQuery.java
deleted file mode 100644
index a433244b4..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/query/OrderPageQuery.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.youlai.mall.oms.pojo.query;
-
-import com.youlai.common.base.BasePageQuery;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-
-/**
- * @author haoxr
- * @date 2022/2/1 19:14
- */
-@Data
-@ApiModel("订单分页查询对象")
-public class OrderPageQuery extends BasePageQuery {
-
- @ApiModelProperty("订单状态")
- private Integer status;
-
- @ApiModelProperty("会员ID")
- private Long memberId;
-
- @ApiModelProperty("订单编号")
- private String orderSn;
-
- @ApiModelProperty(value = "开始时间(格式:yyyy-MM-dd)")
- private String beginDate;
-
- @ApiModelProperty(value = "截止时间(格式:yyyy-MM-dd)")
- private String endDate;
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderPageVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderPageVO.java
deleted file mode 100644
index 6b6dd810a..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderPageVO.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.youlai.mall.oms.pojo.vo;
-
-import lombok.Data;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 订单分页视图对象
- *
- * @author haoxr
- * @date 2022/2/1 20:58
- */
-@Data
-public class OrderPageVO {
-
- private Long id;
-
- private String orderSn;
-
- private Long totalAmount;
-
- private Long payAmount;
-
- private Integer payType;
-
- private Integer status;
-
- private Integer totalQuantity;
-
- private Date createTime;
-
- private Long memberId;
-
- private Integer sourceType;
-
- private List orderItems;
-
- @Data
- public static class OrderItem {
-
- private Long id;
-
- private Long orderId;
-
- private Long skuId;
-
- private String skuName;
-
- private String picUrl;
-
- private Long price;
-
- private Integer count;
-
- private Long totalAmount;
-
- private String spuName;
-
- }
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderSubmitResultVO.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderSubmitResultVO.java
deleted file mode 100644
index 7bfb2013f..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/pojo/vo/OrderSubmitResultVO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.youlai.mall.oms.pojo.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 订单提交结果
- *
- * @author huawei
- * @date 2021/1/21
- */
-@ApiModel("订单提交结果")
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class OrderSubmitResultVO {
-
- @ApiModelProperty("订单ID")
- private Long orderId;
-
- @ApiModelProperty("订单编号,进入支付页面显示")
- private String orderSn;
-
-}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/OmsOrderService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/OmsOrderService.java
index a63eba794..f13e77c73 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/OmsOrderService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/OmsOrderService.java
@@ -3,34 +3,25 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.youlai.mall.oms.dto.SeataOrderDTO;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OmsOrderPageVO;
/**
- * 「管理端」订单业务接口
+ * Admin-订单业务接口
*
* @author haoxr
- * @date 2020/12/30
+ * @since 2.3.0
*/
public interface OmsOrderService extends IService {
/**
* 订单分页列表
*
- * @param queryParams
+ * @param queryParams {@link OrderPageQuery}
* @return
*/
- IPage listOrderPages(OrderPageQuery queryParams);
+ IPage getOrderPage(OrderPageQuery queryParams);
- /**
- * 「实验室」订单支付
- *
- * 非商城业务
- *
- * @param orderDTO
- * @return
- */
- Boolean payOrder(Long orderId, SeataOrderDTO orderDTO);
-
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/impl/OmsOrderServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/impl/OmsOrderServiceImpl.java
index d6c2e1277..7e365dd1b 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/impl/OmsOrderServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/impl/OmsOrderServiceImpl.java
@@ -1,83 +1,44 @@
package com.youlai.mall.oms.service.admin.impl;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.youlai.common.redis.BusinessSnGenerator;
-import com.youlai.mall.oms.common.enums.OrderStatusEnum;
-import com.youlai.mall.oms.dto.SeataOrderDTO;
+import com.youlai.mall.oms.converter.OrderConverter;
import com.youlai.mall.oms.mapper.OrderMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
+import com.youlai.mall.oms.model.bo.OrderBO;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OmsOrderPageVO;
import com.youlai.mall.oms.service.admin.OmsOrderService;
-import com.youlai.mall.ums.api.MemberFeignClient;
import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import java.util.List;
-
/**
- * 「管理端」订单业务实现类
+ * Admin-订单业务实现类
*
* @author haoxr
- * @date 2022/2/12
+ * @since 2.3.0
*/
@Service
@RequiredArgsConstructor
-@Slf4j
public class OmsOrderServiceImpl extends ServiceImpl implements OmsOrderService {
- private final MemberFeignClient memberFeignClient;
- private final BusinessSnGenerator businessSnGenerator;
-
- /**
- * 订单分页列表
- *
- * @param queryParams
- * @return
- */
- @Override
- public IPage listOrderPages(OrderPageQuery queryParams) {
- Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
- List list = this.baseMapper.listOrderPages(page, queryParams);
- page.setRecords(list);
- return page;
- }
+ private final OrderConverter orderConverter;
/**
- * 「实验室」订单支付
+ * Admin-订单分页列表
*
- * @param orderDTO
- * @return
+ * @param queryParams {@link OrderPageQuery}
+ * @return {@link OmsOrderPageVO}
*/
@Override
- public Boolean payOrder(Long orderId, SeataOrderDTO orderDTO) {
-
- Long memberId = orderDTO.getMemberId();
- Long amount = orderDTO.getAmount();
-
- // 扣减账户余额
- memberFeignClient.deductBalance(memberId, amount);
-
- // 是否开启异常
- Boolean openEx = orderDTO.getOpenEx();
- if (openEx) {
- int i = 1 / 0;
- }
-
- // 修改订单【已支付】
- String orderSn = businessSnGenerator.generateSerialNo("ORDER");
-
- boolean result = this.update(new LambdaUpdateWrapper()
- .eq(OmsOrder::getId, orderId)
- .set(OmsOrder::getOrderSn, orderSn)
- .set(OmsOrder::getStatus, OrderStatusEnum.PAID.getValue())
- );
+ public IPage getOrderPage(OrderPageQuery queryParams) {
+ Page boPage = this.baseMapper.getOrderPage(
+ new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
+ queryParams);
- return result;
+ return orderConverter.toVoPage(boPage);
}
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/CartService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/CartService.java
similarity index 82%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/CartService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/CartService.java
index 04ae15631..1f71e4740 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/CartService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/CartService.java
@@ -1,6 +1,6 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
-import com.youlai.mall.oms.pojo.dto.CartItemDTO;
+import com.youlai.mall.oms.model.dto.CartItemDTO;
import java.util.List;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderDeliveryService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderDeliveryService.java
similarity index 71%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderDeliveryService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderDeliveryService.java
index dab15f591..09815f53e 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderDeliveryService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderDeliveryService.java
@@ -1,8 +1,8 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
+import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
/**
* 订单物流记录表
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderItemService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderItemService.java
similarity index 72%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderItemService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderItemService.java
index e843a81b6..4ae0fe881 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderItemService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderItemService.java
@@ -1,7 +1,7 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
/**
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderLogService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderLogService.java
similarity index 88%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderLogService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderLogService.java
index 4beebba34..bd8d7e977 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderLogService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderLogService.java
@@ -1,8 +1,8 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
+import com.youlai.mall.oms.model.entity.OmsOrderLog;
/**
* 订单操作历史记录
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderService.java
similarity index 65%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderService.java
index b089eb258..94b564543 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderService.java
@@ -1,22 +1,23 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
import com.github.binarywang.wxpay.exception.WxPayException;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
-import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
-import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
-import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
+import com.youlai.mall.oms.enums.PaymentMethodEnum;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.form.OrderPaymentForm;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OrderConfirmVO;
+import com.youlai.mall.oms.model.form.OrderSubmitForm;
+import com.youlai.mall.oms.model.vo.OrderPageVO;
/**
* 订单业务接口
*
* @author huawei
- * @email huawei_code@163.com
- * @date 2020-12-30 22:31:10
+ * @since 2020-12-30 22:31:10
*/
public interface OrderService extends IService {
@@ -27,19 +28,22 @@ public interface OrderService extends IService {
* 进入订单创建页面有两个入口,1:立即购买;2:购物车结算
*
* @param skuId 直接购买必填,购物车结算不填
- * @return
+ * @return {@link OrderConfirmVO}
*/
OrderConfirmVO confirmOrder(Long skuId);
/**
* 订单提交
+ *
+ * @param orderSubmitForm {@link OrderSubmitForm}
+ * @return 订单编号
*/
- OrderSubmitResultVO submitOrder(OrderSubmitForm orderSubmitForm);
+ String submitOrder(OrderSubmitForm orderSubmitForm);
/**
* 订单支付
*/
- boolean payOrder(Long orderId);
+ T payOrder(OrderPaymentForm paymentForm);
/**
* 系统关闭订单
@@ -72,10 +76,10 @@ public interface OrderService extends IService {
/**
* 订单分页列表
*
- * @param queryParams
- * @return
+ * @param queryParams 订单分页查询参数
+ * @return {@link OrderPageVO}
*/
- IPage listOrderPages(OrderPageQuery queryParams);
+ IPage getOrderPage(OrderPageQuery queryParams);
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderSettingService.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderSettingService.java
similarity index 71%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderSettingService.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderSettingService.java
index a943a2445..a8b6a2083 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/OrderSettingService.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderSettingService.java
@@ -1,8 +1,8 @@
-package com.youlai.mall.oms.service;
+package com.youlai.mall.oms.service.app;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
+import com.youlai.mall.oms.model.entity.OmsOrderSetting;
/**
* 订单配置信息
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/CartServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/CartServiceImpl.java
similarity index 74%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/CartServiceImpl.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/CartServiceImpl.java
index 771ce6a20..45c5914e0 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/CartServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/CartServiceImpl.java
@@ -1,16 +1,18 @@
-package com.youlai.mall.oms.service.impl;
+package com.youlai.mall.oms.service.app.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import com.youlai.common.result.ResultCode;
import com.youlai.common.security.util.SecurityUtils;
import com.youlai.common.web.exception.BizException;
-import com.youlai.mall.oms.common.constant.OmsConstants;
-import com.youlai.mall.oms.pojo.dto.CartItemDTO;
-import com.youlai.mall.oms.service.CartService;
+import com.youlai.mall.oms.constant.OrderConstants;
+import com.youlai.mall.oms.converter.CartConverter;
+import com.youlai.mall.oms.model.dto.CartItemDTO;
+import com.youlai.mall.oms.service.app.CartService;
import com.youlai.mall.pms.api.SkuFeignClient;
-import com.youlai.mall.pms.pojo.dto.SkuDTO;
+import com.youlai.mall.pms.pojo.dto.SkuInfoDTO;
import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate;
@@ -26,18 +28,19 @@
*
* 核心技术:BoundHashOperations
* 数据格式:
- * -- key <----> 购物车
- * -- hKey:value <----> 商品1
- * -- hKey:value <----> 商品2
- * -- hKey:value <----> 商品3
+ * -- key <--> 商品列表
+ * ---- hKey:value <--> skuId 商品1
+ * ---- hKey:value <--> 商品2
+ * ---- hKey:value <--> 商品3
*/
@Service
@Slf4j
-@AllArgsConstructor
+@RequiredArgsConstructor
public class CartServiceImpl implements CartService {
- private RedisTemplate redisTemplate;
- private SkuFeignClient skuFeignService;
+ private final RedisTemplate redisTemplate;
+ private final SkuFeignClient skuFeignService;
+ private final CartConverter cartConverter;
@Override
public List listCartItems(Long memberId) {
@@ -54,7 +57,7 @@ public List listCartItems(Long memberId) {
*/
@Override
public boolean deleteCart() {
- String key = OmsConstants.MEMBER_CART_PREFIX + SecurityUtils.getMemberId();
+ String key = OrderConstants.MEMBER_CART_PREFIX + SecurityUtils.getMemberId();
redisTemplate.delete(key);
return true;
}
@@ -65,35 +68,24 @@ public boolean deleteCart() {
@Override
public boolean addCartItem(Long skuId) {
Long memberId = SecurityUtils.getMemberId();
- if (memberId == null) {
- throw new BizException(ResultCode.INVALID_TOKEN);
- }
- BoundHashOperations cartHashOperations = getCartHashOperations(memberId);
- String hKey = skuId + "";
+ BoundHashOperations cartHashOperations = getCartHashOperations(memberId);
+ String hKey = String.valueOf(skuId);
- CartItemDTO cartItem;
- // 购物车已存在该商品,更新商品数量
- if (cartHashOperations.get(hKey) != null) {
- cartItem = (CartItemDTO) cartHashOperations.get(hKey);
+ CartItemDTO cartItem = cartHashOperations.get(hKey);
+
+ if (cartItem != null) {
+ // 购物车已存在该商品,更新商品数量
cartItem.setCount(cartItem.getCount() + 1); // 点击一次“加入购物车”,数量+1
cartItem.setChecked(true);
- cartHashOperations.put(hKey, cartItem);
- return true;
- }
- // 购物车不存在该商品,添加商品至购物车
- cartItem = new CartItemDTO();
- CompletableFuture cartItemCompletableFuture = CompletableFuture.runAsync(() -> {
- SkuDTO skuInfo = skuFeignService.getSkuInfo(skuId).getData();
+ } else {
+ // 购物车中不存在该商品,新增商品到购物车
+ SkuInfoDTO skuInfo = skuFeignService.getSkuInfo(skuId);
if (skuInfo != null) {
- BeanUtil.copyProperties(skuInfo, cartItem);
- cartItem.setStock(skuInfo.getStockNum());
+ cartItem = cartConverter.sku2CartItem(skuInfo);
cartItem.setCount(1);
cartItem.setChecked(true);
}
- });
- CompletableFuture.allOf(cartItemCompletableFuture).join();
-
- Assert.isTrue(cartItem.getSkuId() != null, "商品不存在");
+ }
cartHashOperations.put(hKey, cartItem);
return true;
}
@@ -189,7 +181,7 @@ public boolean removeCheckedItem() {
* 获取第一层,即某个用户的购物车
*/
private BoundHashOperations getCartHashOperations(Long memberId) {
- String cartKey = OmsConstants.MEMBER_CART_PREFIX + memberId;
+ String cartKey = OrderConstants.MEMBER_CART_PREFIX + memberId;
BoundHashOperations operations = redisTemplate.boundHashOps(cartKey);
return operations;
}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderDeliveryServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderDeliveryServiceImpl.java
similarity index 67%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderDeliveryServiceImpl.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderDeliveryServiceImpl.java
index 95d2e1178..79b23a9b4 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderDeliveryServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderDeliveryServiceImpl.java
@@ -1,9 +1,9 @@
-package com.youlai.mall.oms.service.impl;
+package com.youlai.mall.oms.service.app.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderDeliveryMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderDelivery;
-import com.youlai.mall.oms.service.OrderDeliveryService;
+import com.youlai.mall.oms.model.entity.OmsOrderDelivery;
+import com.youlai.mall.oms.service.app.OrderDeliveryService;
import org.springframework.stereotype.Service;
@Service("orderDeliveryService")
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderItemServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderItemServiceImpl.java
similarity index 68%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderItemServiceImpl.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderItemServiceImpl.java
index c54d10455..e318e79f6 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderItemServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderItemServiceImpl.java
@@ -1,9 +1,9 @@
-package com.youlai.mall.oms.service.impl;
+package com.youlai.mall.oms.service.app.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderItemMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
-import com.youlai.mall.oms.service.OrderItemService;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
+import com.youlai.mall.oms.service.app.OrderItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderLogServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderLogServiceImpl.java
similarity index 87%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderLogServiceImpl.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderLogServiceImpl.java
index 1baa66fdb..944af10d2 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderLogServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderLogServiceImpl.java
@@ -1,10 +1,10 @@
-package com.youlai.mall.oms.service.impl;
+package com.youlai.mall.oms.service.app.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.common.security.util.SecurityUtils;
import com.youlai.mall.oms.mapper.OrderLogMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderLog;
-import com.youlai.mall.oms.service.OrderLogService;
+import com.youlai.mall.oms.model.entity.OmsOrderLog;
+import com.youlai.mall.oms.service.app.OrderLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderServiceImpl.java
new file mode 100644
index 000000000..843cf6724
--- /dev/null
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderServiceImpl.java
@@ -0,0 +1,485 @@
+package com.youlai.mall.oms.service.app.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
+import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyV3Result;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
+import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
+import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.youlai.common.result.Result;
+import com.youlai.common.security.util.SecurityUtils;
+import com.youlai.common.web.exception.BizException;
+import com.youlai.mall.oms.constant.OrderConstants;
+import com.youlai.mall.oms.config.WxPayProperties;
+import com.youlai.mall.oms.enums.OrderStatusEnum;
+import com.youlai.mall.oms.enums.PaymentMethodEnum;
+import com.youlai.mall.oms.converter.OrderConverter;
+import com.youlai.mall.oms.converter.OrderItemConverter;
+import com.youlai.mall.oms.mapper.OrderMapper;
+import com.youlai.mall.oms.model.bo.OrderBO;
+import com.youlai.mall.oms.model.dto.CartItemDTO;
+import com.youlai.mall.oms.model.dto.OrderItemDTO;
+import com.youlai.mall.oms.model.entity.OmsOrder;
+import com.youlai.mall.oms.model.entity.OmsOrderItem;
+import com.youlai.mall.oms.model.form.OrderPaymentForm;
+import com.youlai.mall.oms.model.form.OrderSubmitForm;
+import com.youlai.mall.oms.model.query.OrderPageQuery;
+import com.youlai.mall.oms.model.vo.OrderConfirmVO;
+import com.youlai.mall.oms.model.vo.OrderPageVO;
+import com.youlai.mall.oms.service.app.CartService;
+import com.youlai.mall.oms.service.app.OrderItemService;
+import com.youlai.mall.oms.service.app.OrderService;
+import com.youlai.mall.pms.api.SkuFeignClient;
+import com.youlai.mall.pms.pojo.dto.SkuInfoDTO;
+import com.youlai.mall.pms.pojo.dto.LockedSkuDTO;
+import com.youlai.mall.ums.api.MemberFeignClient;
+import com.youlai.mall.ums.dto.MemberAddressDTO;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.stream.Collectors;
+
+
+/**
+ * 订单业务实现类
+ *
+ * @author haoxr
+ * @since 2.0.0
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class OrderServiceImpl extends ServiceImpl implements OrderService {
+
+ private final WxPayProperties wxPayProperties;
+ private final CartService cartService;
+ private final OrderItemService orderItemService;
+ private final RabbitTemplate rabbitTemplate;
+ private final StringRedisTemplate redisTemplate;
+ private final ThreadPoolExecutor threadPoolExecutor;
+ private final MemberFeignClient memberFeignClient;
+ private final SkuFeignClient skuFeignClient;
+ private final WxPayService wxPayService;
+ private final RedissonClient redissonClient;
+ private final OrderConverter orderConverter;
+ private final OrderItemConverter orderItemConverter;
+
+ /**
+ * 订单分页列表
+ */
+ @Override
+ public IPage getOrderPage(OrderPageQuery queryParams) {
+ Page boPage = this.baseMapper.getOrderPage(
+ new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
+ queryParams);
+ return orderConverter.toVoPageForApp(boPage);
+ }
+
+ /**
+ * 订单确认 → 进入创建订单页面
+ *
+ * 获取购买商品明细、用户默认收货地址、防重提交唯一token
+ * 进入订单创建页面有两个入口,1:立即购买;2:购物车结算
+ *
+ * @param skuId 商品ID(直接购买传值)
+ * @return {@link OrderConfirmVO}
+ */
+ @Override
+ public OrderConfirmVO confirmOrder(Long skuId) {
+
+ Long memberId = SecurityUtils.getMemberId();
+
+ // 解决子线程无法获取HttpServletRequest请求对象中数据的问题
+ RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
+ RequestContextHolder.setRequestAttributes(attributes, true);
+
+ // 获取订单商品
+ CompletableFuture> getOrderItemsFuture = CompletableFuture.supplyAsync(
+ () -> this.getOrderItems(skuId, memberId), threadPoolExecutor)
+ .exceptionally(ex -> {
+ log.error("Failed to get order items: {}", ex.toString());
+ return null;
+ });
+
+ // 用户收货地址
+ CompletableFuture> getMemberAddressFuture = CompletableFuture.supplyAsync(() -> {
+ Result> getMemberAddressResult = memberFeignClient.listMemberAddresses(memberId);
+ if (Result.isSuccess(getMemberAddressResult)) {
+ return getMemberAddressResult.getData();
+ }
+ return null;
+ }, threadPoolExecutor).exceptionally(ex -> {
+ log.error("Failed to get addresses for memberId {} : {}", memberId, ex.toString());
+ return null;
+ });
+
+ // 生成唯一令牌,防止重复提交(原理:提交会消耗令牌,令牌被消耗无法再次提交)
+ CompletableFuture generateOrderTokenFuture = CompletableFuture.supplyAsync(() -> {
+ String orderToken = this.generateTradeNo(memberId);
+ redisTemplate.opsForValue().set(OrderConstants.ORDER_TOKEN_PREFIX + orderToken, orderToken);
+ return orderToken;
+ }, threadPoolExecutor).exceptionally(ex -> {
+ log.error("Failed to generate order token .");
+ return null;
+ });
+
+ CompletableFuture.allOf(getOrderItemsFuture, getMemberAddressFuture, generateOrderTokenFuture).join();
+ OrderConfirmVO orderConfirmVO = new OrderConfirmVO();
+ orderConfirmVO.setOrderItems(getOrderItemsFuture.join());
+ orderConfirmVO.setAddresses(getMemberAddressFuture.join());
+ orderConfirmVO.setOrderToken(generateOrderTokenFuture.join());
+
+ log.info("Order confirm response for skuId {}: {}", skuId, orderConfirmVO);
+ return orderConfirmVO;
+ }
+
+ /**
+ * 订单提交
+ *
+ * @param submitForm {@link OrderSubmitForm}
+ * @return 订单编号
+ */
+ @Override
+ @GlobalTransactional
+ public String submitOrder(OrderSubmitForm submitForm) {
+ log.info("订单提交参数:{}", JSONUtil.toJsonStr(submitForm));
+ String orderToken = submitForm.getOrderToken();
+
+ // 1. 判断订单是否重复提交(LUA脚本保证获取和删除的原子性,成功返回1,否则返回0)
+ String lockAcquireScript = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
+ Long lockAcquired = this.redisTemplate.execute(
+ new DefaultRedisScript<>(lockAcquireScript, Long.class),
+ Collections.singletonList(OrderConstants.ORDER_TOKEN_PREFIX + orderToken),
+ orderToken
+ );
+ Assert.isTrue(lockAcquired != null && lockAcquired.equals(1L), "订单重复提交,请刷新页面后重试");
+
+ // 2. 订单商品校验 (PS:校验进入订单确认页面到提交过程商品(价格、上架状态)变化)
+ List orderItems = submitForm.getOrderItems();
+ List skuIds = orderItems.stream()
+ .map(OrderSubmitForm.OrderItem::getSkuId)
+ .collect(Collectors.toList());
+
+ List skuList = skuFeignClient.getSkuInfoList(skuIds);
+ for (OrderSubmitForm.OrderItem item : orderItems) {
+ SkuInfoDTO skuInfo = skuList.stream().filter(sku -> sku.getId().equals(item.getSkuId()))
+ .findFirst()
+ .orElse(null);
+ Assert.isTrue(skuInfo != null, "商品({})已下架或删除");
+ Assert.isTrue(item.getPrice().compareTo(skuInfo.getPrice()) == 0, "商品({})价格发生变动,请刷新页面", item.getSkuName());
+ }
+
+ // 3. 校验库存并锁定库存
+ List lockedSkuList = orderItems.stream()
+ .map(item -> new LockedSkuDTO(item.getSkuId(), item.getQuantity(), item.getSkuSn()))
+ .collect(Collectors.toList());
+
+ boolean lockStockResult = skuFeignClient.lockStock(orderToken, lockedSkuList);
+ Assert.isTrue(lockStockResult, "订单提交失败:锁定商品库存失败!");
+
+ // 4. 生成订单
+ boolean result = this.saveOrder(submitForm);
+ log.info("order ({}) create result:{}", orderToken, result);
+ return orderToken;
+ }
+
+
+ /**
+ * 创建订单
+ *
+ * @param submitForm 订单提交表单对象
+ * @return
+ */
+ private boolean saveOrder(OrderSubmitForm submitForm) {
+ OmsOrder order = orderConverter.form2Entity(submitForm);
+ order.setStatus(OrderStatusEnum.UNPAID.getValue());
+ order.setMemberId(SecurityUtils.getMemberId());
+ order.setSource(submitForm.getOrderSource().getValue());
+ boolean result = this.save(order);
+
+ Long orderId = order.getId();
+ if (result) {
+
+ // 保存订单明细
+ List orderItemEntities = orderItemConverter.item2Entity(submitForm.getOrderItems());
+ orderItemEntities.forEach(item -> item.setOrderId(orderId));
+
+ orderItemService.saveBatch(orderItemEntities);
+
+ // 订单超时未支付取消
+ rabbitTemplate.convertAndSend("order.exchange", "order.close.delay", submitForm.getOrderToken());
+ }
+ return result;
+ }
+
+
+ /**
+ * 订单支付
+ *
+ * 余额支付:库存、余额、订单处理
+ * 微信支付:生成微信支付调起参数,订单、库存、余额处理在支付回调
+ */
+ @Override
+ @GlobalTransactional
+ public T payOrder(OrderPaymentForm paymentForm) {
+ String orderSn = paymentForm.getOrderSn();
+ OmsOrder order = this.getOne(new LambdaQueryWrapper().eq(OmsOrder::getOrderSn, orderSn));
+ Assert.isTrue(order != null, "订单不存在");
+
+ Assert.isTrue(OrderStatusEnum.UNPAID.getValue().equals(order.getStatus()), "订单不可支付,请检查订单状态");
+
+ RLock lock = redissonClient.getLock(OrderConstants.ORDER_LOCK_PREFIX + order.getOrderSn());
+ try {
+ lock.lock();
+ T result;
+ switch (paymentForm.getPaymentMethod()) {
+ case WX_JSAPI:
+ result = (T) wxJsapiPay(paymentForm.getAppId(), order.getOrderSn(), order.getPaymentAmount());
+ break;
+ default:
+ result = (T) balancePay(order);
+ break;
+ }
+ return result;
+ } finally {
+ //释放锁
+ if (lock.isLocked()) {
+ lock.unlock();
+ }
+ }
+ }
+
+
+ /**
+ * 余额支付
+ *
+ * @param order
+ * @return
+ */
+ private Boolean balancePay(OmsOrder order) {
+ // 扣减余额
+ Long memberId = order.getMemberId();
+ Long payAmount = order.getPaymentAmount();
+ Result> deductBalanceResult = memberFeignClient.deductBalance(memberId, payAmount);
+ Assert.isTrue(Result.isSuccess(deductBalanceResult), "扣减账户余额失败");
+
+ // 扣减库存
+ skuFeignClient.deductStock(order.getOrderSn());
+
+ // 更新订单状态
+ order.setStatus(OrderStatusEnum.PAID.getValue());
+ order.setPaymentMethod(PaymentMethodEnum.BALANCE.getValue());
+ order.setPaymentTime(new Date());
+ this.updateById(order);
+ // 支付成功删除购物车已勾选的商品
+ cartService.removeCheckedItem();
+ return Boolean.TRUE;
+ }
+
+
+ /**
+ * 微信支付调起
+ *
+ * @param appId 微信小程序ID
+ * @param orderSn 订单编号
+ * @param paymentAmount 支付金额
+ * @return 微信支付调起参数
+ */
+ private WxPayUnifiedOrderV3Result.JsapiResult wxJsapiPay(String appId, String orderSn, Long paymentAmount) {
+ Long memberId = SecurityUtils.getMemberId();
+ // 如果已经有outTradeNo了就先进行关单
+ if (StrUtil.isNotBlank(orderSn)) {
+ try {
+ wxPayService.closeOrderV3(orderSn);
+ } catch (WxPayException e) {
+ log.error(e.getMessage(), e);
+ throw new BizException("微信关单异常");
+ }
+ }
+
+ // 更新订单状态
+ boolean result = this.update(new LambdaUpdateWrapper()
+ .set(OmsOrder::getPaymentMethod, PaymentMethodEnum.WX_JSAPI.getValue())
+ .eq(OmsOrder::getOrderSn, orderSn)
+ );
+
+ String memberOpenId = memberFeignClient.getMemberOpenId(memberId).getData();
+
+ WxPayUnifiedOrderV3Request wxRequest = new WxPayUnifiedOrderV3Request()
+ .setAppid(appId)
+ .setOutTradeNo(orderSn)
+ .setAmount(new WxPayUnifiedOrderV3Request
+ .Amount()
+ .setTotal(Math.toIntExact(paymentAmount))
+ )
+ .setPayer(
+ new WxPayUnifiedOrderV3Request.Payer()
+ .setOpenid(memberOpenId)
+ )
+ .setDescription("赅买-订单编号:" + orderSn)
+ .setNotifyUrl(wxPayProperties.getPayNotifyUrl());
+ WxPayUnifiedOrderV3Result.JsapiResult jsapiResult;
+ try {
+ jsapiResult = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, wxRequest);
+ } catch (WxPayException e) {
+ log.error(e.getMessage(), e);
+ throw new BizException("微信统一下单异常");
+ }
+ return jsapiResult;
+ }
+
+ /**
+ * 关闭订单
+ *
+ * @param orderSn 订单编号
+ * @return 是否成功 true|false
+ */
+ @Override
+ public boolean closeOrder(String orderSn) {
+
+ return this.update(new LambdaUpdateWrapper()
+ .eq(OmsOrder::getOrderSn, orderSn)
+ .eq(OmsOrder::getStatus, OrderStatusEnum.UNPAID.getValue())
+ .set(OmsOrder::getStatus, OrderStatusEnum.CANCELED.getValue())
+ );
+ }
+
+ /**
+ * 删除订单
+ *
+ * @param orderId 订单ID
+ * @return true/false
+ */
+ @Override
+ public boolean deleteOrder(Long orderId) {
+ OmsOrder order = this.getById(orderId);
+ Assert.isTrue(order != null, "删除失败,订单不存在!");
+
+ Assert.isTrue(
+ OrderStatusEnum.CANCELED.getValue().equals(order.getStatus())
+ || OrderStatusEnum.UNPAID.getValue().equals(order.getStatus())
+ ,
+ "当前状态订单不能删除"
+ );
+
+ return this.removeById(orderId);
+ }
+
+ @Override
+ public void handleWxPayOrderNotify(SignatureHeader signatureHeader, String notifyData) throws WxPayException {
+ log.info("开始处理支付结果通知");
+ // 解密支付通知内容
+ final WxPayOrderNotifyV3Result.DecryptNotifyResult result = this.wxPayService.parseOrderNotifyV3Result(notifyData, signatureHeader).getResult();
+ log.debug("支付通知解密成功:[{}]", result.toString());
+ // 根据商户订单号查询订单
+ OmsOrder orderDO = this.getOne(new LambdaQueryWrapper()
+ .eq(OmsOrder::getOutTradeNo, result.getOutTradeNo())
+ );
+ // 支付成功处理
+ if (WxPayConstants.WxpayTradeStatus.SUCCESS.equals(result.getTradeState())) {
+ orderDO.setStatus(OrderStatusEnum.PAID.getValue());
+ orderDO.setTransactionId(result.getTransactionId());
+ orderDO.setPaymentTime(new Date());
+ this.updateById(orderDO);
+ }
+ log.info("账单更新成功");
+ // 支付成功删除购物车已勾选的商品
+ cartService.removeCheckedItem();
+ }
+
+ @Override
+ public void handleWxPayRefundNotify(SignatureHeader signatureHeader, String notifyData) throws WxPayException {
+ log.info("开始处理退款结果通知");
+ // 解密支付通知内容
+ final WxPayRefundNotifyV3Result.DecryptNotifyResult result = this.wxPayService.parseRefundNotifyV3Result(notifyData, signatureHeader).getResult();
+ log.debug("退款通知解密成功:[{}]", result.toString());
+ // 根据商户退款单号查询订单
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.lambda().eq(OmsOrder::getOutTradeNo, result.getOutTradeNo());
+ OmsOrder orderDO = this.getOne(wrapper);
+ // 退款成功处理
+ if (WxPayConstants.RefundStatus.SUCCESS.equals(result.getRefundStatus())) {
+ orderDO.setStatus(OrderStatusEnum.COMPLETE.getValue());
+ orderDO.setRefundId(result.getRefundId());
+ this.updateById(orderDO);
+ }
+ log.info("账单更新成功");
+ }
+
+
+ /**
+ * 获取订单的商品明细信息
+ *
+ * 创建订单两种方式,1:直接购买;2:购物车结算
+ *
+ * @param skuId 直接购买必有值,购物车结算必没值
+ * @return
+ */
+ private List getOrderItems(Long skuId, Long memberId) {
+ List orderItems;
+ if (skuId != null) { // 直接购买
+ orderItems = new ArrayList<>();
+ SkuInfoDTO skuInfoDTO = skuFeignClient.getSkuInfo(skuId);
+ OrderItemDTO orderItemDTO = new OrderItemDTO();
+ BeanUtil.copyProperties(skuInfoDTO, orderItemDTO);
+ orderItemDTO.setSkuId(skuInfoDTO.getId());
+ orderItemDTO.setQuantity(1); // 直接购买商品的数量为1
+ orderItems.add(orderItemDTO);
+ } else { // 购物车结算
+ List cartItems = cartService.listCartItems(memberId);
+ orderItems = cartItems.stream()
+ .filter(CartItemDTO::getChecked)
+ .map(cartItem -> {
+ OrderItemDTO orderItemDTO = new OrderItemDTO();
+ BeanUtil.copyProperties(cartItem, orderItemDTO);
+ return orderItemDTO;
+ }).collect(Collectors.toList());
+ }
+ return orderItems;
+ }
+
+ /**
+ * 生成商户订单号
+ *
+ * @param memberId 会员ID
+ * @return
+ */
+ private String generateTradeNo(Long memberId) {
+ // 用户id前补零保证五位,对超出五位的保留后五位
+ String userIdFilledZero = String.format("%05d", memberId);
+ String fiveDigitsUserId = userIdFilledZero.substring(userIdFilledZero.length() - 5);
+ // 在前面加上wxo(wx order)等前缀是为了人工可以快速分辨订单号是下单还是退款、来自哪家支付机构等
+ // 将时间戳+3位随机数+五位id组成商户订单号,规则参考自大众点评
+ return System.currentTimeMillis() + RandomUtil.randomNumbers(3) + fiveDigitsUserId;
+ }
+
+}
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderSettingServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderSettingServiceImpl.java
similarity index 65%
rename from mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderSettingServiceImpl.java
rename to mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderSettingServiceImpl.java
index 6800f9d70..ea646f98c 100644
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderSettingServiceImpl.java
+++ b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderSettingServiceImpl.java
@@ -1,9 +1,9 @@
-package com.youlai.mall.oms.service.impl;
+package com.youlai.mall.oms.service.app.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.mall.oms.mapper.OrderSettingMapper;
-import com.youlai.mall.oms.pojo.entity.OmsOrderSetting;
-import com.youlai.mall.oms.service.OrderSettingService;
+import com.youlai.mall.oms.model.entity.OmsOrderSetting;
+import com.youlai.mall.oms.service.app.OrderSettingService;
import org.springframework.stereotype.Service;
diff --git a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderServiceImpl.java b/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderServiceImpl.java
deleted file mode 100644
index f1162f290..000000000
--- a/mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/impl/OrderServiceImpl.java
+++ /dev/null
@@ -1,420 +0,0 @@
-package com.youlai.mall.oms.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.RandomUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyV3Result;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
-import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
-import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.youlai.common.redis.BusinessSnGenerator;
-import com.youlai.common.result.Result;
-import com.youlai.common.security.util.SecurityUtils;
-import com.youlai.common.web.exception.BizException;
-import com.youlai.mall.oms.config.WxPayProperties;
-import com.youlai.mall.oms.common.enums.OrderStatusEnum;
-import com.youlai.mall.oms.common.enums.PayTypeEnum;
-import com.youlai.mall.oms.converter.OrderConverter;
-import com.youlai.mall.oms.converter.OrderItemConverter;
-import com.youlai.mall.oms.mapper.OrderMapper;
-import com.youlai.mall.oms.pojo.dto.CartItemDTO;
-import com.youlai.mall.oms.pojo.dto.OrderItemDTO;
-import com.youlai.mall.oms.pojo.entity.OmsOrder;
-import com.youlai.mall.oms.pojo.entity.OmsOrderItem;
-import com.youlai.mall.oms.pojo.form.OrderSubmitForm;
-import com.youlai.mall.oms.pojo.query.OrderPageQuery;
-import com.youlai.mall.oms.pojo.vo.OrderConfirmVO;
-import com.youlai.mall.oms.pojo.vo.OrderSubmitResultVO;
-import com.youlai.mall.oms.service.CartService;
-import com.youlai.mall.oms.service.OrderItemService;
-import com.youlai.mall.oms.service.OrderService;
-import com.youlai.mall.pms.api.SkuFeignClient;
-import com.youlai.mall.pms.pojo.dto.CheckPriceDTO;
-import com.youlai.mall.pms.pojo.dto.SkuDTO;
-import com.youlai.mall.pms.pojo.dto.LockStockDTO;
-import com.youlai.mall.ums.api.MemberFeignClient;
-import com.youlai.mall.ums.dto.MemberAddressDTO;
-import io.seata.spring.annotation.GlobalTransactional;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
-import org.springframework.amqp.rabbit.connection.CorrelationData;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.data.redis.core.script.DefaultRedisScript;
-import org.springframework.stereotype.Service;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.stream.Collectors;
-
-import static com.youlai.mall.oms.common.constant.OmsConstants.*;
-
-/**
- * 订单业务实现类
- *
- * @author haoxr
- * @date 2022/2/12
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class OrderServiceImpl extends ServiceImpl implements OrderService {
-
- private final WxPayProperties wxPayProperties;
- private final CartService cartService;
- private final OrderItemService orderItemService;
- private final RabbitTemplate rabbitTemplate;
- private final StringRedisTemplate redisTemplate;
- private final ThreadPoolExecutor threadPoolExecutor;
- private final MemberFeignClient memberFeignClient;
- private final BusinessSnGenerator businessSnGenerator;
- private final SkuFeignClient skuFeignClient;
- private final RedissonClient redissonClient;
- private final WxPayService wxPayService;
- private final OrderConverter orderConverter;
- private final OrderItemConverter orderItemConverter;
-
- /**
- * 订单分页列表
- */
- @Override
- public IPage listOrderPages(OrderPageQuery queryParams) {
- Page page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize());
- List list = this.baseMapper.listOrderPages(page, queryParams);
- page.setRecords(list);
- return page;
- }
-
- /**
- * 订单确认 → 进入创建订单页面
- *
- * 获取购买商品明细、用户默认收货地址、防重提交唯一token
- * 进入订单创建页面有两个入口,1:立即购买;2:购物车结算
- *
- * @param skuId 直接购买必填,购物车结算不填
- * @return
- */
- @Override
- public OrderConfirmVO confirmOrder(Long skuId) {
- OrderConfirmVO orderConfirmVO = new OrderConfirmVO();
- // 获取原请求线程的参数
- RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
- Long memberId = SecurityUtils.getMemberId();
- // 获取订单的商品明细信息
- CompletableFuture getOrderItemsFuture = CompletableFuture.runAsync(() -> {
- // 请求参数传递给子线程
- RequestContextHolder.setRequestAttributes(attributes);
- List orderItems = this.getOrderItems(skuId, memberId);
- orderConfirmVO.setOrderItems(orderItems);
- }, threadPoolExecutor);
-
- // 获取会员收获地址
- CompletableFuture getMemberAddressFuture = CompletableFuture.runAsync(() -> {
- RequestContextHolder.setRequestAttributes(attributes);
- Result> getMemberAddressResult = memberFeignClient.listMemberAddresses(memberId);
- List memberAddresses;
- if (Result.isSuccess(getMemberAddressResult) && (memberAddresses = getMemberAddressResult.getData()) != null) {
- orderConfirmVO.setAddresses(memberAddresses);
- } else {
- orderConfirmVO.setAddresses(Collections.EMPTY_LIST);
- }
- }, threadPoolExecutor);
-
- // 进入订单确认页面生成唯一token,订单提交根据此token判断是否重复提交
- CompletableFuture getOrderTokenFuture = CompletableFuture.runAsync(() -> {
- RequestContextHolder.setRequestAttributes(attributes);
- String orderToken = businessSnGenerator.generateSerialNo("ORDER");
- orderConfirmVO.setOrderToken(orderToken);
- redisTemplate.opsForValue().set(ORDER_RESUBMIT_LOCK_PREFIX + orderToken, orderToken);
- }, threadPoolExecutor);
-
- CompletableFuture.allOf(getOrderItemsFuture, getMemberAddressFuture, getOrderTokenFuture).join();
- log.info("订单确认响应:{}", orderConfirmVO);
- return orderConfirmVO;
- }
-
- /**
- * 订单提交
- */
- @Override
- @GlobalTransactional
- public OrderSubmitResultVO submitOrder(OrderSubmitForm orderSubmitForm) {
- log.info("订单提交数据:{}", JSONUtil.toJsonStr(orderSubmitForm));
- // 订单基础信息校验
- List orderItems = orderSubmitForm.getOrderItems();
- Assert.isTrue(CollectionUtil.isNotEmpty(orderItems), "订单没有商品");
-
- // 订单重复提交校验
- String orderSn = orderSubmitForm.getOrderToken();
- Long releaseLockResult = this.redisTemplate.execute(
- new DefaultRedisScript<>(
- "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end", Long.class
- ),
- Collections.singletonList(ORDER_RESUBMIT_LOCK_PREFIX + orderSn),
- orderSn
- ); // 释放锁成功则返回1
- Assert.isTrue(releaseLockResult.equals(1l), "订单重复提交,请刷新页面后重试");
-
- // 订单验价
- List orderSkus = orderItems.stream()
- .map(orderItem -> new CheckPriceDTO.OrderSku(orderItem.getSkuId(), orderItem.getCount())
- ).collect(Collectors.toList());
-
- CheckPriceDTO checkPriceDTO = new CheckPriceDTO(orderSn, orderSubmitForm.getTotalAmount(), orderSkus);
- Result checkPriceResult = skuFeignClient.checkPrice(checkPriceDTO);
- Assert.isTrue(Result.isSuccess(checkPriceResult) && Boolean.TRUE.equals(checkPriceResult.getData()),
- "当前页面已过期,请重新刷新页面再提交");
-
- // 锁定订单商品的库存
- List lockedSkus = orderItems.stream()
- .map(orderItem -> new LockStockDTO.LockedSku(orderItem.getSkuId(), orderItem.getCount()))
- .collect(Collectors.toList());
-
- LockStockDTO lockStockDTO = new LockStockDTO(orderSn, lockedSkus);
-
- Result lockStockResult = skuFeignClient.lockStock(lockStockDTO);
- Assert.isTrue(Result.isSuccess(lockStockResult), "订单提交失败:锁定商品库存失败!");
-
- // 创建订单
- OmsOrder orderEntity = orderConverter.submitForm2Entity(orderSubmitForm);
- orderEntity.setStatus(OrderStatusEnum.UNPAID.getValue());
- orderEntity.setMemberId(SecurityUtils.getMemberId());
- boolean result = this.save(orderEntity);
- // 添加订单明细
- Long orderId = orderEntity.getId();
- if (result) {
- List itemEntities = orderItemConverter.dto2Entity(orderId, orderItems);
- result = orderItemService.saveBatch(itemEntities);
- if (result) {
- // 订单超时未支付关单
- rabbitTemplate.convertAndSend("order.exchange", "order.close.delay.routing.key", orderSn);
- }
- }
- Assert.isTrue(result, "订单提交失败");
-
- // 成功响应返回值构建
- OrderSubmitResultVO submitVO = new OrderSubmitResultVO(orderId, orderEntity.getOrderSn());
- return submitVO;
- }
-
- /**
- * 订单支付
- */
- @Override
- @GlobalTransactional
- public boolean payOrder(Long orderId) {
-
- OmsOrder order = this.getById(orderId);
- Assert.isTrue(order != null, "订单不存在");
-
- Assert.isTrue(OrderStatusEnum.UNPAID.getValue().equals(order.getStatus()), "订单不可支付,请检查订单状态");
-
- RLock lock = redissonClient.getLock(ORDER_LOCK_PREFIX + order.getOrderSn());
- try {
-
- lock.lock();
- // 扣减余额
- memberFeignClient.deductBalance(SecurityUtils.getMemberId(), order.getPayAmount());
- // 扣减库存
- skuFeignClient.deductStock(order.getOrderSn());
- // 修改订单状态 → 【已支付】
- order.setStatus(OrderStatusEnum.PAID.getValue());
- order.setPayType(PayTypeEnum.BALANCE.getValue());
- order.setPayTime(new Date());
- this.updateById(order);
- // 支付成功删除购物车已勾选的商品
- cartService.removeCheckedItem();
- return true;
- } finally {
- //释放锁
- if (lock.isLocked()) {
- lock.unlock();
- }
- }
- }
-
- /**
- * 微信支付
- *
- * @param appId
- * @param order
- * @return
- */
- private WxPayUnifiedOrderV3Result.JsapiResult wxJsapiPay(String appId, OmsOrder order) {
- Long memberId = SecurityUtils.getMemberId();
- Long payAmount = order.getPayAmount();
- // 如果已经有outTradeNo了就先进行关单
- if (PayTypeEnum.WX_JSAPI.getValue().equals(order.getPayType()) && StrUtil.isNotBlank(order.getOutTradeNo())) {
- try {
- wxPayService.closeOrderV3(order.getOutTradeNo());
- } catch (WxPayException e) {
- log.error(e.getMessage(), e);
- throw new BizException("微信关单异常");
- }
- }
- // 用户id前补零保证五位,对超出五位的保留后五位
- String userIdFilledZero = String.format("%05d", memberId);
- String fiveDigitsUserId = userIdFilledZero.substring(userIdFilledZero.length() - 5);
- // 在前面加上wxo(wx order)等前缀是为了人工可以快速分辨订单号是下单还是退款、来自哪家支付机构等
- // 将时间戳+3位随机数+五位id组成商户订单号,规则参考自大众点评
- String outTradeNo = "wxo_" + System.currentTimeMillis() + RandomUtil.randomNumbers(3) + fiveDigitsUserId;
- log.info("商户订单号拼接完成:{}", outTradeNo);
- // 更新订单状态
- order.setPayType(PayTypeEnum.WX_JSAPI.getValue());
- order.setOutTradeNo(outTradeNo);
- this.updateById(order);
-
- String memberOpenId = memberFeignClient.getMemberOpenId(memberId).getData();
-
- WxPayUnifiedOrderV3Request wxRequest = new WxPayUnifiedOrderV3Request().setOutTradeNo(outTradeNo).setAppid(appId).setNotifyUrl(wxPayProperties.getPayNotifyUrl()).setAmount(new WxPayUnifiedOrderV3Request.Amount().setTotal(Math.toIntExact(payAmount))).setPayer(new WxPayUnifiedOrderV3Request.Payer().setOpenid(memberOpenId)).setDescription("赅买-订单编号" + order.getOrderSn());
- WxPayUnifiedOrderV3Result.JsapiResult jsapiResult;
- try {
- jsapiResult = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, wxRequest);
- } catch (WxPayException e) {
- log.error(e.getMessage(), e);
- throw new BizException("微信统一下单异常");
- }
- return jsapiResult;
- }
-
- /**
- * 关闭订单(超时未支付)
- *
- * @param orderSn 订单编号
- * @return
- */
- @Override
- public boolean closeOrder(String orderSn) {
- OmsOrder order = this.getOne(new LambdaQueryWrapper()
- .eq(OmsOrder::getOrderSn, orderSn)
- .select(OmsOrder::getId, OmsOrder::getStatus)
- );
- Assert.isTrue(order != null, "订单不存在");
- boolean result;
- if (OrderStatusEnum.UNPAID.getValue().equals(order.getStatus())) {
- result = this.update(new LambdaUpdateWrapper()
- .eq(OmsOrder::getId, order.getId())
- .set(OmsOrder::getStatus, OrderStatusEnum.CANCELED.getValue()));
- // 关单成功释放锁定的商品库存
- rabbitTemplate.convertAndSend("stock.exchange", "stock.release.routing.key", orderSn);
- } else { // 订单非【待付款】状态无需关闭
- result = true;
- }
- return result;
- }
-
- /**
- * 删除订单
- *
- * @param orderId 订单ID
- * @return true/false
- */
- @Override
- public boolean deleteOrder(Long orderId) {
- OmsOrder order = this.getById(orderId);
- Assert.isTrue(order != null, "删除失败,订单不存在!");
-
- Assert.isTrue(
- OrderStatusEnum.CANCELED.getValue().equals(order.getStatus())
- || OrderStatusEnum.UNPAID.getValue().equals(order.getStatus())
- ,
- "当前状态订单不能删除"
- );
-
- return this.removeById(orderId);
- }
-
- @Override
- public void handleWxPayOrderNotify(SignatureHeader signatureHeader, String notifyData) throws WxPayException {
- log.info("开始处理支付结果通知");
- // 解密支付通知内容
- final WxPayOrderNotifyV3Result.DecryptNotifyResult result = this.wxPayService.parseOrderNotifyV3Result(notifyData, signatureHeader).getResult();
- log.debug("支付通知解密成功:[{}]", result.toString());
- // 根据商户订单号查询订单
- OmsOrder orderDO = this.getOne(new LambdaQueryWrapper()
- .eq(OmsOrder::getOutTradeNo, result.getOutTradeNo())
- );
- // 支付成功处理
- if (WxPayConstants.WxpayTradeStatus.SUCCESS.equals(result.getTradeState())) {
- orderDO.setStatus(OrderStatusEnum.PAID.getValue());
- orderDO.setTransactionId(result.getTransactionId());
- orderDO.setPayTime(new Date());
- this.updateById(orderDO);
- }
- log.info("账单更新成功");
- // 支付成功删除购物车已勾选的商品
- cartService.removeCheckedItem();
- }
-
- @Override
- public void handleWxPayRefundNotify(SignatureHeader signatureHeader, String notifyData) throws WxPayException {
- log.info("开始处理退款结果通知");
- // 解密支付通知内容
- final WxPayRefundNotifyV3Result.DecryptNotifyResult result = this.wxPayService.parseRefundNotifyV3Result(notifyData, signatureHeader).getResult();
- log.debug("退款通知解密成功:[{}]", result.toString());
- // 根据商户退款单号查询订单
- QueryWrapper wrapper = new QueryWrapper<>();
- wrapper.lambda().eq(OmsOrder::getOutTradeNo, result.getOutTradeNo());
- OmsOrder orderDO = this.getOne(wrapper);
- // 退款成功处理
- if (WxPayConstants.RefundStatus.SUCCESS.equals(result.getRefundStatus())) {
- orderDO.setStatus(OrderStatusEnum.COMPLETE.getValue());
- orderDO.setRefundId(result.getRefundId());
- this.updateById(orderDO);
- }
- log.info("账单更新成功");
- }
-
-
- /**
- * 获取订单的商品明细信息
- *
- * 创建订单两种方式,1:直接购买;2:购物车结算
- *
- * @param skuId 直接购买必有值,购物车结算必没值
- * @return
- */
- private List getOrderItems(Long skuId, Long memberId) {
- List orderItems;
- if (skuId != null) { // 直接购买
- orderItems = new ArrayList<>();
- SkuDTO skuDTO = skuFeignClient.getSkuInfo(skuId).getData();
- OrderItemDTO orderItemDTO = new OrderItemDTO();
- BeanUtil.copyProperties(skuDTO, orderItemDTO);
-
- orderItemDTO.setCount(1); // 直接购买商品的数量为1
- orderItems.add(orderItemDTO);
- } else { // 购物车结算
- List cartItems = cartService.listCartItems(memberId);
- orderItems = cartItems.stream().filter(CartItemDTO::getChecked).map(cartItem -> {
- OrderItemDTO orderItemDTO = new OrderItemDTO();
- BeanUtil.copyProperties(cartItem, orderItemDTO);
- return orderItemDTO;
- }).collect(Collectors.toList());
- }
- return orderItems;
- }
-
-}
diff --git a/mall-oms/oms-boot/src/main/resources/mapper/OmsOrderItemMapper.xml b/mall-oms/oms-boot/src/main/resources/mapper/OmsOrderItemMapper.xml
index 5be67e422..6c52afe99 100644
--- a/mall-oms/oms-boot/src/main/resources/mapper/OmsOrderItemMapper.xml
+++ b/mall-oms/oms-boot/src/main/resources/mapper/OmsOrderItemMapper.xml
@@ -4,16 +4,17 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
- com.github.whvcse
- easy-captcha
- ${easy-captcha.version}
-
-
com.aliyun
aliyun-java-sdk-core
diff --git a/youlai-auth/pom.xml b/youlai-auth/pom.xml
index 20be2b37e..46cab7fd3 100644
--- a/youlai-auth/pom.xml
+++ b/youlai-auth/pom.xml
@@ -5,7 +5,7 @@
youlai-mall
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-auth/src/main/java/com/youlai/auth/extension/mobile/SmsCodeAuthenticationProvider.java b/youlai-auth/src/main/java/com/youlai/auth/extension/mobile/SmsCodeAuthenticationProvider.java
index dc2fb3e7e..989e1d232 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/extension/mobile/SmsCodeAuthenticationProvider.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/extension/mobile/SmsCodeAuthenticationProvider.java
@@ -1,5 +1,6 @@
package com.youlai.auth.extension.mobile;
+import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.youlai.auth.userdetails.member.MemberUserDetailsServiceImpl;
import com.youlai.common.constant.SecurityConstants;
@@ -19,7 +20,7 @@
* 短信验证码认证授权提供者
*
* @author haoxr
- * @date 2021/9/25
+ * @since 2.0.0
*/
@Data
public class SmsCodeAuthenticationProvider implements AuthenticationProvider {
@@ -34,6 +35,8 @@ public Authentication authenticate(Authentication authentication) throws Authent
String mobile = (String) authenticationToken.getPrincipal();
String code = (String) authenticationToken.getCredentials();
+ Assert.notNull("短信验证码不能为空");
+
if (!code.equals("666666")) { // 666666 是后门,因为短信收费,正式环境删除这个if分支
String codeKey = SecurityConstants.SMS_CODE_PREFIX + mobile;
String correctCode = redisTemplate.opsForValue().get(codeKey);
diff --git a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationProvider.java b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationProvider.java
index 7e0220b88..20ab08fa8 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationProvider.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationProvider.java
@@ -1,15 +1,8 @@
package com.youlai.auth.extension.wechat;
import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
-import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
-import cn.hutool.core.bean.BeanUtil;
import com.youlai.auth.userdetails.member.MemberUserDetailsServiceImpl;
-import com.youlai.common.result.Result;
-import com.youlai.common.result.ResultCode;
import com.youlai.mall.ums.api.MemberFeignClient;
-import com.youlai.mall.ums.dto.MemberAuthDTO;
-import com.youlai.mall.ums.dto.MemberDTO;
import lombok.Data;
import lombok.SneakyThrows;
import org.springframework.security.authentication.AuthenticationProvider;
@@ -18,13 +11,13 @@
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
-import java.util.HashSet;
+import java.util.Collections;
/**
* 微信认证提供者
*
- * @author haoxr
- * @date 2021/9/25
+ * @author haoxr
+ * @since 2021/9/25
*/
@Data
public class WechatAuthenticationProvider implements AuthenticationProvider {
@@ -45,26 +38,11 @@ public class WechatAuthenticationProvider implements AuthenticationProvider {
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
WechatAuthenticationToken authenticationToken = (WechatAuthenticationToken) authentication;
String code = (String) authenticationToken.getPrincipal();
+ String encryptedData = authenticationToken.getEncryptedData();
+ String iv = authenticationToken.getIv();
- WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code);
- String openid = sessionInfo.getOpenid();
- Result memberAuthResult = memberFeignClient.loadUserByOpenId(openid);
- // 微信用户不存在,注册成为新会员
- if (memberAuthResult != null && ResultCode.USER_NOT_EXIST.getCode().equals(memberAuthResult.getCode())) {
-
- String sessionKey = sessionInfo.getSessionKey();
- String encryptedData = authenticationToken.getEncryptedData();
- String iv = authenticationToken.getIv();
- // 解密 encryptedData 获取用户信息
- WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
-
- MemberDTO memberDTO = new MemberDTO();
- BeanUtil.copyProperties(userInfo, memberDTO);
- memberDTO.setOpenid(openid);
- memberFeignClient.addMember(memberDTO);
- }
- UserDetails userDetails = ((MemberUserDetailsServiceImpl) userDetailsService).loadUserByOpenId(openid);
- WechatAuthenticationToken result = new WechatAuthenticationToken(userDetails, new HashSet<>());
+ UserDetails userDetails = ((MemberUserDetailsServiceImpl) userDetailsService).loadUserByWechatCode(code,encryptedData,iv);
+ WechatAuthenticationToken result = new WechatAuthenticationToken(userDetails, Collections.EMPTY_SET);
result.setDetails(authentication.getDetails());
return result;
}
diff --git a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationToken.java b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationToken.java
index 0c1356135..71f0fef61 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationToken.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatAuthenticationToken.java
@@ -8,8 +8,10 @@
import java.util.Collection;
/**
- * @author haoxr
- * @date 2021/9/25
+ * 微信认证令牌
+ *
+ * @author haoxr
+ * @since 2021/9/25
*/
public class WechatAuthenticationToken extends AbstractAuthenticationToken {
private static final long serialVersionUID = 550L;
diff --git a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatTokenGranter.java b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatTokenGranter.java
index 67984d1b9..35586742d 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatTokenGranter.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatTokenGranter.java
@@ -11,10 +11,10 @@
import java.util.Map;
/**
- * 微信授权者
+ * 微信授权者
*
- * @author haoxr
- * @date 2021/9/25
+ * @author haoxr
+ * @since 2021/9/25
*/
public class WechatTokenGranter extends AbstractTokenGranter {
@@ -47,7 +47,7 @@ protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, Tok
parameters.remove("encryptedData");
parameters.remove("iv");
- Authentication userAuth = new WechatAuthenticationToken(code, encryptedData,iv); // 未认证状态
+ Authentication userAuth = new WechatAuthenticationToken(code, encryptedData, iv); // 未认证状态
((AbstractAuthenticationToken) userAuth).setDetails(parameters);
try {
diff --git a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatUserInfo.java b/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatUserInfo.java
deleted file mode 100644
index 5ea1cb785..000000000
--- a/youlai-auth/src/main/java/com/youlai/auth/extension/wechat/WechatUserInfo.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.youlai.auth.extension.wechat;
-
-import lombok.Data;
-
-/**
- * 微信用户信息
- *
- * @author haoxr
- * @date 2021/10/4
- */
-@Data
-public class WechatUserInfo {
- private String avatarUrl;
-
- private String city;
-
- private String country;
-
- private Integer gender;
-
- private String language;
-
- private String nickName;
-
- private String province;
-
-}
diff --git a/youlai-auth/src/main/java/com/youlai/auth/userdetails/member/MemberUserDetailsServiceImpl.java b/youlai-auth/src/main/java/com/youlai/auth/userdetails/member/MemberUserDetailsServiceImpl.java
index 4e6992178..5a47db27c 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/userdetails/member/MemberUserDetailsServiceImpl.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/userdetails/member/MemberUserDetailsServiceImpl.java
@@ -1,10 +1,19 @@
package com.youlai.auth.userdetails.member;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Assert;
+import com.youlai.common.enums.StatusEnum;
import com.youlai.common.result.Result;
import com.youlai.common.result.ResultCode;
import com.youlai.mall.ums.api.MemberFeignClient;
import com.youlai.mall.ums.dto.MemberAuthDTO;
+import com.youlai.mall.ums.dto.MemberRegisterDTO;
import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.security.authentication.AccountExpiredException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
@@ -23,6 +32,7 @@
public class MemberUserDetailsServiceImpl implements UserDetailsService {
private final MemberFeignClient memberFeignClient;
+ private final WxMaService wxMaService;
@Override
public UserDetails loadUserByUsername(String username) {
@@ -84,4 +94,59 @@ public UserDetails loadUserByOpenId(String openId) {
}
return userDetails;
}
+
+ /**
+ * 获取会员信息
+ *
+ * @param code
+ * @param encryptedData
+ * @param iv
+ * @return
+ * @throws WxErrorException
+ */
+ public UserDetails loadUserByWechatCode(String code, String encryptedData, String iv) throws WxErrorException {
+ // 根据 code 获取 openid
+ WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code);
+ String openid = sessionInfo.getOpenid();
+
+ // 根据 openid 获取微信用户认证信息
+ Result getMemberAuthInfoResult = memberFeignClient.loadUserByOpenId(openid);
+
+ MemberAuthDTO memberAuthInfo = null;
+
+ // 会员不存在,注册成为新会员
+ if (ResultCode.USER_NOT_EXIST.getCode().equals(getMemberAuthInfoResult.getCode())) {
+ String sessionKey = sessionInfo.getSessionKey();
+ // 解密 encryptedData 获取用户信息
+ WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
+
+ MemberRegisterDTO memberRegisterInfo = new MemberRegisterDTO();
+ BeanUtil.copyProperties(userInfo, memberRegisterInfo);
+ memberRegisterInfo.setOpenid(openid);
+ // 注册会员
+ Result registerMemberResult = memberFeignClient.registerMember(memberRegisterInfo);
+ // 注册成功将会员信息赋值给会员认证信息
+ Long memberId;
+ if (Result.isSuccess(registerMemberResult) && (memberId = registerMemberResult.getData()) != null) {
+ memberAuthInfo = new MemberAuthDTO(memberId, openid, StatusEnum.ENABLE.getValue());
+ }
+ } else {
+ Assert.isTrue((memberAuthInfo = getMemberAuthInfoResult.getData()) != null, "获取会员认证信息失败");
+ }
+
+ // 用户不存在
+ if (memberAuthInfo == null) {
+ throw new UsernameNotFoundException(ResultCode.USER_NOT_EXIST.getMsg());
+ }
+
+ UserDetails userDetails = new MemberUserDetails(memberAuthInfo);
+ if (!userDetails.isEnabled()) {
+ throw new DisabledException("该账户已被禁用!");
+ } else if (!userDetails.isAccountNonLocked()) {
+ throw new LockedException("该账号已被锁定!");
+ } else if (!userDetails.isAccountNonExpired()) {
+ throw new AccountExpiredException("该账号已过期!");
+ }
+ return userDetails;
+ }
}
diff --git a/youlai-auth/src/main/java/com/youlai/auth/userdetails/user/SysUserDetailsServiceImpl.java b/youlai-auth/src/main/java/com/youlai/auth/userdetails/user/SysUserDetailsServiceImpl.java
index eb1fbed4e..9e2f01629 100644
--- a/youlai-auth/src/main/java/com/youlai/auth/userdetails/user/SysUserDetailsServiceImpl.java
+++ b/youlai-auth/src/main/java/com/youlai/auth/userdetails/user/SysUserDetailsServiceImpl.java
@@ -26,10 +26,9 @@ public class SysUserDetailsServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) {
- Result result = userFeignClient.getUserAuthInfo(username);
+ UserAuthInfo userAuthInfo = userFeignClient.getUserAuthInfo(username);
- UserAuthInfo userAuthInfo = null;
- Assert.isTrue(Result.isSuccess(result) && (userAuthInfo = result.getData()) != null,
+ Assert.isTrue(userAuthInfo!= null,
"用户不存在");
if (!StatusEnum.ENABLE.getValue().equals(userAuthInfo.getStatus()) ) {
diff --git a/youlai-common/common-core/pom.xml b/youlai-common/common-core/pom.xml
index 6d0d4025c..fb2e7a634 100644
--- a/youlai-common/common-core/pom.xml
+++ b/youlai-common/common-core/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-core/src/main/java/com/youlai/common/base/IBaseEnum.java b/youlai-common/common-core/src/main/java/com/youlai/common/base/IBaseEnum.java
index 089d983b7..2efe8afea 100644
--- a/youlai-common/common-core/src/main/java/com/youlai/common/base/IBaseEnum.java
+++ b/youlai-common/common-core/src/main/java/com/youlai/common/base/IBaseEnum.java
@@ -45,7 +45,10 @@ static & IBaseEnum> E getEnumByValue(Object value, Class c
* @return
*/
static & IBaseEnum> String getLabelByValue(Object value, Class clazz) {
- Objects.requireNonNull(value);
+ if (value == null) {
+ return null;
+ }
+
EnumSet allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getValue(), value))
diff --git a/youlai-common/common-elasticsearch/pom.xml b/youlai-common/common-elasticsearch/pom.xml
index 83f483e2e..001670117 100644
--- a/youlai-common/common-elasticsearch/pom.xml
+++ b/youlai-common/common-elasticsearch/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-file/pom.xml b/youlai-common/common-file/pom.xml
index 614501828..fcfcf4620 100644
--- a/youlai-common/common-file/pom.xml
+++ b/youlai-common/common-file/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-log/pom.xml b/youlai-common/common-log/pom.xml
index f9e110c76..ff3f7be2c 100644
--- a/youlai-common/common-log/pom.xml
+++ b/youlai-common/common-log/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-mybatis/pom.xml b/youlai-common/common-mybatis/pom.xml
index 16a99374e..f9b0ff66d 100644
--- a/youlai-common/common-mybatis/pom.xml
+++ b/youlai-common/common-mybatis/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-rabbitmq/pom.xml b/youlai-common/common-rabbitmq/pom.xml
index 961848c68..1a10a315e 100644
--- a/youlai-common/common-rabbitmq/pom.xml
+++ b/youlai-common/common-rabbitmq/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-redis/pom.xml b/youlai-common/common-redis/pom.xml
index 426d0b902..89b42aefd 100644
--- a/youlai-common/common-redis/pom.xml
+++ b/youlai-common/common-redis/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-redis/src/main/java/com/youlai/common/redis/BusinessSnGenerator.java b/youlai-common/common-redis/src/main/java/com/youlai/common/redis/BusinessSnGenerator.java
deleted file mode 100644
index 27e37896b..000000000
--- a/youlai-common/common-redis/src/main/java/com/youlai/common/redis/BusinessSnGenerator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.youlai.common.redis;
-
-import cn.hutool.core.util.StrUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-
-@Component
-@Slf4j
-@RequiredArgsConstructor
-public class BusinessSnGenerator {
-
-
- private final RedisTemplate redisTemplate;
-
- /**
- * @param digit 业务序号位数
- * @return
- */
- public String generateSerialNo(String businessType, Integer digit) {
- if (StrUtil.isBlank(businessType)) {
- businessType = "COMMON";
- }
- String date = LocalDateTime.now(ZoneOffset.of("+8"))
- .format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- String key = "SN:" + businessType + ":" + date;
- Long increment = redisTemplate.opsForValue().increment(key);
- return date + String.format("%0" + digit + "d", increment);
- }
-
- public String generateSerialNo(Integer digit) {
- return this.generateSerialNo(null,6);
- }
-
- public String generateSerialNo(String businessType) {
- return this.generateSerialNo(businessType,6);
- }
-
-}
diff --git a/youlai-common/common-redis/src/main/java/com/youlai/common/redis/RedisCacheConfig.java b/youlai-common/common-redis/src/main/java/com/youlai/common/redis/RedisCacheConfig.java
index f8559b066..affae9b2f 100644
--- a/youlai-common/common-redis/src/main/java/com/youlai/common/redis/RedisCacheConfig.java
+++ b/youlai-common/common-redis/src/main/java/com/youlai/common/redis/RedisCacheConfig.java
@@ -16,6 +16,7 @@
* Redis缓存配置
*
* @author haoxr
+ * @since 1.0.0
*/
@EnableConfigurationProperties(CacheProperties.class)
@Configuration
@@ -23,7 +24,7 @@
public class RedisCacheConfig {
@Bean
- public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties){
+ public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory, CacheProperties cacheProperties) {
return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration(cacheProperties))
.build();
diff --git a/youlai-common/common-redis/src/main/resources/META-INF/spring.factories b/youlai-common/common-redis/src/main/resources/META-INF/spring.factories
index 20fdfd17e..6e54ad980 100644
--- a/youlai-common/common-redis/src/main/resources/META-INF/spring.factories
+++ b/youlai-common/common-redis/src/main/resources/META-INF/spring.factories
@@ -1,6 +1,5 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.youlai.common.redis.RedisConfig,\
- com.youlai.common.redis.BusinessSnGenerator,\
com.youlai.common.redis.RedissonConfig,\
com.youlai.common.redis.RedisCacheConfig
diff --git a/youlai-common/common-seata/pom.xml b/youlai-common/common-seata/pom.xml
index b309efd5d..e0a7991d2 100644
--- a/youlai-common/common-seata/pom.xml
+++ b/youlai-common/common-seata/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
@@ -23,15 +23,10 @@
spring-cloud-starter-alibaba-seata
- io.seata
- seata-spring-boot-starter
+ com.alibaba
+ druid
-
- io.seata
- seata-spring-boot-starter
- ${seata.version}
-
\ No newline at end of file
diff --git a/youlai-common/common-security/pom.xml b/youlai-common/common-security/pom.xml
index 61c11e545..400bcde3a 100644
--- a/youlai-common/common-security/pom.xml
+++ b/youlai-common/common-security/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-sms/pom.xml b/youlai-common/common-sms/pom.xml
index f3c33af2c..efdaa43f7 100644
--- a/youlai-common/common-sms/pom.xml
+++ b/youlai-common/common-sms/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-common/common-web/pom.xml b/youlai-common/common-web/pom.xml
index cc999bc8e..5af627bc8 100644
--- a/youlai-common/common-web/pom.xml
+++ b/youlai-common/common-web/pom.xml
@@ -5,7 +5,7 @@
youlai-common
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
@@ -79,6 +79,13 @@
spring-boot-starter-validation
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ true
+
+
+
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignConfig.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignConfig.java
index 2d114cf15..56a00f6cb 100644
--- a/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignConfig.java
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignConfig.java
@@ -18,7 +18,7 @@
* Feign相关配置类
*
* @author Gadfly
- * @since 2021-08-06 9:47
+ * @since 2021/08/06
*/
@Configuration
@@ -31,7 +31,7 @@ public class FeignConfig {
*/
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet servlet) {
- servlet.setThreadContextInheritable(true);
+ servlet.setThreadContextInheritable(true); // 子线程可以继承父线程上下文信息
return new ServletRegistrationBean<>(servlet, "/**");
}
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignDecoderConfig.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignDecoderConfig.java
new file mode 100644
index 000000000..c187747ea
--- /dev/null
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignDecoderConfig.java
@@ -0,0 +1,23 @@
+package com.youlai.common.web.config;
+
+import com.youlai.common.web.decoder.FeignDecoder;
+import feign.codec.Decoder;
+import feign.optionals.OptionalDecoder;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * @author haoxr
+ * @since 2023/8/24
+ */
+public class FeignDecoderConfig {
+
+ @Bean
+ public Decoder feignDecoder(ObjectProvider messageConverters) {
+ return new OptionalDecoder((new ResponseEntityDecoder(new FeignDecoder(new SpringDecoder(messageConverters)))));
+ }
+
+}
diff --git a/mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/config/RestTemplateConfig.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/RestTemplateConfig.java
similarity index 95%
rename from mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/config/RestTemplateConfig.java
rename to youlai-common/common-web/src/main/java/com/youlai/common/web/config/RestTemplateConfig.java
index 38c5d52e0..933aa6cdc 100644
--- a/mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/config/RestTemplateConfig.java
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/RestTemplateConfig.java
@@ -1,4 +1,4 @@
-package com.youlai.mall.ums.config;
+package com.youlai.common.web.config;
import org.springframework.context.annotation.Bean;
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/config/ValidationConfig.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/ValidationConfig.java
index b633429e6..5c14bfa79 100644
--- a/youlai-common/common-web/src/main/java/com/youlai/common/web/config/ValidationConfig.java
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/config/ValidationConfig.java
@@ -14,7 +14,7 @@
* 运行时入参校验配置
*
* @author haoxr
- * @date 2022/11/10
+ * @since 2022/11/10
*/
@Configuration
public class ValidationConfig {
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/decoder/FeignDecoder.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/decoder/FeignDecoder.java
new file mode 100644
index 000000000..600739913
--- /dev/null
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/decoder/FeignDecoder.java
@@ -0,0 +1,60 @@
+package com.youlai.common.web.decoder;
+
+import cn.hutool.http.HttpStatus;
+import com.youlai.common.result.Result;
+import com.youlai.common.web.exception.BizException;
+import feign.FeignException;
+import feign.Response;
+import feign.codec.DecodeException;
+import feign.codec.Decoder;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+/**
+ * @author haoxr
+ * @link https://zhuanlan.zhihu.com/p/545505705
+ * @since 2023/8/23
+ */
+public class FeignDecoder implements Decoder {
+
+ private final SpringDecoder decoder;
+
+ public FeignDecoder(SpringDecoder decoder) {
+ this.decoder = decoder;
+ }
+
+ @Override
+ public Object decode(Response response, Type type) throws IOException, FeignException {
+ Method method = response.request().requestTemplate().methodMetadata().method();
+ boolean notTheSame = method.getReturnType() != Result.class;
+ if (notTheSame) {
+ Type newType = new ParameterizedType() {
+ @Override
+ public Type[] getActualTypeArguments() {
+ return new Type[]{type};
+ }
+
+ @Override
+ public Type getRawType() {
+ return Result.class;
+ }
+
+ @Override
+ public Type getOwnerType() {
+ return null;
+ }
+ };
+ Result> result = (Result>) this.decoder.decode(response, newType);
+ if (Result.isSuccess(result)) {
+ return result.getData();
+ } else {
+ throw new DecodeException(HttpStatus.HTTP_INTERNAL_ERROR, result.getMsg(), response.request());
+ }
+ }
+ return this.decoder.decode(response, type);
+ }
+}
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/BizException.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/BizException.java
index 82de5cf6c..7830ff28f 100644
--- a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/BizException.java
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/BizException.java
@@ -7,7 +7,7 @@
* 自定义业务异常
*
* @author haoxr
- * @date 2022/7/31
+ * @since 0.0.1
*/
@Getter
public class BizException extends RuntimeException {
diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java
index 11e4f37e4..73c06f903 100644
--- a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java
+++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java
@@ -5,6 +5,7 @@
import com.youlai.common.result.Result;
import com.youlai.common.result.ResultCode;
import feign.FeignException;
+import feign.codec.DecodeException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException;
import org.springframework.context.support.DefaultMessageSourceResolvable;
@@ -180,6 +181,11 @@ public Result processException(FeignException.BadRequest e) {
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
+ @ExceptionHandler(DecodeException.class)
+ public Result handleDecodeException(DecodeException e) {
+ return Result.failed(e.getMessage());
+ }
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(BizException.class)
public Result handleBizException(BizException e) {
log.error("biz exception:{}", e.getMessage(), e);
diff --git a/youlai-common/common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/youlai-common/common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 1c0660c8c..815830628 100644
--- a/youlai-common/common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/youlai-common/common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,4 @@
com.youlai.common.web.config.WebMvcConfig
com.youlai.common.web.config.FeignConfig
+ com.youlai.common.web.config.RestTemplateConfig
com.youlai.common.web.exception.GlobalExceptionHandler
\ No newline at end of file
diff --git a/youlai-common/pom.xml b/youlai-common/pom.xml
index 961367a4b..59c0ac530 100644
--- a/youlai-common/pom.xml
+++ b/youlai-common/pom.xml
@@ -7,7 +7,7 @@
youlai-mall
com.youlai
- 2.2.0
+ 2.4.1
youlai-common
diff --git a/youlai-gateway/pom.xml b/youlai-gateway/pom.xml
index 3816e542b..3db401c75 100644
--- a/youlai-gateway/pom.xml
+++ b/youlai-gateway/pom.xml
@@ -6,7 +6,7 @@
youlai-mall
com.youlai
- 2.2.0
+ 2.4.1
youlai-gateway
@@ -96,11 +96,6 @@
common-redis
-
- com.github.whvcse
- easy-captcha
-
-
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/enums/CaptchaTypeEnum.java b/youlai-gateway/src/main/java/com/youlai/gateway/captcha/enums/CaptchaTypeEnum.java
deleted file mode 100644
index 18ac70acc..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/enums/CaptchaTypeEnum.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.youlai.gateway.captcha.enums;
-
-/**
- * 验证码类型枚举
- *
- * @author haoxr
- * @date 2022/5/18 12:14
- */
-public enum CaptchaTypeEnum {
-
- /**
- * 算数
- */
- ARITHMETIC,
- /**
- * 中文
- */
- CHINESE,
- /**
- * 中文闪图
- */
- CHINESE_GIF,
- /**
- * 闪图
- */
- GIF,
-
- SPEC
-
-
-}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/handler/CaptchaHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/captcha/handler/CaptchaHandler.java
deleted file mode 100644
index cbdf7404e..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/handler/CaptchaHandler.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.youlai.gateway.captcha.handler;
-
-import cn.hutool.core.util.IdUtil;
-import com.wf.captcha.base.Captcha;
-import com.youlai.common.constant.SecurityConstants;
-import com.youlai.common.result.Result;
-import com.youlai.gateway.captcha.producer.CaptchaProducer;
-import com.youlai.gateway.captcha.enums.CaptchaTypeEnum;
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.server.HandlerFunction;
-import org.springframework.web.reactive.function.server.ServerRequest;
-import org.springframework.web.reactive.function.server.ServerResponse;
-import reactor.core.publisher.Mono;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * 验证码处理器
- *
- * @author haoxr
- * @date 2021/10/4
- */
-@Component
-@RequiredArgsConstructor
-public class CaptchaHandler implements HandlerFunction {
-
- private final CaptchaProducer captchaProducer;
- private final StringRedisTemplate stringRedisTemplate;
-
- /**
- * 验证码类型,默认:ARITHMETIC
- */
- @Value("${captcha.type:ARITHMETIC}")
- CaptchaTypeEnum captchaType;
-
- /**
- * 验证码值的有效期(单位:秒),默认:120
- */
- @Value("${captcha.ttl:120}")
- long captchaValueTtl ;
-
- @Override
- public Mono handle(ServerRequest request) {
-
- Captcha captcha = captchaProducer.getCaptcha(captchaType);
- String captchaValue = captcha.text();
- // 对于数学类型的需要进行处理
- if (captchaType == null || captchaType == CaptchaTypeEnum.ARITHMETIC) {
- if (captcha.getCharType() - 1 == CaptchaTypeEnum.ARITHMETIC.ordinal() && captchaValue.contains(".")) {
- captchaValue = captchaValue.split("\\.")[0];
- }
- }
-
- // 缓存验证码至Redis
- String uuid = IdUtil.simpleUUID();
- stringRedisTemplate.opsForValue().set(SecurityConstants.VERIFY_CODE_KEY_PREFIX + uuid, captchaValue, captchaValueTtl, TimeUnit.SECONDS);
-
- // 获取到验证码Base64编码字符串
- String captchaBase64 = captcha.toBase64();
- Map result = new HashMap<>(2);
- result.put("verifyCodeKey", uuid);
- result.put("verifyCodeImg", captchaBase64);
-
- return ServerResponse.ok().body(BodyInserters.fromValue(Result.success(result)));
- }
-}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/producer/CaptchaProducer.java b/youlai-gateway/src/main/java/com/youlai/gateway/captcha/producer/CaptchaProducer.java
deleted file mode 100644
index 506f4df27..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/producer/CaptchaProducer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.youlai.gateway.captcha.producer;
-
-import com.wf.captcha.*;
-import com.wf.captcha.base.Captcha;
-import com.youlai.gateway.captcha.enums.CaptchaTypeEnum;
-import org.springframework.stereotype.Component;
-
-import java.awt.*;
-
-@Component
-public class CaptchaProducer {
-
- /**
- * 验证码内容长度
- */
- private int length = 4;
- /**
- * 验证码宽度
- */
- private int width = 120;
- /**
- * 验证码高度
- */
- private int height = 36;
-
- /**
- * 验证码字体
- */
- private String fontName = "Verdana";
-
- /**
- * 字体风格
- */
- private Integer fontStyle = Font.PLAIN;
-
- /**
- * 字体大小
- */
- private int fontSize = 20;
-
- public Captcha getCaptcha(CaptchaTypeEnum codeType) {
- Captcha captcha;
- switch (codeType) {
- case ARITHMETIC:
- captcha = new FixedArithmeticCaptcha(width, height); // 算术类型
- captcha.setLen(2); //固定设置为两位,图片为算数运算表达式
- break;
- case CHINESE:
- captcha = new ChineseCaptcha(width, height);
- captcha.setLen(length);
- break;
- case CHINESE_GIF:
- captcha = new ChineseGifCaptcha(width, height);
- captcha.setLen(length);
- break;
- case GIF:
- captcha = new GifCaptcha(width, height);//最后一位是位数
- captcha.setLen(length);
- break;
- case SPEC:
- captcha = new SpecCaptcha(width, height);
- captcha.setLen(length);
- break;
- default:
- throw new RuntimeException("验证码配置信息错误!");
- }
- captcha.setFont(new Font(fontName, fontStyle, fontSize));
- return captcha;
- }
-
- static class FixedArithmeticCaptcha extends ArithmeticCaptcha {
- public FixedArithmeticCaptcha(int width, int height) {
- super(width, height);
- }
-
- @Override
- protected char[] alphas() {
- // 生成随机数字和运算符
- int n1 = num(1, 10), n2 = num(1, 10);
- int opt = num(3);
-
- // 计算结果
- int res = new int[]{n1 + n2, n1 - n2, n1 * n2}[opt];
- // 转换为字符运算符
- char optChar = "+-x".charAt(opt);
-
- this.setArithmeticString(String.format("%s%c%s=?", n1, optChar, n2));
- this.chars = String.valueOf(res);
-
- return chars.toCharArray();
- }
- }
-
-}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/sentinel/SentinelConfiguration.java b/youlai-gateway/src/main/java/com/youlai/gateway/config/SentinelConfiguration.java
similarity index 96%
rename from youlai-gateway/src/main/java/com/youlai/gateway/sentinel/SentinelConfiguration.java
rename to youlai-gateway/src/main/java/com/youlai/gateway/config/SentinelConfiguration.java
index 59294a1a1..763f3a874 100644
--- a/youlai-gateway/src/main/java/com/youlai/gateway/sentinel/SentinelConfiguration.java
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/config/SentinelConfiguration.java
@@ -1,4 +1,4 @@
-package com.youlai.gateway.sentinel;
+package com.youlai.gateway.config;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/config/SwaggerResourceConfig.java b/youlai-gateway/src/main/java/com/youlai/gateway/config/SwaggerResourceConfig.java
similarity index 97%
rename from youlai-gateway/src/main/java/com/youlai/gateway/swagger/config/SwaggerResourceConfig.java
rename to youlai-gateway/src/main/java/com/youlai/gateway/config/SwaggerResourceConfig.java
index 7123bdbd7..67762f9e5 100644
--- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/config/SwaggerResourceConfig.java
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/config/SwaggerResourceConfig.java
@@ -1,4 +1,4 @@
-package com.youlai.gateway.swagger.config;
+package com.youlai.gateway.config;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/handler/CaptchaHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/handler/CaptchaHandler.java
new file mode 100644
index 000000000..9e6a9b610
--- /dev/null
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/handler/CaptchaHandler.java
@@ -0,0 +1,52 @@
+package com.youlai.gateway.handler;
+
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.GifCaptcha;
+import cn.hutool.core.util.IdUtil;
+import com.youlai.common.constant.SecurityConstants;
+import com.youlai.common.result.Result;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.server.HandlerFunction;
+import org.springframework.web.reactive.function.server.ServerRequest;
+import org.springframework.web.reactive.function.server.ServerResponse;
+import reactor.core.publisher.Mono;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 验证码处理器
+ *
+ * @author haoxr
+ * @since 2.4.1
+ */
+@Component
+@RequiredArgsConstructor
+public class CaptchaHandler implements HandlerFunction {
+
+ private final StringRedisTemplate redisTemplate;
+
+ @Override
+ public Mono handle(ServerRequest request) {
+
+ // 获取验证码
+ GifCaptcha captcha = CaptchaUtil.createGifCaptcha(120, 40, 4); // 宽、高、位数
+ String captchaCode = captcha.getCode(); // 验证码
+ String captchaBase64 = captcha.getImageBase64Data(); // 验证码图片Base64
+
+ // 验证码文本缓存至Redis,用于登录校验
+ String verifyCodeKey = IdUtil.fastSimpleUUID();
+ redisTemplate.opsForValue().set(SecurityConstants.VERIFY_CODE_KEY_PREFIX + verifyCodeKey, captchaCode,
+ 120, TimeUnit.SECONDS);
+
+ Map result = new HashMap<>(2);
+ result.put("verifyCodeKey", verifyCodeKey);
+ result.put("verifyCodeImg", captchaBase64);
+
+ return ServerResponse.ok().body(BodyInserters.fromValue(Result.success(result)));
+ }
+}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/handler/SwaggerHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/handler/SwaggerHandler.java
new file mode 100644
index 000000000..2bd17954d
--- /dev/null
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/handler/SwaggerHandler.java
@@ -0,0 +1,65 @@
+package com.youlai.gateway.handler;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.server.ServerRequest;
+import org.springframework.web.reactive.function.server.ServerResponse;
+import reactor.core.publisher.Mono;
+import springfox.documentation.swagger.web.*;
+
+import java.util.Optional;
+
+/**
+ * Swagger 处理器
+ *
+ * @author haoxr
+ * @since 2023/9/21
+ */
+@Component
+@RequiredArgsConstructor
+public class SwaggerHandler {
+
+ private final SwaggerResourcesProvider swaggerResources;
+
+ @Autowired(required = false)
+ private SecurityConfiguration securityConfiguration;
+
+ @Autowired(required = false)
+ private UiConfiguration uiConfiguration;
+
+
+ /**
+ * 聚合各个服务的 swagger 接口
+ */
+ public Mono handleResource(ServerRequest request) {
+ return ServerResponse.ok()
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(BodyInserters
+ .fromValue(swaggerResources.get()));
+ }
+
+ /**
+ * 权限处理器
+ */
+ public Mono handleSecurity(ServerRequest request) {
+ return ServerResponse.ok()
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(BodyInserters
+ .fromValue(Optional.ofNullable(securityConfiguration)
+ .orElse(SecurityConfigurationBuilder.builder().build())));
+ }
+
+ /**
+ * UI处理器
+ */
+ public Mono handleUi(ServerRequest request) {
+ return ServerResponse.ok()
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(BodyInserters
+ .fromValue(Optional.ofNullable(uiConfiguration)
+ .orElse(UiConfigurationBuilder.builder().build())));
+ }
+}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/router/CaptchaRouter.java b/youlai-gateway/src/main/java/com/youlai/gateway/router/CaptchaRouter.java
similarity index 78%
rename from youlai-gateway/src/main/java/com/youlai/gateway/captcha/router/CaptchaRouter.java
rename to youlai-gateway/src/main/java/com/youlai/gateway/router/CaptchaRouter.java
index ae438c664..1d6154ce8 100644
--- a/youlai-gateway/src/main/java/com/youlai/gateway/captcha/router/CaptchaRouter.java
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/router/CaptchaRouter.java
@@ -1,6 +1,7 @@
-package com.youlai.gateway.captcha.router;
+package com.youlai.gateway.router;
-import com.youlai.gateway.captcha.handler.CaptchaHandler;
+import com.youlai.gateway.handler.CaptchaHandler;
+import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
@@ -13,16 +14,20 @@
* 验证码路由
*
* @author haoxr
- * @date 2022/5/17 12:10
+ * @since 2.4.1
*/
@Configuration
+@RequiredArgsConstructor
public class CaptchaRouter {
+ private final CaptchaHandler captchaHandler;
+
@Bean
- public RouterFunction captchaRouterFunction(CaptchaHandler captchaHandler) {
+ public RouterFunction captchaRouterFunction() {
return RouterFunctions
.route(RequestPredicates.GET("/captcha")
.and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), captchaHandler::handle);
}
+
}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/router/SwaggerRouter.java b/youlai-gateway/src/main/java/com/youlai/gateway/router/SwaggerRouter.java
similarity index 57%
rename from youlai-gateway/src/main/java/com/youlai/gateway/swagger/router/SwaggerRouter.java
rename to youlai-gateway/src/main/java/com/youlai/gateway/router/SwaggerRouter.java
index 864a92c98..f148b7ad0 100644
--- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/router/SwaggerRouter.java
+++ b/youlai-gateway/src/main/java/com/youlai/gateway/router/SwaggerRouter.java
@@ -1,8 +1,6 @@
-package com.youlai.gateway.swagger.router;
+package com.youlai.gateway.router;
-import com.youlai.gateway.swagger.handler.SwaggerResourceHandler;
-import com.youlai.gateway.swagger.handler.SwaggerSecurityHandler;
-import com.youlai.gateway.swagger.handler.SwaggerUiHandler;
+import com.youlai.gateway.handler.SwaggerHandler;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -12,35 +10,26 @@
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
+import static org.springframework.web.reactive.function.server.RequestPredicates.path;
+
/**
- * Swagger路由
+ * Swagger 路由
*
* @author haoxr
- * @date 2022/5/16 16:34
+ * @since 2022/5/16
*/
@Configuration
@RequiredArgsConstructor
public class SwaggerRouter {
- /**
- * 聚合各个服务的swagger接口
- */
- private final SwaggerResourceHandler swaggerResourceHandler;
- /**
- * 权限处理器
- */
- private final SwaggerSecurityHandler swaggerSecurityHandler;
- /**
- * UI处理器
- */
- private final SwaggerUiHandler swaggerUiHandler;
+ private final SwaggerHandler swaggerHandler;
@Bean
public RouterFunction swaggerRouterFunction() {
return RouterFunctions
- .route(RequestPredicates.GET("/swagger-resources/configuration/security").and(RequestPredicates.accept(MediaType.ALL)), swaggerSecurityHandler::handle)
- .andRoute(RequestPredicates.GET("/swagger-resources/configuration/ui").and(RequestPredicates.accept(MediaType.ALL)), swaggerUiHandler::handle)
- .andRoute(RequestPredicates.GET("/swagger-resources").and(RequestPredicates.accept(MediaType.ALL)), swaggerResourceHandler::handle);
+ .route(RequestPredicates.GET("/swagger-resources/configuration/security").and(RequestPredicates.accept(MediaType.ALL)), swaggerHandler::handleSecurity)
+ .andRoute(RequestPredicates.GET("/swagger-resources/configuration/ui").and(RequestPredicates.accept(MediaType.ALL)), swaggerHandler::handleUi)
+ .andRoute(RequestPredicates.GET("/swagger-resources").and(RequestPredicates.accept(MediaType.ALL)), swaggerHandler::handleResource);
}
}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerResourceHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerResourceHandler.java
deleted file mode 100644
index 42e7396c8..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerResourceHandler.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.youlai.gateway.swagger.handler;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.server.HandlerFunction;
-import org.springframework.web.reactive.function.server.ServerRequest;
-import org.springframework.web.reactive.function.server.ServerResponse;
-import reactor.core.publisher.Mono;
-import springfox.documentation.swagger.web.SwaggerResourcesProvider;
-
-
-/**
- * 聚合各个服务的swagger接口
- *
- * @author haoxr
- * @date 2022/5/17 0:53
- */
-@Component
-@RequiredArgsConstructor
-public class SwaggerResourceHandler implements HandlerFunction {
-
- private final SwaggerResourcesProvider swaggerResources;
-
- @Override
- public Mono handle(ServerRequest request) {
- Mono responseMono = ServerResponse.ok()
- .contentType(MediaType.APPLICATION_JSON)
- .body(BodyInserters
- .fromValue(swaggerResources.get()));
- return responseMono;
- }
-
-}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerSecurityHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerSecurityHandler.java
deleted file mode 100644
index 354530a14..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerSecurityHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.youlai.gateway.swagger.handler;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.server.HandlerFunction;
-import org.springframework.web.reactive.function.server.ServerRequest;
-import org.springframework.web.reactive.function.server.ServerResponse;
-import reactor.core.publisher.Mono;
-import springfox.documentation.swagger.web.SecurityConfiguration;
-import springfox.documentation.swagger.web.SecurityConfigurationBuilder;
-
-import java.util.Optional;
-
-
-/**
- * 权限处理器
- *
- * @author haoxr
- * @date 2022/5/17
- */
-@Component
-public class SwaggerSecurityHandler implements HandlerFunction {
-
- @Autowired(required = false)
- private SecurityConfiguration securityConfiguration;
-
- @Override
- public Mono handle(ServerRequest request) {
- Mono responseMono = ServerResponse.ok()
- .contentType(MediaType.APPLICATION_JSON)
- .body(BodyInserters
- .fromValue(Optional.ofNullable(securityConfiguration)
- .orElse(SecurityConfigurationBuilder.builder().build())));
- return responseMono;
- }
-}
diff --git a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerUiHandler.java b/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerUiHandler.java
deleted file mode 100644
index 38255f645..000000000
--- a/youlai-gateway/src/main/java/com/youlai/gateway/swagger/handler/SwaggerUiHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.youlai.gateway.swagger.handler;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.BodyInserters;
-import org.springframework.web.reactive.function.server.HandlerFunction;
-import org.springframework.web.reactive.function.server.ServerRequest;
-import org.springframework.web.reactive.function.server.ServerResponse;
-import reactor.core.publisher.Mono;
-import springfox.documentation.swagger.web.UiConfiguration;
-import springfox.documentation.swagger.web.UiConfigurationBuilder;
-
-import java.util.Optional;
-
-
-/**
- * UI处理器
- *
- * @author haoxr
- * @date 2022/5/17 0:51
- */
-@Component
-public class SwaggerUiHandler implements HandlerFunction {
-
-
- @Autowired(required = false)
- private UiConfiguration uiConfiguration;
-
- @Override
- public Mono handle(ServerRequest request) {
- Mono responseMono = ServerResponse.ok()
- .contentType(MediaType.APPLICATION_JSON)
- .body(BodyInserters
- .fromValue(Optional.ofNullable(uiConfiguration)
- .orElse(UiConfigurationBuilder.builder().build())));
- return responseMono;
- }
-
-}
diff --git a/youlai-system/pom.xml b/youlai-system/pom.xml
index 612891aaa..07aeceabf 100644
--- a/youlai-system/pom.xml
+++ b/youlai-system/pom.xml
@@ -5,7 +5,7 @@
youlai-mall
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-system/system-api/pom.xml b/youlai-system/system-api/pom.xml
index 2bde367fb..cd2334564 100644
--- a/youlai-system/system-api/pom.xml
+++ b/youlai-system/system-api/pom.xml
@@ -5,7 +5,7 @@
youlai-system
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-system/system-api/src/main/java/com/youlai/system/api/UserFeignClient.java b/youlai-system/system-api/src/main/java/com/youlai/system/api/UserFeignClient.java
index 210cb73bd..d265c8c4f 100644
--- a/youlai-system/system-api/src/main/java/com/youlai/system/api/UserFeignClient.java
+++ b/youlai-system/system-api/src/main/java/com/youlai/system/api/UserFeignClient.java
@@ -1,15 +1,16 @@
package com.youlai.system.api;
+import com.youlai.common.result.Result;
+import com.youlai.common.web.config.FeignDecoderConfig;
import com.youlai.system.api.fallback.UserFeignFallbackClient;
import com.youlai.system.dto.UserAuthInfo;
-import com.youlai.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
-@FeignClient(value = "youlai-system", fallback = UserFeignFallbackClient.class)
+@FeignClient(value = "youlai-system", fallback = UserFeignFallbackClient.class, configuration = {FeignDecoderConfig.class})
public interface UserFeignClient {
- @GetMapping("/api/v1/users/{username}/authinfo")
- Result getUserAuthInfo(@PathVariable String username);
+ @GetMapping("/api/v1/users/{username}/authInfo")
+ UserAuthInfo getUserAuthInfo(@PathVariable String username);
}
diff --git a/youlai-system/system-api/src/main/java/com/youlai/system/api/fallback/UserFeignFallbackClient.java b/youlai-system/system-api/src/main/java/com/youlai/system/api/fallback/UserFeignFallbackClient.java
index 05e902a2d..e824d15be 100644
--- a/youlai-system/system-api/src/main/java/com/youlai/system/api/fallback/UserFeignFallbackClient.java
+++ b/youlai-system/system-api/src/main/java/com/youlai/system/api/fallback/UserFeignFallbackClient.java
@@ -3,6 +3,7 @@
import com.youlai.system.api.UserFeignClient;
import com.youlai.common.result.Result;
import com.youlai.common.result.ResultCode;
+import com.youlai.system.dto.UserAuthInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -17,8 +18,8 @@
public class UserFeignFallbackClient implements UserFeignClient {
@Override
- public Result getUserAuthInfo(String username) {
+ public UserAuthInfo getUserAuthInfo(String username) {
log.error("feign远程调用系统用户服务异常后的降级方法");
- return Result.failed(ResultCode.DEGRADATION);
+ return new UserAuthInfo();
}
}
diff --git a/youlai-system/system-boot/pom.xml b/youlai-system/system-boot/pom.xml
index fc6d94f6d..c8ab7107f 100644
--- a/youlai-system/system-boot/pom.xml
+++ b/youlai-system/system-boot/pom.xml
@@ -5,7 +5,7 @@
youlai-system
com.youlai
- 2.2.0
+ 2.4.1
4.0.0
diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/controller/SysUserController.java b/youlai-system/system-boot/src/main/java/com/youlai/system/controller/SysUserController.java
index f718968c8..6ccf7e281 100644
--- a/youlai-system/system-boot/src/main/java/com/youlai/system/controller/SysUserController.java
+++ b/youlai-system/system-boot/src/main/java/com/youlai/system/controller/SysUserController.java
@@ -49,8 +49,8 @@ public class SysUserController {
@ApiOperation(value = "用户分页列表")
@GetMapping("/pages")
- public PageResult listUserPages(UserPageQuery queryParams) {
- IPage result = userService.listUserPages(queryParams);
+ public PageResult getUserPage(UserPageQuery queryParams) {
+ IPage result = userService.getUserPage(queryParams);
return PageResult.success(result);
}
@@ -160,7 +160,7 @@ public void exportUsers(UserPageQuery queryParams, HttpServletResponse response)
}
@ApiOperation(value = "根据用户名获取认证信息", hidden = true)
- @GetMapping("/{username}/authinfo")
+ @GetMapping("/{username}/authInfo")
public Result getUserAuthInfo(
@ApiParam("用户名") @PathVariable String username
) {
diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysUserMapper.java b/youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysUserMapper.java
index c82b1d8ad..0d3e2ceda 100644
--- a/youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysUserMapper.java
+++ b/youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysUserMapper.java
@@ -30,7 +30,7 @@ public interface SysUserMapper extends BaseMapper {
* @return
*/
@DataPermission(deptAlias = "u",userAlias = "u")
- Page listUserPages(Page page, UserPageQuery queryParams);
+ Page getUserPage(Page page, UserPageQuery queryParams);
/**
* 获取用户表单详情
diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/pojo/vo/user/UserVO.java b/youlai-system/system-boot/src/main/java/com/youlai/system/pojo/vo/user/UserVO.java
index bedafbad3..95dbbc70e 100644
--- a/youlai-system/system-boot/src/main/java/com/youlai/system/pojo/vo/user/UserVO.java
+++ b/youlai-system/system-boot/src/main/java/com/youlai/system/pojo/vo/user/UserVO.java
@@ -11,7 +11,7 @@
* 用户分页视图对象
*
* @author haoxr
- * @date 2022/1/15 9:41
+ * @since 2022/1/15 9:41
*/
@ApiModel("用户分页视图对象")
@Data
diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/service/SysUserService.java b/youlai-system/system-boot/src/main/java/com/youlai/system/service/SysUserService.java
index 631d0ae94..369cc8fde 100644
--- a/youlai-system/system-boot/src/main/java/com/youlai/system/service/SysUserService.java
+++ b/youlai-system/system-boot/src/main/java/com/youlai/system/service/SysUserService.java
@@ -28,7 +28,7 @@ public interface SysUserService extends IService {
*
* @return
*/
- IPage listUserPages(UserPageQuery queryParams);
+ IPage getUserPage(UserPageQuery queryParams);
/**
diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
index aa65a30fc..ac8dd1c7e 100644
--- a/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
+++ b/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
@@ -74,10 +74,10 @@ public class SysUserServiceImpl extends ServiceImpl impl
* @return
*/
@Override
- public IPage listUserPages(UserPageQuery queryParams) {
+ public IPage getUserPage(UserPageQuery queryParams) {
// 查询数据
- Page userBoPage = this.baseMapper.listUserPages(
+ Page userBoPage = this.baseMapper.getUserPage(
new Page<>(queryParams.getPageNum(),
queryParams.getPageSize()),
queryParams
diff --git a/youlai-system/system-boot/src/main/resources/mapper/SysUserMapper.xml b/youlai-system/system-boot/src/main/resources/mapper/SysUserMapper.xml
index 36d6173d6..c9528e5a7 100644
--- a/youlai-system/system-boot/src/main/resources/mapper/SysUserMapper.xml
+++ b/youlai-system/system-boot/src/main/resources/mapper/SysUserMapper.xml
@@ -5,7 +5,7 @@
-
+
SELECT
u.id,
u.username,