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\"}" } 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; 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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/JsapiServiceExample.java
New file @@ -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); } } 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); 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); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEvent.java
New file @@ -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); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/event/ConfirmDeliveryEventListener.java
New file @@ -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); } } 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()); } 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 { 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); 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"; /** 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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Contact.java
New file @@ -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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Order.java
New file @@ -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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/OrderKey.java
New file @@ -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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Payer.java
New file @@ -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; } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/delivery/Shipping.java
New file @@ -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; } 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: 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,