From b5f74c465d67ae22ede8e6337681328635315cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Sat, 1 Nov 2025 12:42:03 +0800 Subject: [PATCH] 1 --- .../controller/jarvis/JDOrderController.java | 55 ++++++++++- .../ruoyi/jarvis/mapper/GiftCouponMapper.java | 10 ++ .../jarvis/service/IGiftCouponService.java | 9 ++ .../service/impl/GiftCouponServiceImpl.java | 9 ++ .../mapper/jarvis/GiftCouponMapper.xml | 93 +++++++++++++++++-- sql/gift_coupon_table.sql | 16 ++++ 6 files changed, 183 insertions(+), 9 deletions(-) create mode 100644 sql/gift_coupon_table.sql diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/JDOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/JDOrderController.java index 91b42f5..00312b1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/JDOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/JDOrderController.java @@ -11,6 +11,8 @@ import com.ruoyi.jarvis.domain.JDOrder; import com.ruoyi.jarvis.domain.OrderRows; import com.ruoyi.jarvis.service.IJDOrderService; import com.ruoyi.jarvis.service.IOrderRowsService; +import com.ruoyi.jarvis.service.IGiftCouponService; +import com.ruoyi.jarvis.domain.GiftCoupon; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -34,10 +36,12 @@ public class JDOrderController extends BaseController { private final IJDOrderService jdOrderService; private final IOrderRowsService orderRowsService; + private final IGiftCouponService giftCouponService; - public JDOrderController(IJDOrderService jdOrderService, IOrderRowsService orderRowsService) { + public JDOrderController(IJDOrderService jdOrderService, IOrderRowsService orderRowsService, IGiftCouponService giftCouponService) { this.jdOrderService = jdOrderService; this.orderRowsService = orderRowsService; + this.giftCouponService = giftCouponService; } private final static String skey = "2192057370ef8140c201079969c956a3"; @@ -216,6 +220,55 @@ public class JDOrderController extends BaseController { } logger.info("创建礼金成功 - giftCouponKey: {}, 请求参数: owner={}, skuId={}", giftKey, body.get("owner"), body.get("skuId")); + + // 保存礼金信息到数据库,以便立即在列表中显示 + try { + GiftCoupon giftCoupon = new GiftCoupon(); + giftCoupon.setGiftCouponKey((String) giftKey); + // 优先使用skuId,如果没有则尝试从materialUrl提取 + String skuId = (String) body.get("skuId"); + if (skuId == null || skuId.trim().isEmpty()) { + String materialUrl = (String) body.get("materialUrl"); + if (materialUrl != null && !materialUrl.trim().isEmpty()) { + // 尝试从URL中提取SKU ID(简单提取,如 item.jd.com/123456.html) + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("(?:item\\.jd\\.com|jd\\.com)/(\\d+)", java.util.regex.Pattern.CASE_INSENSITIVE); + java.util.regex.Matcher matcher = pattern.matcher(materialUrl); + if (matcher.find()) { + skuId = matcher.group(1); + } else if (materialUrl.matches("^\\d+$")) { + // 如果是纯数字,直接作为SKU ID + skuId = materialUrl; + } + } + } + giftCoupon.setSkuId(skuId); + giftCoupon.setSkuName((String) body.get("skuName")); + giftCoupon.setOwner((String) body.get("owner")); + Object amountObj = body.get("amount"); + if (amountObj != null) { + giftCoupon.setAmount(Double.parseDouble(String.valueOf(amountObj))); + } + Object quantityObj = body.get("quantity"); + if (quantityObj != null) { + giftCoupon.setQuantity(Integer.parseInt(String.valueOf(quantityObj))); + } + giftCoupon.setCreateTime(new java.util.Date()); + + // 设置过期时间:自营1天,POP 7天 + java.util.Calendar cal = java.util.Calendar.getInstance(); + if ("pop".equalsIgnoreCase((String) body.get("owner"))) { + cal.add(java.util.Calendar.DAY_OF_YEAR, 7); + } else { + cal.add(java.util.Calendar.DAY_OF_YEAR, 1); + } + giftCoupon.setExpireTime(cal.getTime()); + + giftCouponService.insertGiftCoupon(giftCoupon); + logger.info("礼金信息已保存到数据库: giftCouponKey={}", giftKey); + } catch (Exception e) { + logger.error("保存礼金信息到数据库失败", e); + // 不中断流程,继续返回成功 + } } return AjaxResult.success(parsed); diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/GiftCouponMapper.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/GiftCouponMapper.java index 079cf41..3045d90 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/GiftCouponMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/GiftCouponMapper.java @@ -23,4 +23,14 @@ public interface GiftCouponMapper { */ GiftCoupon selectGiftCouponStatistics(GiftCoupon giftCoupon); + /** + * 新增礼金信息 + */ + int insertGiftCoupon(GiftCoupon giftCoupon); + + /** + * 根据礼金Key更新礼金信息 + */ + int updateGiftCoupon(GiftCoupon giftCoupon); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IGiftCouponService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IGiftCouponService.java index a06362e..4e6d99a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IGiftCouponService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IGiftCouponService.java @@ -23,4 +23,13 @@ public interface IGiftCouponService { */ GiftCoupon selectGiftCouponStatistics(GiftCoupon giftCoupon); + /** + * 新增礼金信息 + */ + int insertGiftCoupon(GiftCoupon giftCoupon); + + /** + * 更新礼金信息 + */ + int updateGiftCoupon(GiftCoupon giftCoupon); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/GiftCouponServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/GiftCouponServiceImpl.java index ca2e822..76da5ad 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/GiftCouponServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/GiftCouponServiceImpl.java @@ -32,4 +32,13 @@ public class GiftCouponServiceImpl implements IGiftCouponService { return giftCouponMapper.selectGiftCouponStatistics(giftCoupon); } + @Override + public int insertGiftCoupon(GiftCoupon giftCoupon) { + return giftCouponMapper.insertGiftCoupon(giftCoupon); + } + + @Override + public int updateGiftCoupon(GiftCoupon giftCoupon) { + return giftCouponMapper.updateGiftCoupon(giftCoupon); + } } diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/GiftCouponMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/GiftCouponMapper.xml index 619ebc2..3d5b725 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/GiftCouponMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/GiftCouponMapper.xml @@ -23,26 +23,27 @@ MAX(sku_id) as sku_id, MAX(sku_name) as sku_name, MAX(owner) as owner, - COUNT(DISTINCT order_id) as use_count, - SUM(gift_coupon_ocs_amount) as total_ocs_amount, - MIN(order_time) as create_time, + COALESCE(SUM(use_count), 0) as use_count, + COALESCE(SUM(total_ocs_amount), 0) as total_ocs_amount, + MIN(create_time) as create_time, MAX(expire_time) as expire_time, CASE WHEN MAX(expire_time) IS NOT NULL AND MAX(expire_time) < NOW() THEN 1 ELSE 0 END as is_expired FROM ( + -- 从order_rows表聚合已使用的礼金数据 SELECT or_rows.gift_coupon_key, - or_rows.sku_id, + CAST(or_rows.sku_id AS CHAR) as sku_id, or_rows.sku_name, CASE WHEN or_rows.pop_id IS NULL OR or_rows.pop_id = '' THEN 'g' ELSE 'pop' END as owner, - or_rows.order_id, - or_rows.gift_coupon_ocs_amount, - or_rows.order_time, + COUNT(DISTINCT or_rows.order_id) as use_count, + COALESCE(SUM(or_rows.gift_coupon_ocs_amount), 0) as total_ocs_amount, + MIN(or_rows.order_time) as create_time, NULL as expire_time FROM order_rows or_rows WHERE or_rows.gift_coupon_key IS NOT NULL AND or_rows.gift_coupon_key != '' @@ -50,7 +51,7 @@ AND or_rows.gift_coupon_key like concat('%', #{giftCouponKey}, '%') - AND or_rows.sku_id like concat('%', #{skuId}, '%') + AND CAST(or_rows.sku_id AS CHAR) like concat('%', #{skuId}, '%') AND or_rows.sku_name like concat('%', #{skuName}, '%') @@ -67,6 +68,40 @@ AND or_rows.order_time <= #{params.endTime} + GROUP BY or_rows.gift_coupon_key + + UNION ALL + + -- 从gift_coupon表获取所有创建的礼金(包括未使用的) + SELECT + gc.gift_coupon_key, + gc.sku_id, + gc.sku_name, + gc.owner, + 0 as use_count, + 0 as total_ocs_amount, + gc.create_time, + gc.expire_time + FROM gift_coupon gc + WHERE 1=1 + + AND gc.gift_coupon_key like concat('%', #{giftCouponKey}, '%') + + + AND gc.sku_id like concat('%', #{skuId}, '%') + + + AND gc.sku_name like concat('%', #{skuName}, '%') + + + AND gc.owner = #{owner} + + + AND gc.create_time >= #{params.beginTime} + + + AND gc.create_time <= #{params.endTime} + ) gc GROUP BY gift_coupon_key @@ -125,4 +160,46 @@ ) stats + + INSERT INTO gift_coupon ( + gift_coupon_key, + sku_id, + sku_name, + owner, + amount, + quantity, + create_time, + expire_time + ) VALUES ( + #{giftCouponKey}, + #{skuId}, + #{skuName}, + #{owner}, + #{amount}, + #{quantity}, + #{createTime}, + #{expireTime} + ) + ON DUPLICATE KEY UPDATE + sku_id = VALUES(sku_id), + sku_name = VALUES(sku_name), + owner = VALUES(owner), + amount = VALUES(amount), + quantity = VALUES(quantity), + expire_time = VALUES(expire_time) + + + + UPDATE gift_coupon + + sku_id = #{skuId}, + sku_name = #{skuName}, + owner = #{owner}, + amount = #{amount}, + quantity = #{quantity}, + expire_time = #{expireTime}, + + WHERE gift_coupon_key = #{giftCouponKey} + + diff --git a/sql/gift_coupon_table.sql b/sql/gift_coupon_table.sql new file mode 100644 index 0000000..463d812 --- /dev/null +++ b/sql/gift_coupon_table.sql @@ -0,0 +1,16 @@ +-- 礼金表:存储所有创建的礼金信息 +CREATE TABLE IF NOT EXISTS `gift_coupon` ( + `gift_coupon_key` varchar(100) NOT NULL COMMENT '礼金Key(主键)', + `sku_id` varchar(50) DEFAULT NULL COMMENT '商品SKU ID', + `sku_name` varchar(500) DEFAULT NULL COMMENT '商品名称', + `owner` varchar(10) DEFAULT 'g' COMMENT '商品类型(g:自营, pop:POP)', + `amount` decimal(10,2) DEFAULT NULL COMMENT '礼金金额(元)', + `quantity` int(11) DEFAULT NULL COMMENT '礼金数量', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `expire_time` datetime DEFAULT NULL COMMENT '过期时间', + PRIMARY KEY (`gift_coupon_key`), + KEY `idx_sku_id` (`sku_id`), + KEY `idx_create_time` (`create_time`), + KEY `idx_owner` (`owner`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='礼金信息表'; +