修改订单bug

This commit is contained in:
Jack 2024-12-15 00:55:42 +08:00
parent 4cbb05b0a0
commit 2daca09103
9 changed files with 147 additions and 54 deletions

View File

@ -521,7 +521,7 @@ public class StateCode {
// 打票机模版分类1-下单打印模版2-退货打印模版
public static final int PRINTER_TEMP_CATE_REFUND = 2;
// 顺丰同城订单状态1-订单创建;2-订单取消;10-配送员接单/配送员改派;12-配送员到店;15配送员配送中已取货;17-配送员妥投完单;22-配送员撤单;31-取消中;91-骑士上报异常;
// 顺丰同城订单状态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;

View File

@ -33,6 +33,8 @@ public class ShopBaseStateCodeServiceImpl extends BaseServiceImpl<ShopBaseStateC
* todo 可以优化这里缓存的是一个字段不是一条数据
* todo 一般情况此表不会发生变化如果追求数据一致性可以考虑使用redis Hash来存储使用JVM来缓存是更好的选择
*
* update 2024-12-14 切换到redis缓存 30秒
*
* @param code 商品状态码
*/
@Override

View File

@ -52,6 +52,4 @@ public class CacheConfig {
return config;
}
}

View File

@ -25,6 +25,9 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
/***
* 支付成功后微信和支付宝发出异步通知消息到 mqmq监听到消息执行更改订单状态已支付
*/
@Service
@Slf4j
@RabbitListener(queues = MqConstant.SHOP_PAIDYES_QUEUE, concurrency = "5-10")
@ -35,28 +38,35 @@ public class OrderPayedListener {
private ShopOrderBaseService shopOrderBaseService;
@Autowired
private ShopOrderInfoService shopOrderInfoService;
@Autowired
private ShopStorePrinterService shopStorePrinterService;
@Autowired
private MqMessageService mqMessageService;
// @Autowired
// private ShopStorePrinterService shopStorePrinterService;
// @Autowired
// private MqMessageService mqMessageService;
@Resource
private SFExpressApiService sfExpressApiService;
@RabbitHandler
public void listener(String data, Channel channel, Message message) throws IOException, InterruptedException {
List<String> order_id_row = Convert.toList(String.class, data);
String messageId = message.getMessageProperties().getMessageId();
List<String> order_id_row = Convert.toList(String.class, data);
try {
boolean flag = false;
logger.info("收到微信异步通知消息data:{}-chanel:{}-message:{},订单ID:{}", data, channel, message, order_id_row);
for (String orderId : order_id_row) {
//判断是否为线下支付订单
ShopOrderInfo orderInfoOld = shopOrderInfoService.get(orderId);
if (orderInfoOld == null) {
continue;
}
if (orderInfoOld.getOrder_state_id().intValue() == StateCode.ORDER_STATE_WAIT_PAY) {
// 订单状态
int order_state_id = orderInfoOld.getOrder_state_id().intValue();
logger.info("#### 当前订单状态: {} ####", order_state_id);
if (order_state_id == StateCode.ORDER_STATE_WAIT_PAY) {
// 待支付状态
logger.info("#### 待支付业务分支 ####");
flag = shopOrderBaseService.setPaidYes(Collections.singletonList(orderId));
@ -79,33 +89,32 @@ public class OrderPayedListener {
// 生成取单号和打印小票
if (flag) {
// TODO 以下仅处理下单打印的情况还需要处理退单打印分支
logger.info("####开始生成订单{}的取单号####", orderId);
ShopOrderInfo orderInfo = new ShopOrderInfo();
orderInfo.setOrder_id(orderId);
// 生成取单号写入order_info
Long orderPickupNum = shopOrderInfoService.genTodayPickupNum(orderInfoOld.getStore_id());
orderInfo.setOrder_pickup_num(orderPickupNum);
shopOrderInfoService.edit(orderInfo);
// 原始状态 2010-待付款;2011--待订单审核;2013-待财务审核 变成 2020-待配货2016-已经付款 的时候
// 生成取单号打票机打印订单向顺丰同城下单
if (order_state_id == StateCode.ORDER_STATE_WAIT_PAY
|| order_state_id == StateCode.ORDER_STATE_WAIT_REVIEW
|| order_state_id == StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW) {
// 已支付的订单生成取单号打票机并打印订单
Long orderPickupNum = shopOrderInfoService.isPaidOrderGenPickNumAndPrint(orderInfoOld.getStore_id(), orderId);
// 订单状态处理成功之后打印小票
shopStorePrinterService.printShopStoreOrder(orderId);
// 如果配送方式是 顺丰同城下单
if (orderInfoOld.getDelivery_type_id() != null && orderInfoOld.getDelivery_type_id().equals(StateCode.DELIVERY_TYPE_SAME_CITY)
&& orderPickupNum > 0) {
// 发送顺丰同城快递
Pair<Boolean, String> pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum);
if (pairCreateSfOrder == null) {
logger.error("顺丰同城下单失败pairCreateSfOrder 返回空值");
return;
}
// 如果配送方式是 同城配送直接同城顺丰下单
if (orderInfoOld.getDelivery_type_id() != null && orderInfoOld.getDelivery_type_id().equals(StateCode.DELIVERY_TYPE_SAME_CITY)) {
// 发送顺丰同城快递
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("顺丰同城下单成功");
}
if (!pairCreateSfOrder.getFirst()) {
logger.error("顺丰同城下单失败:{}", pairCreateSfOrder.getSecond());
return;
}
logger.info("顺丰同城下单成功");
}
}
}

View File

@ -40,6 +40,14 @@ public interface ShopOrderInfoService extends IBaseService<ShopOrderInfo> {
* @param orderIsShippedStatus 发货状态约定0值不更改
* @return
*/
Boolean changeOrderStatus(String orderId, Integer orderStatus,Integer orderIsOutStatus,Integer orderIsShippedStatus);
Boolean changeOrderStatus(String orderId, Integer orderStatus,Integer orderIsOutStatus, Integer orderIsShippedStatus);
/**
* 已支付的订单生成取单号打票机并打印订单
* @param storeId
* @param orderId
* @return 取货单号
*/
Long isPaidOrderGenPickNumAndPrint(Integer storeId, String orderId);
}

View File

@ -7689,6 +7689,13 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
return ObjectUtil.equal(order_is_paid, StateCode.ORDER_PAID_STATE_YES);
}
/**
* 根据条件获取用户的订单列表
* @param params
* @param page
* @param rows
* @return
*/
private Map getOrderInfoLists(Map params, Integer page, Integer rows) {
Page<ShopOrderInfo> orderInfoPage = shopOrderInfoService.lists(fixColumn(params), page, rows);
@ -7813,7 +7820,9 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
Map store_row = store_row_Opl.orElseGet(HashMap::new);
order_info_row.put("self_support", store_row.get("store_is_selfsupport"));
// 获取 order_base 的状态
Integer order_state_id = Convert.toInt(order_info_row.get("order_state_id"));
// logger.debug("用户订单列表,订单号号{},状态:{}",order_info_row.get("order_id"), order_state_id);
Integer order_is_shipped = Convert.toInt(order_info_row.get("order_is_shipped"));
Integer delivery_type_id = Convert.toInt(order_info_row.get("delivery_type_id"));
@ -7823,6 +7832,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (Arrays.asList(StateCode.PRODUCT_KIND_FUWU, StateCode.PRODUCT_KIND_CARD, StateCode.PRODUCT_KIND_WAIMAI, StateCode.PRODUCT_KIND_EDU).contains(kindId)) {
order_info_row.put("order_state_name", shopBaseStateCodeService.getText(order_state_id, "3"));
} else {
// 列表一直待配货中是不是有错误
order_info_row.put("order_state_name", shopBaseStateCodeService.getText(order_state_id, null));
if (order_state_id.equals(StateCode.ORDER_STATE_PICKING)
@ -8338,9 +8348,10 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
return null;
}
// 7位数取单号位数不够向左补0
String orderPickupNumStr = String.format("%07d", orderPickupNum);
if (shopStoreSameCityTransportBase == null) {
logger.error("请配置同城配送设置!");
return null;
}
// 顺丰同城给的测试店铺id
String shopId = "3243279847393";
@ -8348,6 +8359,11 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
if (enable_sf_express.equals(CommonConstant.Enable)) {//开启正式配送服务的时候
// 顺丰同城业务员给的店铺id
shopId = shopStoreSameCityTransportBase.getShop_id();
if(StrUtil.isBlank(shopId)){
logger.error("请联系站长配置顺丰同城店铺ID");
return null;
}
businessType = shopStoreSameCityTransportBase.getBusiness_type();
}
@ -8358,6 +8374,8 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
sfCreateOrderReq.setShop_order_id(shopOrderId);
sfCreateOrderReq.setOrder_time(shopOrderBase.getOrder_time().getTime() / 1000);
sfCreateOrderReq.setOrder_source("小发同城"); //订单来源
// 7位数取单号位数不够向左补0
String orderPickupNumStr = String.format("%07d", orderPickupNum);
sfCreateOrderReq.setOrder_sequence(orderPickupNumStr); //拣货编号
// sfCreateOrderReq.setRemark(shopStoreInfo.getOrder_message);
sfCreateOrderReq.setVersion(19);

View File

@ -7,10 +7,13 @@ 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.constant.CommonConstant;
import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.feignService.AccountService;
import com.suisung.mall.common.feignService.PayService;
import com.suisung.mall.common.feignService.SnsService;
import com.suisung.mall.common.modules.distribution.ShopDistributionUserWithdraw;
import com.suisung.mall.common.modules.order.ShopOrderBase;
import com.suisung.mall.common.modules.order.ShopOrderInfo;
import com.suisung.mall.common.modules.order.ShopOrderInvoice;
import com.suisung.mall.common.modules.order.ShopOrderStateLog;
@ -31,6 +34,7 @@ import com.suisung.mall.shop.plantform.service.ShopPlantformFeedbackService;
import com.suisung.mall.shop.product.service.ShopProductBaseService;
import com.suisung.mall.shop.product.service.ShopProductCommentService;
import com.suisung.mall.shop.store.service.ShopStoreBaseService;
import com.suisung.mall.shop.store.service.ShopStorePrinterService;
import com.sun.jna.platform.win32.WinDef;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -44,6 +48,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser;
@ -108,6 +113,9 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
@Resource
private ShopBaseStateCodeService shopBaseStateCodeService;
@Autowired
private ShopStorePrinterService shopStorePrinterService;
@Autowired
private ThreadPoolExecutor executor;
@ -228,6 +236,7 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
* @param orderIsShippedStatus 发货状态约定0值不更改
* @return
*/
@Transactional
@Override
public Boolean changeOrderStatus(String orderId, Integer orderStatus, Integer orderIsOutStatus, Integer orderIsShippedStatus) {
if (orderId == null || orderStatus == null) {
@ -243,7 +252,7 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
UpdateWrapper<ShopOrderInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("order_id", orderId);
if (orderStatus > 0 && !orderIsOutStatus.equals(orderStatus)) {
if (orderStatus > 0) {
updateWrapper.set("order_state_id", orderStatus);
}
@ -259,6 +268,15 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
return false;
}
UpdateWrapper<ShopOrderBase> updateShopOrderBaseWrapper = new UpdateWrapper<>();
updateShopOrderBaseWrapper.eq("order_id", orderId);
if (orderStatus > 0) {
updateShopOrderBaseWrapper.set("order_state_id", orderStatus);
if (!shopOrderBaseService.update(updateShopOrderBaseWrapper)) {
return false;
}
}
// 远程调用 更改交易订单状态
if (!payService.changePayConsumeTradeState(orderId, orderStatus, 0)) {
logger.error("远程调用更改交易订单状态失败!");
@ -280,6 +298,41 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
return shopOrderStateLogService.add(shopOrderStateLog);
}
/**
* 已支付的订单生成取单号打票机并打印订单
* @param storeId
* @param orderId
* @return 取货单号
*/
@Transactional
@Override
public Long isPaidOrderGenPickNumAndPrint(Integer storeId, String orderId) {
logger.info("####开始生成订单{}的取单号####", orderId);
ShopOrderInfo orderInfoOld = get(orderId);
if (orderInfoOld != null
&& orderInfoOld.getOrder_express_print().equals(CommonConstant.Enable)
&& orderInfoOld.getOrder_pickup_num() != null && orderInfoOld.getOrder_pickup_num() > 0) {
// 已打印过无需打印
logger.info("####以前生成的订单{}的取单号####", orderInfoOld.getOrder_pickup_num());
return orderInfoOld.getOrder_pickup_num();
}
ShopOrderInfo orderInfo = new ShopOrderInfo();
orderInfo.setOrder_id(orderId);
// 生成取单号写入order_info
Long orderPickupNum = genTodayPickupNum(storeId);
orderInfo.setOrder_pickup_num(orderPickupNum);
orderInfo.setOrder_express_print(CommonConstant.Enable); // 打印标记 1-已打印
if (!edit(orderInfo)) {
return 0L;
}
// 订单状态处理成功之后打印小票
shopStorePrinterService.printShopStoreOrder(orderId);
logger.info("####新生成订单{}的取单号####", orderPickupNum);
return orderPickupNum;
}
// todo 优化多次远程查询
private Map dashboardPlantform() {
List<Integer> order_state = Arrays.asList(

View File

@ -153,10 +153,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
// 检查 shop_store_sf_order 订单是否已存在
if(shopStoreSfOrderService.exists(devId,shopOrderId)){
return Pair.of(false, "顺丰同城下单时,发现订单已存在");
return Pair.of(true, "顺丰同城已下单过");
}
// 从商家订单中顺丰的订单信息关键的函数
// 从商家订单中顺丰的订单信息关键的函数
SFCreateOrderReq sfCreateOrderReq = shopOrderBaseService.buildSFOrderData(devId, shopOrderId, orderPickupNum);
if (sfCreateOrderReq == null) {
logger.error("顺丰同城下单异常,无法获取下单记录!");
@ -165,10 +165,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
// 请求参数转换 json 字符串参数
String paramJSON = JsonUtil.toJSONString(sfCreateOrderReq);
// 根据参数生成请求签名
String send_url = buildUrl("createorder", paramJSON);
// 向顺丰同城 创建一个顺丰同城配送订单
String retRespStr = HttpUtil.post(send_url, paramJSON);
if (StrUtil.isEmpty(retRespStr)) {
logger.error("创建顺丰同城订单异常,无返回值!");
@ -199,11 +199,8 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
return Pair.of(false, "保存顺丰同城下单失败!");
}
// 取件码在顺丰同城商户侧配置配置后有此字段
// String pickupCode = shopStoreSfOrder.getPickup_code() != null ? shopStoreSfOrder.getPickup_code().toString() : "";
// 商城订单状态 2020-待配货/待出库审核 2030-待发货
shopOrderInfoService.changeOrderStatus(shopOrderId, StateCode.ORDER_STATE_WAIT_SHIPPING, 0, 0);
// 商城订单状态2020-待配货/待出库审核
shopOrderInfoService.changeOrderStatus(shopOrderId, StateCode.ORDER_STATE_PICKING, 0, 0);
return Pair.of(true, "顺丰同城下单成功!");
}
@ -547,19 +544,27 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
Integer orderIsOutStatus = 0;
Integer orderIsShippedStatus = 0;
if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVING)
|| shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) {// 配送员已取单配送中
// 商城订单状态 2020-待配货 2030; //待发货
orderStatus = StateCode.ORDER_STATE_WAIT_SHIPPING;
|| shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) {
// 顺丰同城状态10-配送员接单/配送员改派;
// 商城订单状态 2016-已经付款 2020-待配货;
orderStatus = StateCode.ORDER_STATE_PICKING;
orderIsOutStatus = 0;
orderIsShippedStatus = 0;
} else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVED)) {// 配送员已取单配送中
} else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) {
// 顺丰同城状态12-配送员到店;
// 商城订单状态 2020-待配货 2030; //待发货
orderStatus = StateCode.ORDER_STATE_WAIT_SHIPPING;
orderIsOutStatus = StateCode.ORDER_PICKING_STATE_YES; // 已出库
orderIsShippedStatus = 0;
} else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVED)) {
// 顺丰同城状态15-配送员配送中已取货
// 商城订单状态 2030-待发货 2040-已发货/待收货确认
orderStatus = StateCode.ORDER_STATE_SHIPPED;
orderIsOutStatus = StateCode.ORDER_PICKING_STATE_YES;
orderIsShippedStatus = StateCode.ORDER_SHIPPED_STATE_YES;
orderIsOutStatus = 0;
orderIsShippedStatus = StateCode.ORDER_SHIPPED_STATE_YES; // 已发货
}
success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), orderStatus, orderIsOutStatus, orderIsShippedStatus);
success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), orderStatus, orderIsOutStatus, orderIsShippedStatus);
if (!success) {
throw new ApiException(I18nUtil._("状态处理失败!"));

View File

@ -191,7 +191,7 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl<ShopStoreSfOrde
}
QueryWrapper<ShopStoreSfOrder> wrapper = new QueryWrapper<>();
wrapper.eq("sf_order_id", shopOrderId);
wrapper.eq("shop_order_id", shopOrderId);
wrapper.eq("dev_id", devId);
return count(wrapper) > 0;