From e23242d09e31e1c78f7ecdbc2859c9f99a3c4171 Mon Sep 17 00:00:00 2001 From: luofl <1442745593@qq.com> Date: 星期一, 17 三月 2025 10:00:59 +0800 Subject: [PATCH] 迭代版本:2.28 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Shipping.java | 23 ++ ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java | 53 +++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/JsapiServiceExample.java | 93 ++++++++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Contact.java | 12 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEvent.java | 11 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/PayEventListener.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Order.java | 35 +++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Payer.java | 11 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 37 +--- a.json | 18 - ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/HttpUtils.java | 19 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java | 7 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/OrderKey.java | 15 + ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java | 160 +++++++++++++++++ 20 files changed, 456 insertions(+), 54 deletions(-) diff --git a/a.json b/a.json index d5c72b9..716d64a 100644 --- a/a.json +++ b/a.json @@ -1,17 +1,11 @@ { - "access_token": "90_4PJ8b5aLJa2M7aCtoskALEzfoap1me291Jc3ogi18NGH0Ts-Tol7K3COLLvkQ1JLcouvew11ORqcHf6mH5LA2KSC08NxiDhsjRPKuRh14mpvQRHmeFvwr-wKWjkANLdACAUHF", "order_key": { - "order_number_type": 1 + "order_number_type": 2, + "transaction_id": "4200002671202503143982490042" }, - "logistics_type": 1, "delivery_mode": 1, - "shipping_list": [ - { - "item_desc": "这是一个测试" - } - ], - "upload_time": "2022-12-15T13:29:35.120+08:00", - "payer": { - "openid": "ooOrs63KYDHcyhnUmTFpprHc6sb4" - } + "logistics_type": 1, + "shipping_list": "[]", + "upload_time": "2025-03-14T22:34:59.709+08:00", + "payer": "{\"openid\":\"ooOrs62ua63vzhaAeDZDwtH96o34\"}" } \ No newline at end of file diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/HttpUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/HttpUtils.java index c41fbbd..a8e1169 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/HttpUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/HttpUtils.java @@ -10,6 +10,10 @@ import java.net.*; import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; /** * 通用http发送方法 @@ -233,6 +237,21 @@ return result.toString(); } + public static void main(String[] args) { + // 获取当前时间,并指定时区偏移为 +08:00 + OffsetDateTime now = OffsetDateTime.now(ZoneOffset.of("+08:00")); + + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxxx"); + + // 将时间格式化为字符串 + String formattedDateTime = now.format(formatter); + + // 输出结果 + System.out.println(formattedDateTime); + + } + public static String post(String strURL, String params) { String result = ""; BufferedReader reader = null; diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java index 4272bd3..762fe3d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java @@ -2,6 +2,10 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.order.service.CommissionService; +import com.wechat.pay.java.core.exception.ServiceException; +import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiService; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByIdRequest; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -12,6 +16,5 @@ public class CommissionController { @Resource private CommissionService commissionService; - - + public static JsapiService service; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/JsapiServiceExample.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/JsapiServiceExample.java new file mode 100644 index 0000000..3dbac69 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/JsapiServiceExample.java @@ -0,0 +1,93 @@ +package com.ruoyi.order.controller; + +import com.wechat.pay.java.core.Config; +import com.wechat.pay.java.core.RSAAutoCertificateConfig; +import com.wechat.pay.java.core.exception.HttpException; +import com.wechat.pay.java.core.exception.MalformedMessageException; +import com.wechat.pay.java.core.exception.ServiceException; +import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiService; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.CloseOrderRequest; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayRequest; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayResponse; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByIdRequest; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; + +/** JsapiService使用示例 */ +public class JsapiServiceExample { + + /** 商户号 */ + public static String merchantId = "190000****"; + + /** 商户API私钥路径 */ + public static String privateKeyPath = "/Users/yourname/your/path/apiclient_key.pem"; + + /** 商户证书序列号 */ + public static String merchantSerialNumber = "5157F09EFDC096DE15EBE81A47057A72********"; + + /** 商户APIV3密钥 */ + public static String apiV3Key = "..."; + + public static JsapiService service; + + public static void main(String[] args) { + // 初始化商户配置 + Config config = + new RSAAutoCertificateConfig.Builder() + .merchantId(merchantId) + // 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名 + .privateKeyFromPath(privateKeyPath) + .merchantSerialNumber(merchantSerialNumber) + .apiV3Key(apiV3Key) + .build(); + + // 初始化服务 + service = new JsapiService.Builder().config(config).build(); + // ... 调用接口 + try { + closeOrder(); + } catch (HttpException e) { // 发送HTTP请求失败 + // 调用e.getHttpRequest()获取请求打印日志或上报监控,更多方法见HttpException定义 + } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500 + // 调用e.getResponseBody()获取返回体打印日志或上报监控,更多方法见ServiceException定义 + } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败 + // 调用e.getMessage()获取信息打印日志或上报监控,更多方法见MalformedMessageException定义 + } + } + + /** 关闭订单 */ + public static void closeOrder() { + + CloseOrderRequest request = new CloseOrderRequest(); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + service.closeOrder(request); + } + + /** JSAPI支付下单 */ + public static PrepayResponse prepay() { + PrepayRequest request = new PrepayRequest(); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + return service.prepay(request); + } + + /** 微信支付订单号查询订单 */ + public static Transaction queryOrderById() { + + QueryOrderByIdRequest request = new QueryOrderByIdRequest(); + request.setTransactionId("4208450740201411110007820472"); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + return service.queryOrderById(request); + } + + /** 商户订单号查询订单 */ + public static Transaction queryOrderByOutTradeNo() { + + QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest(); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + return service.queryOrderByOutTradeNo(request); + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java index d7989f2..88ce37f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java @@ -634,6 +634,7 @@ } + }); ExcelUtil<OrderExport> util = new ExcelUtil<OrderExport>(OrderExport.class); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java index 5be0fba..7abd8c9 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java @@ -1,6 +1,7 @@ package com.ruoyi.order.controller; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; @@ -118,6 +119,9 @@ @ResponseBody @GetMapping("/shoppingCartPaymentCallback") public void shoppingCartPaymentCallback(UniPayCallbackResult uniPayCallbackResult, HttpServletResponse response){ + String jsonString = JSONObject.toJSONString(uniPayCallbackResult); + System.out.println("1111111111111111111111"); + System.out.println(jsonString); R callback = shoppingCartService.shoppingCartPaymentCallback(uniPayCallbackResult); if(callback.getCode() == 200){ response.setStatus(200); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEvent.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEvent.java new file mode 100644 index 0000000..abcb7ac --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEvent.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.event; + +import org.springframework.context.ApplicationEvent; + +public class ConfirmDeliveryEvent extends ApplicationEvent { + + + public ConfirmDeliveryEvent(Object source) { + super(source); + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java new file mode 100644 index 0000000..d584579 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java @@ -0,0 +1,160 @@ +package com.ruoyi.order.event; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.AppUser; +import com.ruoyi.order.model.OrderGood; +import com.ruoyi.order.service.OrderGoodService; +import com.ruoyi.order.service.OrderService; +import com.ruoyi.order.vo.delivery.*; +import com.ruoyi.other.api.domain.Goods; +import com.ruoyi.other.api.domain.Shop; +import com.ruoyi.other.api.feignClient.ShopClient; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor +@Component +@Slf4j +public class ConfirmDeliveryEventListener { + private final OrderService orderService; + private final OrderGoodService orderGoodService; + @Resource + private ShopClient shopClient; + @Resource + private AppUserClient appUserClient; + + /** + * 发货信息同步至微信 + */ + @Async + @EventListener(ConfirmDeliveryEvent.class) + public synchronized void confirmDelivery(ConfirmDeliveryEvent event) { + Long orderId = (Long) event.getSource(); + Order order = buildOrder(orderId); + + log.info("发货信息同步至微信"); + // 1. 获取access_token(GET请求) + String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" + + "&appid=wxdeed472c98e42a54" + + "&secret=c89c697c981452480e0781fb82d4284c"; + + // 发送GET请求[1](@ref) + String tokenResponse = HttpUtil.get(tokenUrl); + cn.hutool.json.JSONObject tokenJson = JSONUtil.parseObj(tokenResponse); + String accessToken = tokenJson.getStr("access_token"); + + + // 构建请求体(使用Hutool的JSONObject) + JSONObject requestBody = new JSONObject(); + requestBody.put("order_key", order.getOrder_key()); + requestBody.put("delivery_mode", order.getDelivery_mode()); + requestBody.put("logistics_type", order.getLogistics_type()); + requestBody.put("shipping_list", JSON.parseArray(JSONObject.toJSONString(order.getShipping_list()))); + requestBody.put("upload_time", order.getUpload_time()); + requestBody.put("payer", JSONObject.parseObject(JSONObject.toJSONString(order.getPayer()))); + log.info("请求体:" + requestBody); + + // 2. 上传物流信息(POST请求) + String logisticsUrl = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" + accessToken; + // 发送POST请求[3](@ref) + String result = HttpRequest.post(logisticsUrl) + .header("Content-Type", "application/json;charset=UTF-8") // 设置请求头[1](@ref) + .body(requestBody.toString()) // 设置JSON请求体[3](@ref) + .timeout(5000) // 设置超时时间 + .execute() + .body(); + + System.out.println("接口返回结果:" + result); + } + + public Order buildOrder(Long orderId) { + com.ruoyi.order.model.Order tOrder = orderService.getById(orderId); + Shop shop = shopClient.getShopById(tOrder.getShopId()).getData(); + List<OrderGood> orderGoods = orderGoodService.list(new LambdaQueryWrapper<OrderGood>() + .eq(OrderGood::getOrderId, orderId)); + + + String expressJson = tOrder.getExpressJson(); + JSONObject jsonObject = JSONObject.parseObject(expressJson); + String com = jsonObject.getString("com"); + String num = jsonObject.getString("num"); + + Order order = new Order(); + order.setDelivery_mode(1); + order.setLogistics_type(1); + order.setUpload_time(dateToString(OffsetDateTime.now(ZoneOffset.of("+08:00")))); + OrderKey orderKey = new OrderKey(); + orderKey.setOrder_number_type(2); + orderKey.setTransaction_id(tOrder.getSerialNumber()); + order.setOrder_key(orderKey); + + List<Shipping> shippingList = new ArrayList<>(); + for (OrderGood orderGood : orderGoods) { + Integer orderGoodNum = orderGood.getNum(); + String goodJson = orderGood.getGoodJson(); + Goods goods = JSONObject.parseObject(goodJson, Goods.class); + String name = goods.getName(); + Shipping shipping = new Shipping(); + shipping.setTracking_no(num); + shipping.setExpress_company(com); + shipping.setItem_desc(name + "*" + orderGoodNum); + String phone = maskPhoneNumber(shop.getPhone()); + Contact contact = new Contact(); + contact.setConsignor_contact(phone); + shipping.setContact(contact); + shippingList.add(shipping); + } + order.setShipping_list(shippingList); + + AppUser appUser = appUserClient.getAppUserById(tOrder.getAppUserId()); + Payer payer = new Payer(); + payer.setOpenid(appUser.getWxOpenid()); + order.setPayer(payer); + return order; + } + + /** + * 将手机号码中间四位替换为掩码 + * @param phoneNumber 原始手机号码 + * @return 掩码后的手机号码 + */ + public static String maskPhoneNumber(String phoneNumber) { + if (phoneNumber == null || phoneNumber.length() != 11) { + throw new IllegalArgumentException("手机号码必须为11位数字"); + } + // 使用正则表达式替换中间四位为**** + return phoneNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); + } + + /** + * 将时间类型转换成字符串 + */ + public static String dateToString(OffsetDateTime now) { + // 获取当前时间,并指定时区偏移为 +08:00 +// OffsetDateTime now = OffsetDateTime.now(ZoneOffset.of("+08:00")); + + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxxx"); + + // 将时间格式化为字符串 + return now.format(formatter); + + } + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/PayEventListener.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/PayEventListener.java index 48e98d2..27c272c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/PayEventListener.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/PayEventListener.java @@ -1,6 +1,5 @@ package com.ruoyi.order.event; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; @@ -25,7 +24,6 @@ @EventListener(PayEvent.class) public void checkVipChange(PayEvent event) { String source = (String) event.getSource(); - System.out.println("11221212" + source); AppUser appUsers = JSONObject.parseObject(source, AppUser.class); appUserClient.vipConsumption(appUsers.getId()); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 4c6d803..f0fa211 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -1,5 +1,8 @@ package com.ruoyi.order.service.impl; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,6 +18,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.enums.OrderStatus; +import com.ruoyi.order.event.ConfirmDeliveryEvent; import com.ruoyi.order.mapper.OrderGoodMapper; import com.ruoyi.order.mapper.OrderMapper; import com.ruoyi.order.model.Order; @@ -45,6 +49,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jetbrains.annotations.Nullable; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,6 +64,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.time.LocalDateTime; +import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; @@ -138,6 +144,8 @@ private AppUserGiveawayTemporaryClient appUserGiveawayTemporaryClient; @Resource private ShopGiveawayTemporaryClient shopGiveawayTemporaryClient; + @Resource + private ApplicationEventPublisher applicationEventPublisher; @Override @@ -1116,36 +1124,11 @@ order.setExpressResult(JSON.toJSONString(mapTrackKD100Vo)); this.updateById(order); - - String s = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdeed472c98e42a54&secret=c89c697c981452480e0781fb82d4284c"); - JSONObject jsonObject2 = JSONObject.parseObject(s); - System.out.println(jsonObject.getString("access_token")); - + // 发布事件 + applicationEventPublisher.publishEvent(new ConfirmDeliveryEvent(order.getId())); return R.ok(); } - public static void main(String[] args) { - String a = "{\n" + - " \"access_token\": \"90_4PJ8b5aLJa2M7aCtoskALEzfoap1me291Jc3ogi18NGH0Ts-Tol7K3COLLvkQ1JLcouvew11ORqcHf6mH5LA2KSC08NxiDhsjRPKuRh14mpvQRHmeFvwr-wKWjkANLdACAUHF\",\n" + - " \"order_key\": {\n" + - " \"order_number_type\": 1\n" + - " },\n" + - " \"logistics_type\": 1,\n" + - " \"delivery_mode\": 1,\n" + - " \"shipping_list\": [\n" + - " {\n" + - " \"item_desc\": \"这是一个测试\"\n" + - " }\n" + - " ],\n" + - " \"upload_time\": \"2022-12-15T13:29:35.120+08:00\",\n" + - " \"payer\": {\n" + - " \"openid\": \"ooOrs63KYDHcyhnUmTFpprHc6sb4\"\n" + - " }\n" + - "}"; - - JSONObject jsonObject = JSONObject.parseObject(a); - System.out.println(jsonObject); - } public static void importExpress2(String filePath) throws MalformedURLException { diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java index c2ff5f0..ee69283 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java @@ -1520,7 +1520,7 @@ order.setOrderStatus(2); } - String r7TrxNo = uniPayCallbackResult.getR7_TrxNo(); + String r7TrxNo = uniPayCallbackResult.getR9_BankTrxNo(); order.setSerialNumber(r7TrxNo); orderService.updateById(order); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java index 26a7a4f..ddce26c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java @@ -34,7 +34,7 @@ /** * 支付回调地址 */ - private static final String callbackUrl = "http://luodaxia.free.idcfengye.com"; + private static final String callbackUrl = "https://www.qijisheng.top"; /** diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java index 8ec9ae5..d6d3b3b 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderExport.java @@ -14,11 +14,50 @@ @Excel(name = "订单状态" , readConverterExp = "1=待发货,2=待收货,3=待使用,4=已完成,5=已取消,6=已退款,7=售后中,8=已评价") private String orderStatus; + /** - * 订单编号 + * 交易单号 */ - @Excel(name = "订单编号") + @Excel(name = "交易单号") + private String serialNumber; + + /** + * 商户单号 + */ + @Excel(name = "商户单号") private String orderNumber; + + /** + * 商户号 + */ + @Excel(name = "商户号") + private String tradeMerchantNo = "729677708"; + + /** + * 发货方式 + */ + @Excel(name = "发货方式", readConverterExp = "1=快递,2=自提") + private String distributionMode; + + /** + * 发货模式 + */ + @Excel(name = "发货模式") + private String deliveryMode = "统一发货"; + + + /** + * 是否完成发货 + */ + @Excel(name = "是否完成发货") + private String isDelivery; + + /** + * 是否重新发货 + */ + @Excel(name = "是否重新发货") + private String isReDelivery; + /** * 订单类型 @@ -26,11 +65,7 @@ @Excel(name = "订单类型", readConverterExp = "1=服务,2=单品") private String orderType; - /** - * 配送方式 - */ - @Excel(name = "配送方式", readConverterExp = "1=快递,2=自提") - private String distributionMode; + /** * 收货地址 @@ -129,4 +164,8 @@ private String cityCode; private String addressJson; + + + + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Contact.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Contact.java new file mode 100644 index 0000000..30267ec --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Contact.java @@ -0,0 +1,12 @@ +package com.ruoyi.order.vo.delivery; + +import lombok.Data; + +@Data +public class Contact { + /** + * 寄件人联系方式,寄件人联系方式,采用掩码传输,最后4位数字不能打掩码 + * 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024 + */ + private String consignor_contact; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Order.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Order.java new file mode 100644 index 0000000..a213f92 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Order.java @@ -0,0 +1,35 @@ +package com.ruoyi.order.vo.delivery; + +import lombok.Data; + +import java.util.List; + +@Data +public class Order { + //订单,需要上传物流信息的订单 + private OrderKey order_key; + //发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY + private int delivery_mode; + // 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 + private int logistics_type; + /** + * 物流信息列表,发货物流单列表,支持统一发货(单个物流单)和分拆发货(多个物流单)两种模式,多重性: [1, 10] + * 属性 类型 必填 说明 + * tracking_no string 否 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128] + * express_company string 否 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128] + * item_desc string 是 商品信息,例如:微信红包抱枕*1个,限120个字以内 + * contact object 否 联系方式,当发货的物流公司为顺丰时,联系方式为必填,收件人或寄件人联系方式二选一 + * 属性 类型 必填 说明 + * consignor_contact string 否 寄件人联系方式,寄件人联系方式,采用掩码传输,最后4位数字不能打掩码 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024 + * receiver_contact string 否 收件人联系方式,收件人联系方式为,采用掩码传输,最后4位数字不能打掩码 示例值: `189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024 + * upload_time string 是 上传时间,用于标识请求的先后顺序 示例值: `2022-12-15T13:29:35.120+08:00` + * payer object 是 支付者,支付者信息 + * 属性 类型 必填 说明 + * openid string 是 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128] + */ + private List<Shipping> shipping_list; + // 上传时间,用于标识请求的先后顺序 示例值: `2022-12-15T13:29:35.120+08:00` + private String upload_time; + // 支付者,支付者信息 + private Payer payer; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/OrderKey.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/OrderKey.java new file mode 100644 index 0000000..eb4e794 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/OrderKey.java @@ -0,0 +1,15 @@ +package com.ruoyi.order.vo.delivery; + +import lombok.Data; + +@Data +public class OrderKey { + /** + * 订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号。 + */ + private int order_number_type; + /** + * 原支付交易对应的微信订单号 + */ + private String transaction_id; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Payer.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Payer.java new file mode 100644 index 0000000..c96363d --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Payer.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.vo.delivery; + +import lombok.Data; + +@Data +public class Payer { + /** + * 用户标识,用户在小程序appid下的唯一标识。 下单前需获取到用户的Openid 示例值: oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 字符字节限制: [1, 128] + */ + private String openid; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Shipping.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Shipping.java new file mode 100644 index 0000000..a344843 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Shipping.java @@ -0,0 +1,23 @@ +package com.ruoyi.order.vo.delivery; + +import lombok.Data; + +@Data +public class Shipping { + /** + * 物流单号,物流快递发货时必填,示例值: 323244567777 字符字节限制: [1, 128] + */ + private String tracking_no; + /** + * 物流公司编码,快递公司ID,参见「查询物流公司编码列表」,物流快递发货时必填, 示例值: DHL 字符字节限制: [1, 128] + */ + private String express_company; + /** + * 商品信息,例如:微信红包抱枕*1个,限120个字以内 + */ + private String item_desc; + /** + * 联系方式,当发货的物流公司为顺丰时,联系方式为必填,收件人或寄件人联系方式二选一 + */ + private Contact contact; +} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml index ab94eeb..5f26c7d 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -54,7 +54,7 @@ server-addr: 127.0.0.1:8848 service: ${spring.application.name} group: DEFAULT_GROUP - namespace: cdf47c5f-2bf9-4dec-a616-a8dc653aceb9 + namespace: 20c168da-8cf1-4fff-bc38-bc62df656b6a username: nacos password: nacos config: diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 0f7a68d..9544291 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -162,7 +162,7 @@ o.order_status, o.order_number, o.order_type, - o.distribution_mode, + case when o.order_type = 1 then 1 else o.distribution_mode end as distributionMode, o.address_Json, o.create_time, o.app_user_id, @@ -171,6 +171,7 @@ og.good_json, og.selling_price orderMoney, o.express_json, + o.serial_number, o.deliver_province province, o.deliver_province_code provinceCode, o.deliver_city city, -- Gitblit v1.7.1