From 8d3f1337e967801be3ae5abc7142b93d92369172 Mon Sep 17 00:00:00 2001 From: van Date: Wed, 10 Jun 2026 14:27:07 +0800 Subject: [PATCH] 1 --- .../PublicPromoterOrderController.java | 140 ++++++++++++++++++ .../framework/config/SecurityConfig.java | 2 + .../domain/dto/PromoterOrderInfoVO.java | 134 +++++++++++++++++ .../ruoyi/jarvis/mapper/OrderRowsMapper.java | 5 + .../jarvis/service/IOrderRowsService.java | 5 + .../service/impl/OrderRowsServiceImpl.java | 5 + .../mapper/jarvis/OrderRowsMapper.xml | 6 + 7 files changed, 297 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/publicapi/PublicPromoterOrderController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/PromoterOrderInfoVO.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/publicapi/PublicPromoterOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/publicapi/PublicPromoterOrderController.java new file mode 100644 index 0000000..0772406 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/publicapi/PublicPromoterOrderController.java @@ -0,0 +1,140 @@ +package com.ruoyi.web.controller.publicapi; + +import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.enums.LimitType; +import com.ruoyi.jarvis.domain.OrderRows; +import com.ruoyi.jarvis.domain.dto.PromoterOrderInfoVO; +import com.ruoyi.jarvis.enums.ValidCodeConverter; +import com.ruoyi.jarvis.service.IOrderRowsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 京东开放接口(免登录,路径统一 /open/jd/) + */ +@Anonymous +@RestController +@RequestMapping("/open/jd") +public class PublicPromoterOrderController { + + private static final String DEFAULT_SHOP_LOGO = "https://www.jd.com/favicon.ico"; + private static final SimpleDateFormat DATE_FMT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Autowired + private IOrderRowsService orderRowsService; + + /** + * 跟团订单查询(兼容 jiadiantemai 接口格式) + */ + @GetMapping("/queryTkOrder") + @RateLimiter(key = CacheConstants.RATE_LIMIT_KEY, time = 60, count = 30, limitType = LimitType.IP) + public Map queryTkOrder( + @RequestParam String orderId, + @RequestParam(required = false) String t) { + Map result = new HashMap<>(); + String trimmedOrderId = orderId != null ? orderId.trim() : ""; + if (trimmedOrderId.isEmpty()) { + result.put("code", 200); + result.put("count", 0); + result.put("msg", "请输入订单编号"); + return result; + } + + List rows = orderRowsService.selectOrderRowsByOrderNo(trimmedOrderId); + if (rows == null || rows.isEmpty()) { + result.put("code", 200); + result.put("count", 0); + result.put("msg", "未查找到对应订单信息~"); + return result; + } + + String promoterTag = t != null ? t.trim() : ""; + List orderInfoList = new ArrayList<>(); + ValidCodeConverter validCodeConverter = new ValidCodeConverter(); + for (OrderRows row : rows) { + if (!promoterTag.isEmpty() && !matchesPromoterTag(row, promoterTag)) { + continue; + } + orderInfoList.add(toPromoterOrderInfo(row, validCodeConverter)); + } + + if (orderInfoList.isEmpty()) { + result.put("code", 200); + result.put("count", 0); + result.put("msg", "未查找到对应订单信息~"); + return result; + } + + result.put("code", 200); + result.put("orderInfoList", orderInfoList); + result.put("msg", "查询成功"); + return result; + } + + private boolean matchesPromoterTag(OrderRows row, String promoterTag) { + if (promoterTag.equals(row.getUnionTag()) || promoterTag.equals(row.getSubUnionId())) { + return true; + } + if (row.getUnionId() != null && promoterTag.equals(String.valueOf(row.getUnionId()))) { + return true; + } + return row.getPid() != null && row.getPid().contains(promoterTag); + } + + private PromoterOrderInfoVO toPromoterOrderInfo(OrderRows row, ValidCodeConverter validCodeConverter) { + PromoterOrderInfoVO vo = new PromoterOrderInfoVO(); + vo.setShopName(row.getUnionAlias() != null && !row.getUnionAlias().isEmpty() + ? row.getUnionAlias() : "京东商城"); + vo.setShopLogo(DEFAULT_SHOP_LOGO); + vo.setOrderSource("京东"); + vo.setTraceTypeStr(row.getTraceType() != null && row.getTraceType() == 2 ? "同店" : "跨店"); + if (row.getParentId() != null && row.getParentId() > 0) { + vo.setParentId(String.valueOf(row.getParentId())); + } + if (row.getOrderId() != null) { + vo.setOrderId(String.valueOf(row.getOrderId())); + } + vo.setValidCodeMsg(validCodeConverter.getCodeDescription(row.getValidCode())); + if (row.getSkuId() != null) { + vo.setSkuImageUrl("https://img14.360buyimg.com/n1/s240x240_" + row.getSkuId() + ".jpg"); + } + vo.setSkuName(row.getSkuName()); + vo.setItemId(row.getItemId()); + vo.setSkuNum(row.getSkuNum() != null ? row.getSkuNum() : 1); + vo.setCosPrice(formatPrice(row)); + vo.setOrderTime(formatDate(row.getOrderTime())); + vo.setFinishTime(formatDate(row.getFinishTime())); + return vo; + } + + private String formatPrice(OrderRows row) { + Double price = row.getActualCosPrice(); + if (price == null || price <= 0) { + price = row.getEstimateCosPrice(); + } + if (price == null) { + return "0.00"; + } + return String.format("%.2f", price); + } + + private String formatDate(java.util.Date date) { + if (date == null) { + return ""; + } + synchronized (DATE_FMT) { + return DATE_FMT.format(date); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index a492c23..374671e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -114,6 +114,8 @@ public class SecurityConfig requests.antMatchers("/login", "/register", "/captchaImage").permitAll() // 公开接口,允许匿名访问 .antMatchers("/public/**").permitAll() + // 开放页面接口(京东等),允许匿名访问 + .antMatchers("/open/**").permitAll() // 腾讯文档OAuth回调接口,允许匿名访问 .antMatchers("/jarvis/tendoc/oauth/callback").permitAll() // 腾讯文档OAuth回调接口(备用路径),允许匿名访问 diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/PromoterOrderInfoVO.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/PromoterOrderInfoVO.java new file mode 100644 index 0000000..78df492 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/PromoterOrderInfoVO.java @@ -0,0 +1,134 @@ +package com.ruoyi.jarvis.domain.dto; + +/** + * 跟团查询页订单信息 + */ +public class PromoterOrderInfoVO { + + private String shopName; + private String shopLogo; + private String orderSource; + private String traceTypeStr; + private String parentId; + private String orderId; + private String validCodeMsg; + private String skuImageUrl; + private String skuName; + private String itemId; + private Integer skuNum; + private String cosPrice; + private String orderTime; + private String finishTime; + + public String getShopName() { + return shopName; + } + + public void setShopName(String shopName) { + this.shopName = shopName; + } + + public String getShopLogo() { + return shopLogo; + } + + public void setShopLogo(String shopLogo) { + this.shopLogo = shopLogo; + } + + public String getOrderSource() { + return orderSource; + } + + public void setOrderSource(String orderSource) { + this.orderSource = orderSource; + } + + public String getTraceTypeStr() { + return traceTypeStr; + } + + public void setTraceTypeStr(String traceTypeStr) { + this.traceTypeStr = traceTypeStr; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getValidCodeMsg() { + return validCodeMsg; + } + + public void setValidCodeMsg(String validCodeMsg) { + this.validCodeMsg = validCodeMsg; + } + + public String getSkuImageUrl() { + return skuImageUrl; + } + + public void setSkuImageUrl(String skuImageUrl) { + this.skuImageUrl = skuImageUrl; + } + + public String getSkuName() { + return skuName; + } + + public void setSkuName(String skuName) { + this.skuName = skuName; + } + + public String getItemId() { + return itemId; + } + + public void setItemId(String itemId) { + this.itemId = itemId; + } + + public Integer getSkuNum() { + return skuNum; + } + + public void setSkuNum(Integer skuNum) { + this.skuNum = skuNum; + } + + public String getCosPrice() { + return cosPrice; + } + + public void setCosPrice(String cosPrice) { + this.cosPrice = cosPrice; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getFinishTime() { + return finishTime; + } + + public void setFinishTime(String finishTime) { + this.finishTime = finishTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/OrderRowsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/OrderRowsMapper.java index ad942b1..abd2cf0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/OrderRowsMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/OrderRowsMapper.java @@ -87,4 +87,9 @@ public interface OrderRowsMapper * @return 订单列表 */ public List selectOrderRowsByGiftCouponKey(@Param("giftCouponKey") String giftCouponKey); + + /** + * 根据订单号查询(匹配子单号或父单号) + */ + public List selectOrderRowsByOrderNo(@Param("orderNo") String orderNo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IOrderRowsService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IOrderRowsService.java index 8671442..52865ff 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IOrderRowsService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IOrderRowsService.java @@ -72,4 +72,9 @@ public interface IOrderRowsService public int deleteOrderRowsById(String id); public OrderRows selectOrderRowsByOrderId(String orderId); + + /** + * 根据订单号查询(匹配子单号或父单号) + */ + public List selectOrderRowsByOrderNo(String orderNo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/OrderRowsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/OrderRowsServiceImpl.java index 32b698b..6c60bdf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/OrderRowsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/OrderRowsServiceImpl.java @@ -112,4 +112,9 @@ public class OrderRowsServiceImpl implements IOrderRowsService public OrderRows selectOrderRowsByOrderId(String orderId) { return orderRowsMapper.selectOrderRowsByOrderId(orderId); } + + @Override + public List selectOrderRowsByOrderNo(String orderNo) { + return orderRowsMapper.selectOrderRowsByOrderNo(orderNo); + } } diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/OrderRowsMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/OrderRowsMapper.xml index aa0e2bf..5ce39f7 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/OrderRowsMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/OrderRowsMapper.xml @@ -398,6 +398,12 @@ where order_id = #{orderId} + +