顺丰同城嵌入逻辑开发
This commit is contained in:
parent
a820c7bbdf
commit
cb18871f40
@ -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;
|
||||
}
|
||||
|
||||
@ -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; // 维度
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<Boolean, String> pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum);
|
||||
if(pairCreateSfOrder==null){
|
||||
logger.error("顺丰同城下单失败!pairCreateSfOrder 返回空值");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!pairCreateSfOrder.getFirst()){
|
||||
logger.error("顺丰同城下单失败:{}",pairCreateSfOrder.getSecond());
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info("顺丰同城下单成功");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -528,5 +528,5 @@ public interface ShopOrderBaseService extends IBaseService<ShopOrderBase> {
|
||||
* @param orderPickupNum
|
||||
* @return
|
||||
*/
|
||||
SFCreateOrderReq buildSFOrderData(Integer devId,String orderId,String orderPickupNum);
|
||||
SFCreateOrderReq buildSFOrderData(Integer devId,String orderId, Long orderPickupNum);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@ -18,4 +21,11 @@ public interface ShopOrderDeliveryAddressService extends IBaseService<ShopOrderD
|
||||
* @return
|
||||
*/
|
||||
ShopOrderDeliveryAddress selectByOrderId(String orderId);
|
||||
|
||||
/**
|
||||
* 检测地址是否有效,返回规范全地址
|
||||
* @param shopOrderDeliveryAddress
|
||||
* @return
|
||||
*/
|
||||
Pair<Boolean, StandardAddressDTO> checkAddress(ShopOrderDeliveryAddress shopOrderDeliveryAddress);
|
||||
}
|
||||
|
||||
@ -31,4 +31,15 @@ public interface ShopOrderInfoService extends IBaseService<ShopOrderInfo> {
|
||||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
@ -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<ShopOrderBaseMappe
|
||||
@Resource
|
||||
private ShopOrderDeliveryAddressService shopOrderDeliveryAddressService;
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(ShopOrderBaseServiceImpl.class);
|
||||
private final Logger logger = LoggerFactory.getLogger(ShopOrderBaseServiceImpl.class);
|
||||
|
||||
|
||||
@Override
|
||||
@ -452,9 +453,9 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
order_info.put("fin_num", fin_num);
|
||||
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_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_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);
|
||||
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);
|
||||
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("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.setUser_id(user_id);
|
||||
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());
|
||||
}
|
||||
|
||||
return shopOrderStateLogService.saveOrUpdate(logs);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
// 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<ShopOrderBaseMappe
|
||||
|
||||
Map tmp_stock_bill_id = new HashMap();
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -2944,7 +2945,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
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 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)) {
|
||||
@ -3000,7 +3001,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
// todo 教育购买课程记录不放在这?
|
||||
Long product_id = item.getProduct_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));
|
||||
}
|
||||
}
|
||||
@ -3138,7 +3139,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
if (ObjectUtil.equal(1002, order_item_inventory_lock) && CheckUtil.isEmpty(item_src_id)) {
|
||||
Long item_id = order_item_row.getItem_id();
|
||||
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));
|
||||
}
|
||||
}
|
||||
@ -3204,7 +3205,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
ShopOrderInvoice invoice = orderInvoiceService.findOne(invoiceQueryWrapper);
|
||||
if (invoice != null) {
|
||||
if (!orderInvoiceService.edit(shopOrderInvoice, invoiceQueryWrapper)) {
|
||||
logger.error("更改: {} 发票失败!",order_ids);
|
||||
logger.error("更改: {} 发票失败!", order_ids);
|
||||
throw new ApiException(ResultCode.FAILED);
|
||||
}
|
||||
}
|
||||
@ -3725,7 +3726,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
String logistics_explain = getParameter("logistics_explain", "");
|
||||
String str_logistics_time = getParameter("logistics_time");
|
||||
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) {
|
||||
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());
|
||||
|
||||
if ("DESC".equals(sord.toUpperCase())) {
|
||||
if ("DESC".equalsIgnoreCase(sord)) {
|
||||
params.put(sidx + ":desc", "");
|
||||
} else {
|
||||
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());
|
||||
}
|
||||
|
||||
Long stime = getParameter("stime", 0l);
|
||||
Long stime = getParameter("stime", 0L);
|
||||
if (CheckUtil.isNotEmpty(stime)) {
|
||||
params.put("order_time:gt", stime);
|
||||
}
|
||||
|
||||
Long etime = getParameter("etime", 0l);
|
||||
Long etime = getParameter("etime", 0L);
|
||||
if (CheckUtil.isNotEmpty(etime)) {
|
||||
params.put("order_time:lt", etime);
|
||||
}
|
||||
@ -5585,7 +5586,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
} else {
|
||||
//todo 通知,余额不足;
|
||||
//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"));
|
||||
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 true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp);
|
||||
}).map(s -> {
|
||||
return Convert.toBigDecimal(s.get("cart_quantity"), 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"));
|
||||
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 true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return cart_select_tmp && is_on_sale_tmp && act_item_id.contains(item_id_tmp);
|
||||
}).map(s -> {
|
||||
return Convert.toBigDecimal(s.get("subtotal"), 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) {
|
||||
// 订单付款状态处理,
|
||||
// 不需要添加收款记录,直接修改订单状态
|
||||
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)) {
|
||||
throw new ApiException(I18nUtil._("订单支付状态修改失败!"));
|
||||
} else {
|
||||
@ -8115,7 +8108,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
if (CollUtil.isNotEmpty(order_id_receipt)) {
|
||||
for (String order_id : order_id_receipt) {
|
||||
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));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@ -8295,7 +8288,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
public SFCreateOrderReq buildSFOrderData(Integer devId,String orderId,String orderPickupNum) {
|
||||
public SFCreateOrderReq buildSFOrderData(Integer devId, String orderId, Long orderPickupNum) {
|
||||
if (StrUtil.isBlank(orderId)) {
|
||||
return null;
|
||||
}
|
||||
@ -8307,38 +8300,82 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
|
||||
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.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<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.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<Boolean, StandardAddressDTO> 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);
|
||||
|
||||
|
||||
@ -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<ShopOrd
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<ShopOrderInfoMappe
|
||||
@Autowired
|
||||
private ShopOrderInvoiceService shopOrderInvoiceService;
|
||||
|
||||
@Resource
|
||||
private ShopOrderStateLogService shopOrderStateLogService;
|
||||
|
||||
@Resource
|
||||
private ShopBaseStateCodeService shopBaseStateCodeService;
|
||||
|
||||
@Autowired
|
||||
private ThreadPoolExecutor executor;
|
||||
|
||||
@ -193,7 +202,7 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
|
||||
calendar.set(Calendar.MINUTE, 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.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 优化多次远程查询
|
||||
private Map dashboardPlantform() {
|
||||
List<Integer> order_state = Arrays.asList(
|
||||
|
||||
@ -27,10 +27,11 @@ public interface SFExpressApiService {
|
||||
|
||||
/**
|
||||
* 内部顺丰同城订单下单
|
||||
* @param sfCreateOrderReq
|
||||
* @param orderId
|
||||
* @param orderPickupNum
|
||||
* @return
|
||||
*/
|
||||
Pair<Boolean,String> innerCreateSfExpressOrder(SFCreateOrderReq sfCreateOrderReq);
|
||||
Pair<Boolean,String> innerCreateSfExpressOrder(String orderId, Long orderPickupNum);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -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<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 字符串参数
|
||||
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");
|
||||
}
|
||||
|
||||
@ -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<ShopStoreBase> {
|
||||
* @return
|
||||
*/
|
||||
ShopStoreBase getShopStoreBaseByStoreId(Integer store_id);
|
||||
|
||||
/**
|
||||
* 检测店铺的地址是否有效,返回规范全地址
|
||||
* @param shopStoreBase
|
||||
* @return
|
||||
*/
|
||||
Pair<Boolean, StandardAddressDTO> checkStoreAddress(ShopStoreBase shopStoreBase);
|
||||
}
|
||||
|
||||
@ -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<ShopStoreBaseMappe
|
||||
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 字段
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user