diff --git a/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java b/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java index 0a420d17..a0e95a02 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java +++ b/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java @@ -506,4 +506,15 @@ public class StateCode { public static final int PRINTER_TEMP_CATE_ORDER = 1; // 打票机模版分类:1-下单打印模版;2-退货打印模版; public static final int PRINTER_TEMP_CATE_REFUND = 2; + + // 顺丰同城订单状态:1-订单创建;2-订单取消;10-配送员接单/配送员改派;12-配送员到店;15配送员配送中(已取货);17-配送员妥投完单;22-配送员撤单;31-取消中;91-骑士上报异常; + public static final int SF_ORDER_STATUS_CREATED = 1; + public static final int SF_ORDER_STATUS_CANCELED = 2; + public static final int SF_ORDER_STATUS_RECEIVING = 10; + public static final int SF_ORDER_STATUS_ARRIVED = 12; + public static final int SF_ORDER_STATUS_RECEIVED = 15; + public static final int SF_ORDER_STATUS_FINISH = 17; + public static final int SF_ORDER_STATUS_WITHDRAW = 22; + public static final int SF_ORDER_STATUS_EXCEPTION = 91; + public static final int SF_ORDER_STATUS_CANCELING = 31; } diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/StandardAddressDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/StandardAddressDTO.java new file mode 100644 index 00000000..c19aece0 --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/StandardAddressDTO.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.common.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +/** + * 标准的地址实体类 + */ +public class StandardAddressDTO implements Serializable { + private String fullAddress; // 详细地址 + private String longitude; //经度 + private String latitude; // 维度 +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java index ad51f6e3..71cbcb5c 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java @@ -1,12 +1,13 @@ package com.suisung.mall.common.utils; +import cn.hutool.core.util.ObjectUtil; +import com.suisung.mall.common.api.StateCode; +import com.suisung.mall.common.exception.ApiException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -148,4 +149,73 @@ public class CommonUtil { return d.setScale(0, BigDecimal.ROUND_HALF_UP); } + + public static String getOrderStateNote(int order_state_pre_id, int order_state_id) { + + String rtn = ""; + String access = ""; + + Map state_code_arr = new HashMap(); + state_code_arr.put(StateCode.ORDER_STATE_CANCEL, -1); // 取消订单 + state_code_arr.put(StateCode.ORDER_PROCESS_SUBMIT, 0); // 提交订单 + state_code_arr.put(StateCode.ORDER_PROCESS_PAY, 1); // 订单支付 + state_code_arr.put(StateCode.ORDER_PROCESS_CHECK, 2); // 订单审核 + state_code_arr.put(StateCode.ORDER_PROCESS_FINANCE_REVIEW, 3); // 财务审核 + state_code_arr.put(StateCode.ORDER_PROCESS_OUT, 4); // 订单出库 + state_code_arr.put(StateCode.ORDER_PROCESS_SHIPPED, 5); // 订单发货 + state_code_arr.put(StateCode.ORDER_PROCESS_RECEIVED, 6); // 确认收货 + state_code_arr.put(StateCode.ORDER_STATE_RECEIVED, 7); // 已签收 + state_code_arr.put(StateCode.ORDER_STATE_FINISH, 8); // 已完成 + + Set keySet = state_code_arr.keySet(); + if (!keySet.contains(order_state_id)) { + throw new ApiException(I18nUtil._("订单状态ID错误!")); + } + + Map state_msg_arr = new HashMap(); + state_msg_arr.put(StateCode.ORDER_PROCESS_SUBMIT, I18nUtil._("提交订单")); + state_msg_arr.put(StateCode.ORDER_PROCESS_PAY, I18nUtil._("支付")); + state_msg_arr.put(StateCode.ORDER_PROCESS_CHECK, I18nUtil._("订单审核")); + state_msg_arr.put(StateCode.ORDER_PROCESS_FINANCE_REVIEW, I18nUtil._("财务审核")); + state_msg_arr.put(StateCode.ORDER_PROCESS_OUT, I18nUtil._("出库审核")); + state_msg_arr.put(StateCode.ORDER_PROCESS_SHIPPED, I18nUtil._("确认发货")); + state_msg_arr.put(StateCode.ORDER_PROCESS_RECEIVED, I18nUtil._("确认收货")); + state_msg_arr.put(StateCode.ORDER_STATE_RECEIVED, I18nUtil._("签收")); + state_msg_arr.put(StateCode.ORDER_STATE_FINISH, I18nUtil._("完成")); + state_msg_arr.put(StateCode.ORDER_STATE_CANCEL, I18nUtil._("取消")); + state_msg_arr.put(StateCode.ORDER_PROCESS_FINISH, I18nUtil._("完成")); + + + if (CheckUtil.isEmpty(order_state_pre_id) && ObjectUtil.equal(order_state_id, StateCode.ORDER_PROCESS_SUBMIT)) { + rtn = I18nUtil._("已提交订单"); + } else if (ObjectUtil.equal(order_state_id, StateCode.ORDER_STATE_CANCEL)) { + rtn = I18nUtil._("已提交取消"); + } else { + Integer state1 = (Integer) state_code_arr.get(order_state_id); + Integer state2 = (Integer) state_code_arr.get(order_state_pre_id); + if (state1 > state2) { + access = I18nUtil._("已"); + } else { + access = I18nUtil._("未"); + rtn = I18nUtil._("退回重审"); + } + + switch (order_state_pre_id) { + case StateCode.ORDER_PROCESS_CHECK: + case StateCode.ORDER_PROCESS_FINANCE_REVIEW: + case StateCode.ORDER_PROCESS_OUT: + rtn = I18nUtil._("订单") + access + I18nUtil._("通过") + state_msg_arr.get(order_state_pre_id); + break; + case StateCode.ORDER_PROCESS_PAY: + case StateCode.ORDER_PROCESS_SHIPPED: + case StateCode.ORDER_PROCESS_RECEIVED: + case StateCode.ORDER_PROCESS_FINISH: + rtn = I18nUtil._("订单") + access + state_msg_arr.get(order_state_pre_id) + rtn; + break; + } + } + + return rtn; + } + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java index ef35668c..d8fe3677 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java @@ -8,6 +8,7 @@ import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.shop.message.service.MqMessageService; import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderInfoService; +import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; import com.suisung.mall.shop.store.service.ShopStorePrinterService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -16,8 +17,10 @@ import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.io.IOException; import java.util.Collections; import java.util.List; @@ -36,6 +39,8 @@ public class OrderPayedListener { private ShopStorePrinterService shopStorePrinterService; @Autowired private MqMessageService mqMessageService; + @Resource + private SFExpressApiService sfExpressApiService; @RabbitHandler public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException { @@ -87,6 +92,18 @@ public class OrderPayedListener { shopStorePrinterService.printShopStoreOrder(orderId); // 发送顺丰同城快递 + Pair pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum); + if(pairCreateSfOrder==null){ + logger.error("顺丰同城下单失败!pairCreateSfOrder 返回空值"); + return; + } + + if(!pairCreateSfOrder.getFirst()){ + logger.error("顺丰同城下单失败:{}",pairCreateSfOrder.getSecond()); + return; + } + + logger.info("顺丰同城下单成功"); } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java index adb2fba8..1439aabf 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderBaseService.java @@ -528,5 +528,5 @@ public interface ShopOrderBaseService extends IBaseService { * @param orderPickupNum * @return */ - SFCreateOrderReq buildSFOrderData(Integer devId,String orderId,String orderPickupNum); + SFCreateOrderReq buildSFOrderData(Integer devId,String orderId, Long orderPickupNum); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderDeliveryAddressService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderDeliveryAddressService.java index 39200395..38918093 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderDeliveryAddressService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderDeliveryAddressService.java @@ -1,7 +1,10 @@ package com.suisung.mall.shop.order.service; import com.suisung.mall.common.modules.order.ShopOrderDeliveryAddress; +import com.suisung.mall.common.modules.store.ShopStoreBase; +import com.suisung.mall.common.pojo.dto.StandardAddressDTO; import com.suisung.mall.core.web.service.IBaseService; +import org.springframework.data.util.Pair; /** *

@@ -18,4 +21,11 @@ public interface ShopOrderDeliveryAddressService extends IBaseService checkAddress(ShopOrderDeliveryAddress shopOrderDeliveryAddress); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java index cf0564cc..0cc291a6 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java @@ -31,4 +31,15 @@ public interface ShopOrderInfoService extends IBaseService { */ Long genTodayPickupNum(Integer storeId); + + /** + * 更改商家订单的状态,出库状态,发货状态,并写入订单状态更改日志 + * @param orderId + * @param orderStatus 约定0值不更改 + * @param orderIsOutStatus 出库状态,约定0值不更改 + * @param orderIsShippedStatus 发货状态,约定0值不更改 + * @return + */ + Boolean changeOrderStatus(String orderId, Integer orderStatus,Integer orderIsOutStatus,Integer orderIsShippedStatus); + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index 3c433e69..70dc8374 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -54,9 +54,8 @@ import com.suisung.mall.common.modules.product.ShopProductItem; import com.suisung.mall.common.modules.product.ShopProductValidPeriod; import com.suisung.mall.common.modules.store.*; import com.suisung.mall.common.modules.user.*; -import com.suisung.mall.common.pojo.req.SFCreateOrderReq; -import com.suisung.mall.common.pojo.req.SFOrderReceiveReq; -import com.suisung.mall.common.pojo.req.SFOrderShopReq; +import com.suisung.mall.common.pojo.dto.StandardAddressDTO; +import com.suisung.mall.common.pojo.req.*; import com.suisung.mall.common.pojo.to.MsgTO; import com.suisung.mall.common.pojo.to.PayMoneyTO; import com.suisung.mall.common.pojo.to.PayPointTO; @@ -101,6 +100,7 @@ import org.apache.ibatis.annotations.Param; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.util.Pair; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionDefinition; @@ -113,6 +113,7 @@ import java.io.IOException; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -349,7 +350,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl state2) { - access = I18nUtil._("已"); - } else { - access = I18nUtil._("未"); - rtn = I18nUtil._("退回重审"); - } - - switch (order_state_pre_id) { - case StateCode.ORDER_PROCESS_CHECK: - case StateCode.ORDER_PROCESS_FINANCE_REVIEW: - case StateCode.ORDER_PROCESS_OUT: - rtn = I18nUtil._("订单") + access + I18nUtil._("通过") + state_msg_arr.get(order_state_pre_id); - break; - case StateCode.ORDER_PROCESS_PAY: - case StateCode.ORDER_PROCESS_SHIPPED: - case StateCode.ORDER_PROCESS_RECEIVED: - case StateCode.ORDER_PROCESS_FINISH: - rtn = I18nUtil._("订单") + access + state_msg_arr.get(order_state_pre_id) + rtn; - break; - } - } - - return rtn; - } +// private String getOrderStateNote(int order_state_pre_id, int order_state_id) { +// +// String rtn = ""; +// String access = ""; +// +// Map state_code_arr = new HashMap(); +// state_code_arr.put(StateCode.ORDER_STATE_CANCEL, -1); // 取消订单 +// state_code_arr.put(StateCode.ORDER_PROCESS_SUBMIT, 0); // 提交订单 +// state_code_arr.put(StateCode.ORDER_PROCESS_PAY, 1); // 订单支付 +// state_code_arr.put(StateCode.ORDER_PROCESS_CHECK, 2); // 订单审核 +// state_code_arr.put(StateCode.ORDER_PROCESS_FINANCE_REVIEW, 3); // 财务审核 +// state_code_arr.put(StateCode.ORDER_PROCESS_OUT, 4); // 订单出库 +// state_code_arr.put(StateCode.ORDER_PROCESS_SHIPPED, 5); // 订单发货 +// state_code_arr.put(StateCode.ORDER_PROCESS_RECEIVED, 6); // 确认收货 +// state_code_arr.put(StateCode.ORDER_STATE_RECEIVED, 7); // 已签收 +// state_code_arr.put(StateCode.ORDER_STATE_FINISH, 8); // 已完成 +// +// Set keySet = state_code_arr.keySet(); +// if (!keySet.contains(order_state_id)) { +// throw new ApiException(I18nUtil._("订单状态ID错误!")); +// } +// +// Map state_msg_arr = new HashMap(); +// state_msg_arr.put(StateCode.ORDER_PROCESS_SUBMIT, I18nUtil._("提交订单")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_PAY, I18nUtil._("支付")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_CHECK, I18nUtil._("订单审核")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_FINANCE_REVIEW, I18nUtil._("财务审核")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_OUT, I18nUtil._("出库审核")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_SHIPPED, I18nUtil._("确认发货")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_RECEIVED, I18nUtil._("确认收货")); +// state_msg_arr.put(StateCode.ORDER_STATE_RECEIVED, I18nUtil._("签收")); +// state_msg_arr.put(StateCode.ORDER_STATE_FINISH, I18nUtil._("完成")); +// state_msg_arr.put(StateCode.ORDER_STATE_CANCEL, I18nUtil._("取消")); +// state_msg_arr.put(StateCode.ORDER_PROCESS_FINISH, I18nUtil._("完成")); +// +// +// if (CheckUtil.isEmpty(order_state_pre_id) && ObjectUtil.equal(order_state_id, StateCode.ORDER_PROCESS_SUBMIT)) { +// rtn = I18nUtil._("已提交订单"); +// } else if (ObjectUtil.equal(order_state_id, StateCode.ORDER_STATE_CANCEL)) { +// rtn = I18nUtil._("已提交取消"); +// } else { +// Integer state1 = (Integer) state_code_arr.get(order_state_id); +// Integer state2 = (Integer) state_code_arr.get(order_state_pre_id); +// if (state1 > state2) { +// access = I18nUtil._("已"); +// } else { +// access = I18nUtil._("未"); +// rtn = I18nUtil._("退回重审"); +// } +// +// switch (order_state_pre_id) { +// case StateCode.ORDER_PROCESS_CHECK: +// case StateCode.ORDER_PROCESS_FINANCE_REVIEW: +// case StateCode.ORDER_PROCESS_OUT: +// rtn = I18nUtil._("订单") + access + I18nUtil._("通过") + state_msg_arr.get(order_state_pre_id); +// break; +// case StateCode.ORDER_PROCESS_PAY: +// case StateCode.ORDER_PROCESS_SHIPPED: +// case StateCode.ORDER_PROCESS_RECEIVED: +// case StateCode.ORDER_PROCESS_FINISH: +// rtn = I18nUtil._("订单") + access + state_msg_arr.get(order_state_pre_id) + rtn; +// break; +// } +// } +// +// return rtn; +// } /** * 1.修改订单为下一个待处理状态,并几率当前状态处理时间 @@ -2505,7 +2506,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl { return Convert.toBigDecimal(s.get("cart_quantity"), BigDecimal.ZERO); }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); @@ -7298,11 +7295,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl { return Convert.toBigDecimal(s.get("subtotal"), BigDecimal.ZERO); }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); @@ -7543,7 +7536,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl order_id_row_temp = Arrays.asList(order_id); + List order_id_row_temp = Collections.singletonList(order_id); if (!setPaidYes(order_id_row_temp)) { throw new ApiException(I18nUtil._("订单支付状态修改失败!")); } else { @@ -8115,7 +8108,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", orderId); + List shopOrderItemList = shopOrderItemService.list(queryWrapper); + if (shopOrderBase == null || CollUtil.isEmpty(shopOrderItemList)) { + return null; + } + + // 7位数取单号,位数不够向左补0 + String orderPickupNumStr = String.format("%07d", orderPickupNum); + SFCreateOrderReq sfCreateOrderReq = new SFCreateOrderReq(); sfCreateOrderReq.setDev_id(devId); sfCreateOrderReq.setShop_id(shopStoreBase.getStore_id().toString()); sfCreateOrderReq.setPush_time(DateUtil.currentSeconds()); sfCreateOrderReq.setShop_order_id(orderId); - sfCreateOrderReq.setOrder_time(DateUtil.currentSeconds()); - sfCreateOrderReq.setOrder_source("小发同城"); - sfCreateOrderReq.setOrder_sequence(orderPickupNum); + sfCreateOrderReq.setOrder_time(shopOrderBase.getOrder_time().getTime() / 1000); + sfCreateOrderReq.setOrder_source("小发同城"); //订单来源 + sfCreateOrderReq.setOrder_sequence(orderPickupNumStr); //拣货编号 +// sfCreateOrderReq.setRemark(shopStoreInfo.getOrder_message); sfCreateOrderReq.setVersion(19); sfCreateOrderReq.setReturn_flag(511); + Integer productNum = 0; + Integer productTypeNum = shopOrderItemList.size(); + // 订单详情信息 + SFOrderDetailReq orderDetail = new SFOrderDetailReq(); + // 订单里的所有商品列表 + List orderProductList = new ArrayList<>(); + + for (ShopOrderItem shopOrderItem : shopOrderItemList) { + productNum += shopOrderItem.getOrder_item_quantity(); + // 产品详情 + SFOrderProductDetailReq orderProductDetail = new SFOrderProductDetailReq(); + orderProductDetail.setProduct_id(shopOrderItem.getProduct_id()); + orderProductDetail.setProduct_name(shopOrderItem.getItem_name()); + orderProductDetail.setProduct_num(shopOrderItem.getOrder_item_quantity()); + + orderProductList.add(orderProductDetail); + } + + orderDetail.setProduct_type(6); // 生鲜,参考:https://commit-openic.sf-express.com/#/apidoc + orderDetail.setTotal_price(shopOrderBase.getOrder_payment_amount().multiply(BigDecimal.valueOf(1000)).intValue()); // 单位分 + orderDetail.setWeight_gram(0); // 重量一律传 0kg 先,谢总本地运营商协商好的 + orderDetail.setProduct_num(productNum); //物品个数 + orderDetail.setProduct_type_num(productTypeNum); //物品种类个数 + + // 订单里的所有商品列表 + orderDetail.setProduct_detail(orderProductList); + + // 订单详情信息 + sfCreateOrderReq.setOrder_detail(orderDetail); // 店铺信息(发货人信息) + Pair pairShopAddr = shopStoreBaseService.checkStoreAddress(shopStoreBase); SFOrderShopReq sfOrderShopReq = new SFOrderShopReq(); sfOrderShopReq.setShop_name(shopStoreBase.getStore_name()); sfOrderShopReq.setShop_phone(shopStoreInfo.getStore_tel()); - sfOrderShopReq.setShop_address(shopStoreBase.getStore_address()); - sfOrderShopReq.setShop_lng(shopStoreBase.getStore_longitude()); - sfOrderShopReq.setShop_lat(shopStoreBase.getStore_latitude()); + sfOrderShopReq.setShop_address(pairShopAddr.getSecond().getFullAddress()); + sfOrderShopReq.setShop_lng(pairShopAddr.getSecond().getLongitude()); + sfOrderShopReq.setShop_lat(pairShopAddr.getSecond().getLatitude()); sfCreateOrderReq.setShop(sfOrderShopReq); // 收货人信息 + Pair pairReceiveAddr = shopOrderDeliveryAddressService.checkAddress(shopOrderDeliveryAddress); SFOrderReceiveReq receive = new SFOrderReceiveReq(); receive.setUser_name(shopOrderDeliveryAddress.getDa_name()); receive.setUser_phone(shopOrderDeliveryAddress.getDa_telephone()); - receive.setUser_address(shopOrderDeliveryAddress.getDa_address()); - receive.setUser_lng(shopOrderDeliveryAddress.getDa_longitude()); - receive.setUser_lat(shopOrderDeliveryAddress.getDa_latitude()); + receive.setUser_address(pairReceiveAddr.getSecond().getFullAddress()); + receive.setUser_lng(pairReceiveAddr.getSecond().getLongitude()); + receive.setUser_lat(pairReceiveAddr.getSecond().getLatitude()); sfCreateOrderReq.setReceive(receive); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderDeliveryAddressServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderDeliveryAddressServiceImpl.java index b066de04..459bdbb6 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderDeliveryAddressServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderDeliveryAddressServiceImpl.java @@ -2,9 +2,11 @@ package com.suisung.mall.shop.order.service.impl; import cn.hutool.core.util.StrUtil; import com.suisung.mall.common.modules.order.ShopOrderDeliveryAddress; +import com.suisung.mall.common.pojo.dto.StandardAddressDTO; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.order.mapper.ShopOrderDeliveryAddressMapper; import com.suisung.mall.shop.order.service.ShopOrderDeliveryAddressService; +import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; @@ -32,4 +34,52 @@ public class ShopOrderDeliveryAddressServiceImpl extends BaseServiceImpl checkAddress(ShopOrderDeliveryAddress shopOrderDeliveryAddress) { + if (shopOrderDeliveryAddress == null) { + return Pair.of(false, new StandardAddressDTO()); + } + + StringBuffer sb = new StringBuffer(); + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_province())){ + sb.append(shopOrderDeliveryAddress.getDa_province()); + } + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_city())){ + sb.append(shopOrderDeliveryAddress.getDa_city()); + } + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_county())){ + sb.append(shopOrderDeliveryAddress.getDa_county()); + } + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_address())){ + sb.append(shopOrderDeliveryAddress.getDa_address()); + } + + + StandardAddressDTO standardAddressDTO = new StandardAddressDTO(); + if ( StrUtil.isBlank(shopOrderDeliveryAddress.getDa_address()) || StrUtil.isBlank(shopOrderDeliveryAddress.getDa_longitude()) || StrUtil.isBlank(shopOrderDeliveryAddress.getDa_latitude())) { + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_longitude())){ + shopOrderDeliveryAddress.setDa_longitude("0"); + } + if(StrUtil.isNotBlank(shopOrderDeliveryAddress.getDa_latitude())){ + shopOrderDeliveryAddress.setDa_latitude("0"); + } + standardAddressDTO.setFullAddress(sb.toString()); + standardAddressDTO.setLongitude(shopOrderDeliveryAddress.getDa_longitude()); + standardAddressDTO.setLatitude(shopOrderDeliveryAddress.getDa_latitude()); + return Pair.of(false, new StandardAddressDTO()); + } + + standardAddressDTO.setLongitude(shopOrderDeliveryAddress.getDa_longitude()); + standardAddressDTO.setLatitude(shopOrderDeliveryAddress.getDa_latitude()); + standardAddressDTO.setFullAddress(sb.toString()); + + return Pair.of(true, standardAddressDTO); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java index ee1a93c8..c840e59e 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.feignService.AccountService; import com.suisung.mall.common.feignService.PayService; @@ -12,18 +13,18 @@ import com.suisung.mall.common.feignService.SnsService; import com.suisung.mall.common.modules.distribution.ShopDistributionUserWithdraw; import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.common.modules.order.ShopOrderInvoice; +import com.suisung.mall.common.modules.order.ShopOrderStateLog; import com.suisung.mall.common.modules.pay.PayPlantformResource; import com.suisung.mall.common.modules.plantform.ShopPlantformFeedback; import com.suisung.mall.common.modules.product.ShopProductComment; +import com.suisung.mall.common.utils.CommonUtil; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.base.service.AccountBaseConfigService; +import com.suisung.mall.shop.base.service.ShopBaseStateCodeService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserCommissionService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserWithdrawService; import com.suisung.mall.shop.order.mapper.ShopOrderInfoMapper; -import com.suisung.mall.shop.order.service.ShopOrderBaseService; -import com.suisung.mall.shop.order.service.ShopOrderInfoService; -import com.suisung.mall.shop.order.service.ShopOrderInvoiceService; -import com.suisung.mall.shop.order.service.ShopOrderReturnService; +import com.suisung.mall.shop.order.service.*; import com.suisung.mall.shop.plantform.service.ShopPlantformActivityItemService; import com.suisung.mall.shop.plantform.service.ShopPlantformFeedbackService; import com.suisung.mall.shop.product.service.ShopProductBaseService; @@ -34,9 +35,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -98,6 +101,12 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("store_id", storeId); @@ -209,6 +218,61 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("order_id", orderId); + if (orderStatus > 0 && !orderIsOutStatus.equals(orderStatus)) { + updateWrapper.set("order_state_id", orderStatus); + } + + if (orderIsOutStatus > 0 && !shopOrderInfo.getOrder_is_out().equals(orderIsOutStatus)) { + updateWrapper.set("order_is_out", orderStatus); + } + + if (orderStatus > 0 && !shopOrderInfo.getOrder_is_shipped().equals(orderIsShippedStatus)) { + updateWrapper.set("order_is_shipped", orderIsShippedStatus); + } + + if (!update(updateWrapper)) { + return false; + } + + // 写入订单状态更改日志 + ShopOrderStateLog shopOrderStateLog = new ShopOrderStateLog(); + shopOrderStateLog.setOrder_id(orderId); + shopOrderStateLog.setOrder_state_is_sync(0); + shopOrderStateLog.setOrder_state_id(orderStatus); + shopOrderStateLog.setOrder_state_time(new Date()); + shopOrderStateLog.setOrder_state_pre_id(preOrderStatus); + shopOrderStateLog.setOrder_state_type(shopBaseStateCodeService.getText(orderStatus, null)); + shopOrderStateLog.setOrder_state_note(CommonUtil.getOrderStateNote(preOrderStatus, orderStatus)); + shopOrderStateLog.setUser_id(0); + shopOrderStateLog.setUser_nickname("SfExpress"); + + return shopOrderStateLogService.add(shopOrderStateLog); + } + // todo 优化多次远程查询 private Map dashboardPlantform() { List order_state = Arrays.asList( diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java index 8fd97300..55b8fab5 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/SFExpressApiService.java @@ -27,10 +27,11 @@ public interface SFExpressApiService { /** * 内部顺丰同城订单下单 - * @param sfCreateOrderReq + * @param orderId + * @param orderPickupNum * @return */ - Pair innerCreateSfExpressOrder(SFCreateOrderReq sfCreateOrderReq); + Pair innerCreateSfExpressOrder(String orderId, Long orderPickupNum); /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index d609079f..d25aa008 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -14,11 +14,17 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.suisung.mall.common.api.StateCode; +import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.store.ShopStoreSfOrder; import com.suisung.mall.common.pojo.req.*; import com.suisung.mall.common.pojo.res.SFExpressApiRes; +import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.JsonUtil; +import com.suisung.mall.shop.order.service.ShopOrderBaseService; +import com.suisung.mall.shop.order.service.ShopOrderInfoService; import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; +import com.suisung.mall.shop.store.service.ShopStoreBaseService; import com.suisung.mall.shop.store.service.ShopStoreSfOrderService; import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; @@ -26,6 +32,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; @@ -50,6 +57,12 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { @Resource private ShopStoreSfOrderService shopStoreSfOrderService; + @Resource + private ShopOrderBaseService shopOrderBaseService; + + @Resource + private ShopOrderInfoService shopOrderInfoService; + @Override public SFExpressApiRes createOrder(String shopOrderId) { // 组织请求参数 @@ -126,12 +139,20 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { /** * 内部顺丰同城订单下单 - * - * @param sfCreateOrderReq + * @param orderId + * @param orderPickupNum * @return */ @Override - public Pair innerCreateSfExpressOrder(SFCreateOrderReq sfCreateOrderReq) { + public Pair innerCreateSfExpressOrder(String orderId, Long orderPickupNum) { + + // 从商家订单中,组件顺丰的订单信息,注:关键的函数 + SFCreateOrderReq sfCreateOrderReq = shopOrderBaseService.buildSFOrderData(devId, orderId, orderPickupNum); + if (sfCreateOrderReq == null) { + logger.error("顺丰同城下单异常,无法获取下单记录!"); + return Pair.of(false, "顺丰同城下单异常,无法获取下单记录!"); + } + // 请求参数转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(sfCreateOrderReq); @@ -141,36 +162,37 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { String retRespStr = HttpUtil.post(send_url, paramJSON); if (StrUtil.isEmpty(retRespStr)) { logger.error("创建顺丰同城订单异常,无返回值!"); - return Pair.of(false, "创建顺丰同城订单异常,无返回值!"); + return Pair.of(false, "顺丰同城下单异常,无返回值!"); } JSONObject sfExpressApiRes = JSONUtil.parseObj(retRespStr); if (sfExpressApiRes == null) { - logger.error("创建顺丰同城订单后异常,无返回值!"); - return Pair.of(false, "创建顺丰同城订单后异常,无返回值!"); + logger.error("顺丰同城下单异常,无返回值!!"); + return Pair.of(false, "顺丰同城下单异常,无返回值!"); } if (!sfExpressApiRes.get("error_code").equals(0) || sfExpressApiRes.get("result") == null) { - logger.error("创建顺丰同城订单后,发生错误 {}", sfExpressApiRes.get("error_msg")); + logger.error("顺丰同城下单发生错误 {}", sfExpressApiRes.get("error_msg")); return Pair.of(false, Convert.toStr(sfExpressApiRes.get("error_msg"))); } // 顺丰同城 result json 数据转实体实例 - ShopStoreSfOrder shopStoreSfOrder = JSONUtil.toBean(sfExpressApiRes.get("result").toString(),ShopStoreSfOrder.class); + ShopStoreSfOrder shopStoreSfOrder = JSONUtil.toBean(sfExpressApiRes.get("result").toString(), ShopStoreSfOrder.class); shopStoreSfOrder.setDev_id(sfCreateOrderReq.getDev_id()); // 下单成功,保存顺丰同城订单记录到 shop_store_sf_order 表里 Boolean success = shopStoreSfOrderService.insertShopStoreSfOrder(shopStoreSfOrder); if (!success) { - return Pair.of(false, "保存顺丰同城订单失败!"); + return Pair.of(false, "保存顺丰同城下单失败!"); } // 取件码。在顺丰同城商户侧配置,配置后有此字段。 // String pickupCode = shopStoreSfOrder.getPickup_code() != null ? shopStoreSfOrder.getPickup_code().toString() : ""; - // TODO 商城订单状态:从 待发货 更改为 待收货 + // 商城订单状态:从 2020-待配货/待出库审核 到 2030-待发货 + shopOrderInfoService.changeOrderStatus(orderId, StateCode.ORDER_STATE_WAIT_SHIPPING, 0, 0); - return Pair.of(true, ""); + return Pair.of(true, "顺丰同城下单成功!"); } /** @@ -414,11 +436,13 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { /** * 接收顺丰配送状态更改回调 + * // 顺丰同城订单状态:1-订单创建;2-订单取消;10-配送员接单/配送员改派;12-配送员到店;15配送员配送中(已取货);17-配送员妥投完单;22-配送员撤单;31-取消中;91-骑士上报异常; * * @param jsonData * @param sign * @return */ + @Transactional @Override public SFExpressApiRes receiveRiderOrderStatusNotify(String jsonData, String sign) { if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) { @@ -435,9 +459,23 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); if (!success) { - return new SFExpressApiRes().fail(-1,"状态处理失败!"); + throw new ApiException(I18nUtil._("状态处理失败!")); +// return new SFExpressApiRes().fail(-1,"状态处理失败!"); } + // 更改商城订单状态为:注意事务问题 + if(shopStoreSfOrder.getSf_order_status().equals(StateCode.SF_ORDER_STATUS_RECEIVED)) { + // 配送员已取单配送中 + // 商城订单状态:从 2030-待发货 到 2040-已发货/待收货确认 + success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), StateCode.ORDER_STATE_WAIT_SHIPPING, StateCode.ORDER_PICKING_STATE_YES, StateCode.ORDER_SHIPPED_STATE_YES); + } + + if (!success) { + throw new ApiException(I18nUtil._("状态处理失败!")); + //return new SFExpressApiRes().fail(-1,"状态处理失败!"); + } + + return new SFExpressApiRes().success("success"); } @@ -448,6 +486,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { * @param sign * @return */ + @Transactional @Override public SFExpressApiRes receiveOrderCompleteNotify(String jsonData, String sign) { if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) { @@ -461,7 +500,6 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { logger.info("接收顺丰订单完成回调返回的 JSON 数据:{}", jsonData); - // 更改顺丰同城订单状态 ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); if ( shopStoreSfOrder == null) { @@ -474,18 +512,24 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { } // 订单状态已经更改过,无需更改 - if (order.getSf_order_status().equals(17)){ + if (order.getSf_order_status().equals(StateCode.SF_ORDER_STATUS_FINISH)){ return new SFExpressApiRes().success("success"); } Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); if (!success) { - return new SFExpressApiRes().fail(-1,"状态处理失败!"); + throw new ApiException(I18nUtil._("状态处理失败!")); +// return new SFExpressApiRes().fail(-1,"状态处理失败!"); } - // TODO 更改商城订单状态为:已完成,注意事务问题 - + // 更改商城订单状态为:已完成,注意事务问题 + // 配送员已取单配送中 + // 商城订单状态:从 040-已发货/待收货确认 到 2060-已完成/已签收 + success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), StateCode.ORDER_STATE_FINISH, 0, 0); + if (!success) { + throw new ApiException(I18nUtil._("状态处理失败!")); + } return new SFExpressApiRes().success("success"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java index 2665b573..ca103963 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java @@ -6,7 +6,9 @@ import com.suisung.mall.common.modules.account.AccountUserInfo; import com.suisung.mall.common.modules.base.ShopBaseStoreCategory; import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.modules.store.ShopStoreCompany; +import com.suisung.mall.common.pojo.dto.StandardAddressDTO; import com.suisung.mall.core.web.service.IBaseService; +import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -98,4 +100,11 @@ public interface ShopStoreBaseService extends IBaseService { * @return */ ShopStoreBase getShopStoreBaseByStoreId(Integer store_id); + + /** + * 检测店铺的地址是否有效,返回规范全地址 + * @param shopStoreBase + * @return + */ + Pair checkStoreAddress(ShopStoreBase shopStoreBase); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index 688faf4b..66b36628 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -42,6 +42,7 @@ import com.suisung.mall.common.modules.product.ShopProductBase; import com.suisung.mall.common.modules.product.ShopProductIndex; import com.suisung.mall.common.modules.store.*; import com.suisung.mall.common.modules.user.ShopUserFavoritesStore; +import com.suisung.mall.common.pojo.dto.StandardAddressDTO; import com.suisung.mall.common.utils.CSVUtils; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; @@ -69,6 +70,7 @@ import io.seata.spring.annotation.GlobalTransactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; @@ -2822,6 +2824,46 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl checkStoreAddress(ShopStoreBase shopStoreBase) { + if (shopStoreBase == null) { + return Pair.of(false, new StandardAddressDTO()); + } + + StandardAddressDTO standardAddressDTO = new StandardAddressDTO(); + if (StrUtil.isBlank(shopStoreBase.getStore_area()) || StrUtil.isBlank(shopStoreBase.getStore_address()) || StrUtil.isBlank(shopStoreBase.getStore_longitude()) || StrUtil.isBlank(shopStoreBase.getStore_latitude())) { + StringBuffer sb = new StringBuffer(); + if(StrUtil.isNotBlank(shopStoreBase.getStore_area())){ + sb.append(StrUtil.replace(shopStoreBase.getStore_area(), "/", "")); + } + if(StrUtil.isNotBlank(shopStoreBase.getStore_address())){ + sb.append(shopStoreBase.getStore_address()); + } + if(StrUtil.isNotBlank(shopStoreBase.getStore_longitude())){ + shopStoreBase.setStore_longitude("0"); + } + if(StrUtil.isNotBlank(shopStoreBase.getStore_latitude())){ + shopStoreBase.setStore_latitude("0"); + } + standardAddressDTO.setFullAddress(sb.toString()); + standardAddressDTO.setLongitude(shopStoreBase.getStore_longitude()); + standardAddressDTO.setLatitude(shopStoreBase.getStore_latitude()); + return Pair.of(false, new StandardAddressDTO()); + } + + standardAddressDTO.setLongitude(shopStoreBase.getStore_longitude()); + standardAddressDTO.setLatitude(shopStoreBase.getStore_latitude()); + standardAddressDTO.setFullAddress(StrUtil.format("%s%s", StrUtil.replace(shopStoreBase.getStore_area(), "/", ""), shopStoreBase.getStore_address())); + + return Pair.of(true, standardAddressDTO); + } + /** * 处理 store_slide 字段 *