顺丰同城嵌入逻辑开发

This commit is contained in:
Jack 2024-12-02 00:20:47 +08:00
parent a820c7bbdf
commit cb18871f40
14 changed files with 528 additions and 135 deletions

View File

@ -506,4 +506,15 @@ public class StateCode {
public static final int PRINTER_TEMP_CATE_ORDER = 1; public static final int PRINTER_TEMP_CATE_ORDER = 1;
// 打票机模版分类1-下单打印模版2-退货打印模版 // 打票机模版分类1-下单打印模版2-退货打印模版
public static final int PRINTER_TEMP_CATE_REFUND = 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;
} }

View File

@ -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; // 维度
}

View File

@ -1,12 +1,13 @@
package com.suisung.mall.common.utils; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
@ -148,4 +149,73 @@ public class CommonUtil {
return d.setScale(0, BigDecimal.ROUND_HALF_UP); 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;
}
} }

View File

@ -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.message.service.MqMessageService;
import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderBaseService;
import com.suisung.mall.shop.order.service.ShopOrderInfoService; 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 com.suisung.mall.shop.store.service.ShopStorePrinterService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; 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.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -36,6 +39,8 @@ public class OrderPayedListener {
private ShopStorePrinterService shopStorePrinterService; private ShopStorePrinterService shopStorePrinterService;
@Autowired @Autowired
private MqMessageService mqMessageService; private MqMessageService mqMessageService;
@Resource
private SFExpressApiService sfExpressApiService;
@RabbitHandler @RabbitHandler
public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException { public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException {
@ -87,6 +92,18 @@ public class OrderPayedListener {
shopStorePrinterService.printShopStoreOrder(orderId); shopStorePrinterService.printShopStoreOrder(orderId);
// 发送顺丰同城快递 // 发送顺丰同城快递
Pair<Boolean, String> pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum);
if(pairCreateSfOrder==null){
logger.error("顺丰同城下单失败pairCreateSfOrder 返回空值");
return;
}
if(!pairCreateSfOrder.getFirst()){
logger.error("顺丰同城下单失败:{}",pairCreateSfOrder.getSecond());
return;
}
logger.info("顺丰同城下单成功");
} }
} }

View File

@ -528,5 +528,5 @@ public interface ShopOrderBaseService extends IBaseService<ShopOrderBase> {
* @param orderPickupNum * @param orderPickupNum
* @return * @return
*/ */
SFCreateOrderReq buildSFOrderData(Integer devId,String orderId,String orderPickupNum); SFCreateOrderReq buildSFOrderData(Integer devId,String orderId, Long orderPickupNum);
} }

View File

@ -1,7 +1,10 @@
package com.suisung.mall.shop.order.service; package com.suisung.mall.shop.order.service;
import com.suisung.mall.common.modules.order.ShopOrderDeliveryAddress; 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 com.suisung.mall.core.web.service.IBaseService;
import org.springframework.data.util.Pair;
/** /**
* <p> * <p>
@ -18,4 +21,11 @@ public interface ShopOrderDeliveryAddressService extends IBaseService<ShopOrderD
* @return * @return
*/ */
ShopOrderDeliveryAddress selectByOrderId(String orderId); ShopOrderDeliveryAddress selectByOrderId(String orderId);
/**
* 检测地址是否有效返回规范全地址
* @param shopOrderDeliveryAddress
* @return
*/
Pair<Boolean, StandardAddressDTO> checkAddress(ShopOrderDeliveryAddress shopOrderDeliveryAddress);
} }

View File

@ -31,4 +31,15 @@ public interface ShopOrderInfoService extends IBaseService<ShopOrderInfo> {
*/ */
Long genTodayPickupNum(Integer storeId); 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);
} }

View File

@ -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.product.ShopProductValidPeriod;
import com.suisung.mall.common.modules.store.*; import com.suisung.mall.common.modules.store.*;
import com.suisung.mall.common.modules.user.*; import com.suisung.mall.common.modules.user.*;
import com.suisung.mall.common.pojo.req.SFCreateOrderReq; import com.suisung.mall.common.pojo.dto.StandardAddressDTO;
import com.suisung.mall.common.pojo.req.SFOrderReceiveReq; import com.suisung.mall.common.pojo.req.*;
import com.suisung.mall.common.pojo.req.SFOrderShopReq;
import com.suisung.mall.common.pojo.to.MsgTO; import com.suisung.mall.common.pojo.to.MsgTO;
import com.suisung.mall.common.pojo.to.PayMoneyTO; import com.suisung.mall.common.pojo.to.PayMoneyTO;
import com.suisung.mall.common.pojo.to.PayPointTO; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.util.Pair;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionDefinition;
@ -113,6 +113,7 @@ import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -349,7 +350,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
@Resource @Resource
private ShopOrderDeliveryAddressService shopOrderDeliveryAddressService; private ShopOrderDeliveryAddressService shopOrderDeliveryAddressService;
private Logger logger = LoggerFactory.getLogger(ShopOrderBaseServiceImpl.class); private final Logger logger = LoggerFactory.getLogger(ShopOrderBaseServiceImpl.class);
@Override @Override
@ -452,9 +453,9 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
order_info.put("fin_num", fin_num); order_info.put("fin_num", fin_num);
long fin_num_entity = getFinishedNum(user_id, null, null, StateCode.PRODUCT_KIND_ENTITY); long fin_num_entity = getFinishedNum(user_id, null, null, StateCode.PRODUCT_KIND_ENTITY);
long edu_fin_num = getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Arrays.asList(StateCode.ORDER_STATE_FINISH)); long edu_fin_num = getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Collections.singletonList(StateCode.ORDER_STATE_FINISH));
order_info.put("edu_fin_num", edu_fin_num); order_info.put("edu_fin_num", edu_fin_num);
order_info.put("edu_cancel_num", getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Arrays.asList(StateCode.ORDER_STATE_CANCEL))); order_info.put("edu_cancel_num", getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Collections.singletonList(StateCode.ORDER_STATE_CANCEL)));
order_info.put("fin_num_entity", fin_num_entity); order_info.put("fin_num_entity", fin_num_entity);
order_info.put("fin_num_v", fin_num - fin_num_entity - edu_fin_num); order_info.put("fin_num_v", fin_num - fin_num_entity - edu_fin_num);
@ -488,7 +489,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
order_info.put("wait_pay_num", wait_pay_num); order_info.put("wait_pay_num", wait_pay_num);
long wait_pay_num_entity = getWaitPayNum(user_id, null, null, StateCode.PRODUCT_KIND_ENTITY); long wait_pay_num_entity = getWaitPayNum(user_id, null, null, StateCode.PRODUCT_KIND_ENTITY);
order_info.put("wait_pay_num_entity", wait_pay_num_entity); order_info.put("wait_pay_num_entity", wait_pay_num_entity);
long edu_wait_num = getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Arrays.asList(StateCode.ORDER_STATE_WAIT_PAY)); long edu_wait_num = getOrderNumByState(user_id, null, null, StateCode.PRODUCT_KIND_EDU, Collections.singletonList(StateCode.ORDER_STATE_WAIT_PAY));
order_info.put("edu_wait_num", edu_wait_num); order_info.put("edu_wait_num", edu_wait_num);
order_info.put("wait_pay_num_v", wait_pay_num - wait_pay_num_entity - edu_wait_num); order_info.put("wait_pay_num_v", wait_pay_num - wait_pay_num_entity - edu_wait_num);
@ -2149,80 +2150,80 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
log.setOrder_state_type(shopBaseStateCodeService.getText(order_state_id, null)); log.setOrder_state_type(shopBaseStateCodeService.getText(order_state_id, null));
log.setUser_id(user_id); log.setUser_id(user_id);
log.setUser_nickname(user_nickname); log.setUser_nickname(user_nickname);
log.setOrder_state_note(getOrderStateNote(order_state_pre_id, order_state_id)); log.setOrder_state_note(CommonUtil.getOrderStateNote(order_state_pre_id, order_state_id));
log.setOrder_state_time(new Date()); log.setOrder_state_time(new Date());
} }
return shopOrderStateLogService.saveOrUpdate(logs); return shopOrderStateLogService.saveOrUpdate(logs);
} }
private String getOrderStateNote(int order_state_pre_id, int order_state_id) { // private String getOrderStateNote(int order_state_pre_id, int order_state_id) {
//
String rtn = ""; // String rtn = "";
String access = ""; // String access = "";
//
Map state_code_arr = new HashMap(); // Map state_code_arr = new HashMap();
state_code_arr.put(StateCode.ORDER_STATE_CANCEL, -1); // 取消订单 // 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_SUBMIT, 0); // 提交订单
state_code_arr.put(StateCode.ORDER_PROCESS_PAY, 1); // 订单支付 // 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_CHECK, 2); // 订单审核
state_code_arr.put(StateCode.ORDER_PROCESS_FINANCE_REVIEW, 3); // 财务审核 // 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_OUT, 4); // 订单出库
state_code_arr.put(StateCode.ORDER_PROCESS_SHIPPED, 5); // 订单发货 // state_code_arr.put(StateCode.ORDER_PROCESS_SHIPPED, 5); // 订单发货
state_code_arr.put(StateCode.ORDER_PROCESS_RECEIVED, 6); // 确认收货 // 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_RECEIVED, 7); // 已签收
state_code_arr.put(StateCode.ORDER_STATE_FINISH, 8); // 已完成 // state_code_arr.put(StateCode.ORDER_STATE_FINISH, 8); // 已完成
//
Set keySet = state_code_arr.keySet(); // Set keySet = state_code_arr.keySet();
if (!keySet.contains(order_state_id)) { // if (!keySet.contains(order_state_id)) {
throw new ApiException(I18nUtil._("订单状态ID错误")); // throw new ApiException(I18nUtil._("订单状态ID错误"));
} // }
//
Map state_msg_arr = new HashMap(); // Map state_msg_arr = new HashMap();
state_msg_arr.put(StateCode.ORDER_PROCESS_SUBMIT, I18nUtil._("提交订单")); // 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_PAY, I18nUtil._("支付"));
state_msg_arr.put(StateCode.ORDER_PROCESS_CHECK, 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_FINANCE_REVIEW, I18nUtil._("财务审核"));
state_msg_arr.put(StateCode.ORDER_PROCESS_OUT, 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_SHIPPED, I18nUtil._("确认发货"));
state_msg_arr.put(StateCode.ORDER_PROCESS_RECEIVED, 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_RECEIVED, I18nUtil._("签收"));
state_msg_arr.put(StateCode.ORDER_STATE_FINISH, 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_STATE_CANCEL, I18nUtil._("取消"));
state_msg_arr.put(StateCode.ORDER_PROCESS_FINISH, 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)) { // if (CheckUtil.isEmpty(order_state_pre_id) && ObjectUtil.equal(order_state_id, StateCode.ORDER_PROCESS_SUBMIT)) {
rtn = I18nUtil._("已提交订单"); // rtn = I18nUtil._("已提交订单");
} else if (ObjectUtil.equal(order_state_id, StateCode.ORDER_STATE_CANCEL)) { // } else if (ObjectUtil.equal(order_state_id, StateCode.ORDER_STATE_CANCEL)) {
rtn = I18nUtil._("已提交取消"); // rtn = I18nUtil._("已提交取消");
} else { // } else {
Integer state1 = (Integer) state_code_arr.get(order_state_id); // Integer state1 = (Integer) state_code_arr.get(order_state_id);
Integer state2 = (Integer) state_code_arr.get(order_state_pre_id); // Integer state2 = (Integer) state_code_arr.get(order_state_pre_id);
if (state1 > state2) { // if (state1 > state2) {
access = I18nUtil._(""); // access = I18nUtil._("");
} else { // } else {
access = I18nUtil._(""); // access = I18nUtil._("");
rtn = I18nUtil._("退回重审"); // rtn = I18nUtil._("退回重审");
} // }
//
switch (order_state_pre_id) { // switch (order_state_pre_id) {
case StateCode.ORDER_PROCESS_CHECK: // case StateCode.ORDER_PROCESS_CHECK:
case StateCode.ORDER_PROCESS_FINANCE_REVIEW: // case StateCode.ORDER_PROCESS_FINANCE_REVIEW:
case StateCode.ORDER_PROCESS_OUT: // case StateCode.ORDER_PROCESS_OUT:
rtn = I18nUtil._("订单") + access + I18nUtil._("通过") + state_msg_arr.get(order_state_pre_id); // rtn = I18nUtil._("订单") + access + I18nUtil._("通过") + state_msg_arr.get(order_state_pre_id);
break; // break;
case StateCode.ORDER_PROCESS_PAY: // case StateCode.ORDER_PROCESS_PAY:
case StateCode.ORDER_PROCESS_SHIPPED: // case StateCode.ORDER_PROCESS_SHIPPED:
case StateCode.ORDER_PROCESS_RECEIVED: // case StateCode.ORDER_PROCESS_RECEIVED:
case StateCode.ORDER_PROCESS_FINISH: // case StateCode.ORDER_PROCESS_FINISH:
rtn = I18nUtil._("订单") + access + state_msg_arr.get(order_state_pre_id) + rtn; // rtn = I18nUtil._("订单") + access + state_msg_arr.get(order_state_pre_id) + rtn;
break; // break;
} // }
} // }
//
return rtn; // return rtn;
} // }
/** /**
* 1.修改订单为下一个待处理状态,并几率当前状态处理时间 * 1.修改订单为下一个待处理状态,并几率当前状态处理时间
@ -2505,7 +2506,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
Map tmp_stock_bill_id = new HashMap(); Map tmp_stock_bill_id = new HashMap();
tmp_stock_bill_id.put(src_order_id, bill.getStock_bill_id()); tmp_stock_bill_id.put(src_order_id, bill.getStock_bill_id());
if (!doReviewPicking(Arrays.asList(src_order_id), null, filter_order_items, tmp_stock_bill_id)) { if (!doReviewPicking(Collections.singletonList(src_order_id), null, filter_order_items, tmp_stock_bill_id)) {
throw new ApiException(ResultCode.FAILED); throw new ApiException(ResultCode.FAILED);
} }
} }
@ -2944,7 +2945,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
BigDecimal points_consume_max = Convert.toBigDecimal(accountBaseConfigService.getConfig("points_consume_max"), BigDecimal.ZERO); BigDecimal points_consume_max = Convert.toBigDecimal(accountBaseConfigService.getConfig("points_consume_max"), BigDecimal.ZERO);
BigDecimal round_points = NumberUtil.round(NumberUtil.mul(points_consume_rate, order_payment_amount_for_points), 2); BigDecimal round_points = NumberUtil.round(NumberUtil.mul(points_consume_rate, order_payment_amount_for_points), 2);
BigDecimal min = NumberUtil.min(round_points, points_consume_max); BigDecimal min = NumberUtil.min(round_points, points_consume_max);
order_points_add = min.setScale(0, BigDecimal.ROUND_DOWN); order_points_add = min.setScale(0, RoundingMode.DOWN);
} }
if (CheckUtil.isNotEmpty(order_points_add)) { if (CheckUtil.isNotEmpty(order_points_add)) {
@ -3000,7 +3001,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
// todo 教育购买课程记录不放在这 // todo 教育购买课程记录不放在这
Long product_id = item.getProduct_id(); Long product_id = item.getProduct_id();
if (!eduService.saveUserCourseStock(user_id, product_id)) { if (!eduService.saveUserCourseStock(user_id, product_id)) {
logger.error("保存购买课程记录失败product_id{}",product_id); logger.error("保存购买课程记录失败product_id{}", product_id);
throw new ApiException(String.format(I18nUtil._("保存购买课程记录失败product_id【%s】"), product_id)); throw new ApiException(String.format(I18nUtil._("保存购买课程记录失败product_id【%s】"), product_id));
} }
} }
@ -3138,7 +3139,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (ObjectUtil.equal(1002, order_item_inventory_lock) && CheckUtil.isEmpty(item_src_id)) { if (ObjectUtil.equal(1002, order_item_inventory_lock) && CheckUtil.isEmpty(item_src_id)) {
Long item_id = order_item_row.getItem_id(); Long item_id = order_item_row.getItem_id();
if (shopProductItemService.lockSkuStock(item_id, order_item_row.getOrder_item_quantity()) <= 0) { if (shopProductItemService.lockSkuStock(item_id, order_item_row.getOrder_item_quantity()) <= 0) {
logger.error("更改: {} 冻结库存失败!",item_id); logger.error("更改: {} 冻结库存失败!", item_id);
throw new ApiException(String.format(I18nUtil._("更改: %s 冻结库存失败!"), item_id)); throw new ApiException(String.format(I18nUtil._("更改: %s 冻结库存失败!"), item_id));
} }
} }
@ -3204,7 +3205,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
ShopOrderInvoice invoice = orderInvoiceService.findOne(invoiceQueryWrapper); ShopOrderInvoice invoice = orderInvoiceService.findOne(invoiceQueryWrapper);
if (invoice != null) { if (invoice != null) {
if (!orderInvoiceService.edit(shopOrderInvoice, invoiceQueryWrapper)) { if (!orderInvoiceService.edit(shopOrderInvoice, invoiceQueryWrapper)) {
logger.error("更改: {} 发票失败!",order_ids); logger.error("更改: {} 发票失败!", order_ids);
throw new ApiException(ResultCode.FAILED); throw new ApiException(ResultCode.FAILED);
} }
} }
@ -3725,7 +3726,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
String logistics_explain = getParameter("logistics_explain", ""); String logistics_explain = getParameter("logistics_explain", "");
String str_logistics_time = getParameter("logistics_time"); String str_logistics_time = getParameter("logistics_time");
Date logistics_time = StrUtil.isNotBlank(str_logistics_time) ? DateUtil.parse(str_logistics_time) : null; Date logistics_time = StrUtil.isNotBlank(str_logistics_time) ? DateUtil.parse(str_logistics_time) : null;
Long order_logistics_id = getParameter("order_logistics_id", 0l); Long order_logistics_id = getParameter("order_logistics_id", 0L);
if (orderLogistics != null) { if (orderLogistics != null) {
order_tracking_number = orderLogistics.getOrder_tracking_number(); order_tracking_number = orderLogistics.getOrder_tracking_number();
@ -3754,7 +3755,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
params.put("store_id:eq", userDto.getStore_id()); params.put("store_id:eq", userDto.getStore_id());
if ("DESC".equals(sord.toUpperCase())) { if ("DESC".equalsIgnoreCase(sord)) {
params.put(sidx + ":desc", ""); params.put(sidx + ":desc", "");
} else { } else {
params.put(sidx + ":asc", ""); params.put(sidx + ":asc", "");
@ -4216,12 +4217,12 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
params.put("order_time:lt", DateUtil.parse(order_time_end, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").getTime()); params.put("order_time:lt", DateUtil.parse(order_time_end, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").getTime());
} }
Long stime = getParameter("stime", 0l); Long stime = getParameter("stime", 0L);
if (CheckUtil.isNotEmpty(stime)) { if (CheckUtil.isNotEmpty(stime)) {
params.put("order_time:gt", stime); params.put("order_time:gt", stime);
} }
Long etime = getParameter("etime", 0l); Long etime = getParameter("etime", 0L);
if (CheckUtil.isNotEmpty(etime)) { if (CheckUtil.isNotEmpty(etime)) {
params.put("order_time:lt", etime); params.put("order_time:lt", etime);
} }
@ -5585,7 +5586,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
} else { } else {
//todo 通知余额不足 //todo 通知余额不足
//throw new Exception(sprintf('order_id : %s 余额不足%s - 转单无法下单', $order_id, $trade_payment_money)); //throw new Exception(sprintf('order_id : %s 余额不足%s - 转单无法下单', $order_id, $trade_payment_money));
throw new ApiException(String.format("order_id : %s 余额不足:%s - 转单无法下单", order_id, trade_payment_amount.toString())); throw new ApiException(String.format("order_id : %s 余额不足:%s - 转单无法下单", order_id, trade_payment_amount));
} }
} }
} }
@ -7273,11 +7274,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
Boolean is_on_sale_tmp = Convert.toBool(s.get("is_on_sale")); Boolean is_on_sale_tmp = Convert.toBool(s.get("is_on_sale"));
Long item_id_tmp = Convert.toLong(s.get("item_id")); Long item_id_tmp = Convert.toLong(s.get("item_id"));
if (cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp)) { return cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp);
return true;
} else {
return false;
}
}).map(s -> { }).map(s -> {
return Convert.toBigDecimal(s.get("cart_quantity"), BigDecimal.ZERO); return Convert.toBigDecimal(s.get("cart_quantity"), BigDecimal.ZERO);
}).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
@ -7298,11 +7295,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
Boolean is_on_sale_tmp = Convert.toBool(s.get("is_on_sale")); Boolean is_on_sale_tmp = Convert.toBool(s.get("is_on_sale"));
Long item_id_tmp = Convert.toLong(s.get("item_id")); Long item_id_tmp = Convert.toLong(s.get("item_id"));
if (cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp)) { return cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp);
return true;
} else {
return false;
}
}).map(s -> { }).map(s -> {
return Convert.toBigDecimal(s.get("subtotal"), BigDecimal.ZERO); return Convert.toBigDecimal(s.get("subtotal"), BigDecimal.ZERO);
}).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
@ -7543,7 +7536,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (ObjectUtil.compare(_order_payment_amount, BigDecimal.ZERO) <= 0) { if (ObjectUtil.compare(_order_payment_amount, BigDecimal.ZERO) <= 0) {
// 订单付款状态处理 // 订单付款状态处理
// 不需要添加收款记录直接修改订单状态 // 不需要添加收款记录直接修改订单状态
List<String> order_id_row_temp = Arrays.asList(order_id); List<String> order_id_row_temp = Collections.singletonList(order_id);
if (!setPaidYes(order_id_row_temp)) { if (!setPaidYes(order_id_row_temp)) {
throw new ApiException(I18nUtil._("订单支付状态修改失败!")); throw new ApiException(I18nUtil._("订单支付状态修改失败!"));
} else { } else {
@ -8115,7 +8108,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (CollUtil.isNotEmpty(order_id_receipt)) { if (CollUtil.isNotEmpty(order_id_receipt)) {
for (String order_id : order_id_receipt) { for (String order_id : order_id_receipt) {
try { try {
if (!shopOrderBaseService.receive(Arrays.asList(order_id), null)) { if (!shopOrderBaseService.receive(Collections.singletonList(order_id), null)) {
LogUtil.error(String.format(I18nUtil._("order_id : %s 确认出错"), order_id)); LogUtil.error(String.format(I18nUtil._("order_id : %s 确认出错"), order_id));
} }
} catch (Exception e) { } catch (Exception e) {
@ -8295,7 +8288,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
* @param orderId * @param orderId
* @return * @return
*/ */
public SFCreateOrderReq buildSFOrderData(Integer devId,String orderId,String orderPickupNum) { public SFCreateOrderReq buildSFOrderData(Integer devId, String orderId, Long orderPickupNum) {
if (StrUtil.isBlank(orderId)) { if (StrUtil.isBlank(orderId)) {
return null; return null;
} }
@ -8307,38 +8300,82 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
return null; return null;
} }
ShopOrderBase shopOrderBase = shopOrderBaseService.getById(orderId);
QueryWrapper<ShopOrderItem> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("order_id", orderId);
List<ShopOrderItem> 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 sfCreateOrderReq = new SFCreateOrderReq();
sfCreateOrderReq.setDev_id(devId); sfCreateOrderReq.setDev_id(devId);
sfCreateOrderReq.setShop_id(shopStoreBase.getStore_id().toString()); sfCreateOrderReq.setShop_id(shopStoreBase.getStore_id().toString());
sfCreateOrderReq.setPush_time(DateUtil.currentSeconds()); sfCreateOrderReq.setPush_time(DateUtil.currentSeconds());
sfCreateOrderReq.setShop_order_id(orderId); sfCreateOrderReq.setShop_order_id(orderId);
sfCreateOrderReq.setOrder_time(DateUtil.currentSeconds()); sfCreateOrderReq.setOrder_time(shopOrderBase.getOrder_time().getTime() / 1000);
sfCreateOrderReq.setOrder_source("小发同城"); sfCreateOrderReq.setOrder_source("小发同城"); //订单来源
sfCreateOrderReq.setOrder_sequence(orderPickupNum); sfCreateOrderReq.setOrder_sequence(orderPickupNumStr); //拣货编号
// sfCreateOrderReq.setRemark(shopStoreInfo.getOrder_message);
sfCreateOrderReq.setVersion(19); sfCreateOrderReq.setVersion(19);
sfCreateOrderReq.setReturn_flag(511); sfCreateOrderReq.setReturn_flag(511);
Integer productNum = 0;
Integer productTypeNum = shopOrderItemList.size();
// 订单详情信息
SFOrderDetailReq orderDetail = new SFOrderDetailReq();
// 订单里的所有商品列表
List<SFOrderProductDetailReq> 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<Boolean, StandardAddressDTO> pairShopAddr = shopStoreBaseService.checkStoreAddress(shopStoreBase);
SFOrderShopReq sfOrderShopReq = new SFOrderShopReq(); SFOrderShopReq sfOrderShopReq = new SFOrderShopReq();
sfOrderShopReq.setShop_name(shopStoreBase.getStore_name()); sfOrderShopReq.setShop_name(shopStoreBase.getStore_name());
sfOrderShopReq.setShop_phone(shopStoreInfo.getStore_tel()); sfOrderShopReq.setShop_phone(shopStoreInfo.getStore_tel());
sfOrderShopReq.setShop_address(shopStoreBase.getStore_address()); sfOrderShopReq.setShop_address(pairShopAddr.getSecond().getFullAddress());
sfOrderShopReq.setShop_lng(shopStoreBase.getStore_longitude()); sfOrderShopReq.setShop_lng(pairShopAddr.getSecond().getLongitude());
sfOrderShopReq.setShop_lat(shopStoreBase.getStore_latitude()); sfOrderShopReq.setShop_lat(pairShopAddr.getSecond().getLatitude());
sfCreateOrderReq.setShop(sfOrderShopReq); sfCreateOrderReq.setShop(sfOrderShopReq);
// 收货人信息 // 收货人信息
Pair<Boolean, StandardAddressDTO> pairReceiveAddr = shopOrderDeliveryAddressService.checkAddress(shopOrderDeliveryAddress);
SFOrderReceiveReq receive = new SFOrderReceiveReq(); SFOrderReceiveReq receive = new SFOrderReceiveReq();
receive.setUser_name(shopOrderDeliveryAddress.getDa_name()); receive.setUser_name(shopOrderDeliveryAddress.getDa_name());
receive.setUser_phone(shopOrderDeliveryAddress.getDa_telephone()); receive.setUser_phone(shopOrderDeliveryAddress.getDa_telephone());
receive.setUser_address(shopOrderDeliveryAddress.getDa_address()); receive.setUser_address(pairReceiveAddr.getSecond().getFullAddress());
receive.setUser_lng(shopOrderDeliveryAddress.getDa_longitude()); receive.setUser_lng(pairReceiveAddr.getSecond().getLongitude());
receive.setUser_lat(shopOrderDeliveryAddress.getDa_latitude()); receive.setUser_lat(pairReceiveAddr.getSecond().getLatitude());
sfCreateOrderReq.setReceive(receive); sfCreateOrderReq.setReceive(receive);

View File

@ -2,9 +2,11 @@ package com.suisung.mall.shop.order.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.suisung.mall.common.modules.order.ShopOrderDeliveryAddress; 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.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.order.mapper.ShopOrderDeliveryAddressMapper; import com.suisung.mall.shop.order.mapper.ShopOrderDeliveryAddressMapper;
import com.suisung.mall.shop.order.service.ShopOrderDeliveryAddressService; import com.suisung.mall.shop.order.service.ShopOrderDeliveryAddressService;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -32,4 +34,52 @@ public class ShopOrderDeliveryAddressServiceImpl extends BaseServiceImpl<ShopOrd
return getById(orderId); return getById(orderId);
} }
/**
* 检测地址是否有效返回规范全地址
*
* @param shopOrderDeliveryAddress
* @return
*/
@Override
public Pair<Boolean, StandardAddressDTO> 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);
}
} }

View File

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.api.StateCode;
import com.suisung.mall.common.feignService.AccountService; import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.common.feignService.PayService; 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.distribution.ShopDistributionUserWithdraw;
import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.common.modules.order.ShopOrderInfo;
import com.suisung.mall.common.modules.order.ShopOrderInvoice; 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.pay.PayPlantformResource;
import com.suisung.mall.common.modules.plantform.ShopPlantformFeedback; import com.suisung.mall.common.modules.plantform.ShopPlantformFeedback;
import com.suisung.mall.common.modules.product.ShopProductComment; 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.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.base.service.AccountBaseConfigService; 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.ShopDistributionUserCommissionService;
import com.suisung.mall.shop.distribution.service.ShopDistributionUserWithdrawService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserWithdrawService;
import com.suisung.mall.shop.order.mapper.ShopOrderInfoMapper; import com.suisung.mall.shop.order.mapper.ShopOrderInfoMapper;
import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.*;
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.plantform.service.ShopPlantformActivityItemService; import com.suisung.mall.shop.plantform.service.ShopPlantformActivityItemService;
import com.suisung.mall.shop.plantform.service.ShopPlantformFeedbackService; import com.suisung.mall.shop.plantform.service.ShopPlantformFeedbackService;
import com.suisung.mall.shop.product.service.ShopProductBaseService; import com.suisung.mall.shop.product.service.ShopProductBaseService;
@ -34,9 +35,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -98,6 +101,12 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
@Autowired @Autowired
private ShopOrderInvoiceService shopOrderInvoiceService; private ShopOrderInvoiceService shopOrderInvoiceService;
@Resource
private ShopOrderStateLogService shopOrderStateLogService;
@Resource
private ShopBaseStateCodeService shopBaseStateCodeService;
@Autowired @Autowired
private ThreadPoolExecutor executor; private ThreadPoolExecutor executor;
@ -193,7 +202,7 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.HOUR_OF_DAY, 0);
// calendar.set(2024,10,5,0,0,0); // calendar.set(2024,10,5,0,0,0);
QueryWrapper<ShopOrderInfo> queryWrapper = new QueryWrapper<>(); QueryWrapper<ShopOrderInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("store_id", storeId); queryWrapper.eq("store_id", storeId);
@ -209,6 +218,61 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
} }
} }
/**
* 更改商家订单的状态出库状态发货状态并写入订单状态更改日志
*
* @param orderId
* @param orderStatus 约定0值不更改
* @param orderIsOutStatus 出库状态约定0值不更改
* @param orderIsShippedStatus 发货状态约定0值不更改
* @return
*/
@Override
public Boolean changeOrderStatus(String orderId, Integer orderStatus, Integer orderIsOutStatus, Integer orderIsShippedStatus) {
if (orderId == null || orderStatus == null) {
return false;
}
ShopOrderInfo shopOrderInfo = getById(orderId);
if (shopOrderInfo == null) {
return false;
}
Integer preOrderStatus = shopOrderInfo.getOrder_state_id();
UpdateWrapper<ShopOrderInfo> 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 优化多次远程查询 // todo 优化多次远程查询
private Map dashboardPlantform() { private Map dashboardPlantform() {
List<Integer> order_state = Arrays.asList( List<Integer> order_state = Arrays.asList(

View File

@ -27,10 +27,11 @@ public interface SFExpressApiService {
/** /**
* 内部顺丰同城订单下单 * 内部顺丰同城订单下单
* @param sfCreateOrderReq * @param orderId
* @param orderPickupNum
* @return * @return
*/ */
Pair<Boolean,String> innerCreateSfExpressOrder(SFCreateOrderReq sfCreateOrderReq); Pair<Boolean,String> innerCreateSfExpressOrder(String orderId, Long orderPickupNum);
/** /**

View File

@ -14,11 +14,17 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; 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.modules.store.ShopStoreSfOrder;
import com.suisung.mall.common.pojo.req.*; import com.suisung.mall.common.pojo.req.*;
import com.suisung.mall.common.pojo.res.SFExpressApiRes; 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.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.sfexpress.service.SFExpressApiService;
import com.suisung.mall.shop.store.service.ShopStoreBaseService;
import com.suisung.mall.shop.store.service.ShopStoreSfOrderService; import com.suisung.mall.shop.store.service.ShopStoreSfOrderService;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -26,6 +32,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.util.Pair; import org.springframework.data.util.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@ -50,6 +57,12 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
@Resource @Resource
private ShopStoreSfOrderService shopStoreSfOrderService; private ShopStoreSfOrderService shopStoreSfOrderService;
@Resource
private ShopOrderBaseService shopOrderBaseService;
@Resource
private ShopOrderInfoService shopOrderInfoService;
@Override @Override
public SFExpressApiRes createOrder(String shopOrderId) { public SFExpressApiRes createOrder(String shopOrderId) {
// 组织请求参数 // 组织请求参数
@ -126,12 +139,20 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
/** /**
* 内部顺丰同城订单下单 * 内部顺丰同城订单下单
* * @param orderId
* @param sfCreateOrderReq * @param orderPickupNum
* @return * @return
*/ */
@Override @Override
public Pair<Boolean,String> innerCreateSfExpressOrder(SFCreateOrderReq sfCreateOrderReq) { public Pair<Boolean,String> innerCreateSfExpressOrder(String orderId, Long orderPickupNum) {
// 从商家订单中组件顺丰的订单信息关键的函数
SFCreateOrderReq sfCreateOrderReq = shopOrderBaseService.buildSFOrderData(devId, orderId, orderPickupNum);
if (sfCreateOrderReq == null) {
logger.error("顺丰同城下单异常,无法获取下单记录!");
return Pair.of(false, "顺丰同城下单异常,无法获取下单记录!");
}
// 请求参数转换 json 字符串参数 // 请求参数转换 json 字符串参数
String paramJSON = JsonUtil.toJSONString(sfCreateOrderReq); String paramJSON = JsonUtil.toJSONString(sfCreateOrderReq);
@ -141,36 +162,37 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
String retRespStr = HttpUtil.post(send_url, paramJSON); String retRespStr = HttpUtil.post(send_url, paramJSON);
if (StrUtil.isEmpty(retRespStr)) { if (StrUtil.isEmpty(retRespStr)) {
logger.error("创建顺丰同城订单异常,无返回值!"); logger.error("创建顺丰同城订单异常,无返回值!");
return Pair.of(false, "创建顺丰同城订单异常,无返回值!"); return Pair.of(false, "顺丰同城下单异常,无返回值!");
} }
JSONObject sfExpressApiRes = JSONUtil.parseObj(retRespStr); JSONObject sfExpressApiRes = JSONUtil.parseObj(retRespStr);
if (sfExpressApiRes == null) { if (sfExpressApiRes == null) {
logger.error("创建顺丰同城订单后异常,无返回值"); logger.error("顺丰同城下单异常,无返回值!");
return Pair.of(false, "创建顺丰同城订单后异常,无返回值!"); return Pair.of(false, "顺丰同城下单异常,无返回值!");
} }
if (!sfExpressApiRes.get("error_code").equals(0) || sfExpressApiRes.get("result") == null) { 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"))); return Pair.of(false, Convert.toStr(sfExpressApiRes.get("error_msg")));
} }
// 顺丰同城 result json 数据转实体实例 // 顺丰同城 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()); shopStoreSfOrder.setDev_id(sfCreateOrderReq.getDev_id());
// 下单成功保存顺丰同城订单记录到 shop_store_sf_order 表里 // 下单成功保存顺丰同城订单记录到 shop_store_sf_order 表里
Boolean success = shopStoreSfOrderService.insertShopStoreSfOrder(shopStoreSfOrder); Boolean success = shopStoreSfOrderService.insertShopStoreSfOrder(shopStoreSfOrder);
if (!success) { if (!success) {
return Pair.of(false, "保存顺丰同城单失败!"); return Pair.of(false, "保存顺丰同城单失败!");
} }
// 取件码在顺丰同城商户侧配置配置后有此字段 // 取件码在顺丰同城商户侧配置配置后有此字段
// String pickupCode = shopStoreSfOrder.getPickup_code() != null ? shopStoreSfOrder.getPickup_code().toString() : ""; // 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 jsonData
* @param sign * @param sign
* @return * @return
*/ */
@Transactional
@Override @Override
public SFExpressApiRes receiveRiderOrderStatusNotify(String jsonData, String sign) { public SFExpressApiRes receiveRiderOrderStatusNotify(String jsonData, String sign) {
if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) { if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) {
@ -435,9 +459,23 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData);
Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder);
if (!success) { 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"); return new SFExpressApiRes().success("success");
} }
@ -448,6 +486,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
* @param sign * @param sign
* @return * @return
*/ */
@Transactional
@Override @Override
public SFExpressApiRes receiveOrderCompleteNotify(String jsonData, String sign) { public SFExpressApiRes receiveOrderCompleteNotify(String jsonData, String sign) {
if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) { if (StrUtil.isBlank(jsonData) || StrUtil.isBlank(sign)) {
@ -461,7 +500,6 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
logger.info("接收顺丰订单完成回调返回的 JSON 数据:{}", jsonData); logger.info("接收顺丰订单完成回调返回的 JSON 数据:{}", jsonData);
// 更改顺丰同城订单状态 // 更改顺丰同城订单状态
ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData); ShopStoreSfOrder shopStoreSfOrder = toShopStoreSfOrder(jsonData);
if ( shopStoreSfOrder == null) { 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"); return new SFExpressApiRes().success("success");
} }
Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder); Boolean success = shopStoreSfOrderService.updateShopStoreSfOrderStatus(shopStoreSfOrder);
if (!success) { 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"); return new SFExpressApiRes().success("success");
} }

View File

@ -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.base.ShopBaseStoreCategory;
import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.modules.store.ShopStoreBase;
import com.suisung.mall.common.modules.store.ShopStoreCompany; 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 com.suisung.mall.core.web.service.IBaseService;
import org.springframework.data.util.Pair;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
@ -98,4 +100,11 @@ public interface ShopStoreBaseService extends IBaseService<ShopStoreBase> {
* @return * @return
*/ */
ShopStoreBase getShopStoreBaseByStoreId(Integer store_id); ShopStoreBase getShopStoreBaseByStoreId(Integer store_id);
/**
* 检测店铺的地址是否有效返回规范全地址
* @param shopStoreBase
* @return
*/
Pair<Boolean, StandardAddressDTO> checkStoreAddress(ShopStoreBase shopStoreBase);
} }

View File

@ -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.product.ShopProductIndex;
import com.suisung.mall.common.modules.store.*; import com.suisung.mall.common.modules.store.*;
import com.suisung.mall.common.modules.user.ShopUserFavoritesStore; 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.CSVUtils;
import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
@ -69,6 +70,7 @@ import io.seata.spring.annotation.GlobalTransactional;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
@ -2822,6 +2824,46 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
return getOne(queryWrapper); return getOne(queryWrapper);
} }
/**
* 检测店铺的地址是否有效返回规范全地址
*
* @param shopStoreBase
* @return
*/
@Override
public Pair<Boolean, StandardAddressDTO> 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 字段 * 处理 store_slide 字段
* *